[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master fd3c992 378/433: Fix sporadic keywords mishighlighting in
From: |
Dmitry Gutov |
Subject: |
[elpa] master fd3c992 378/433: Fix sporadic keywords mishighlighting in sql-mode |
Date: |
Thu, 15 Mar 2018 19:44:39 -0400 (EDT) |
branch: master
commit fd3c9925fcb005b1b43f089a9a58d3d551fe0fdc
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Fix sporadic keywords mishighlighting in sql-mode
And add three tests, the third one is testing for this fix.
Inspired by #30.
---
mmm-mode.el | 1 +
mmm-region.el | 15 +++++++++++++
mmm-vars.el | 2 +-
tests/highlighting.el | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 76 insertions(+), 1 deletion(-)
diff --git a/mmm-mode.el b/mmm-mode.el
index dcb4fd4..b9ce714 100644
--- a/mmm-mode.el
+++ b/mmm-mode.el
@@ -152,6 +152,7 @@ available through M-x customize-group RET mmm."
(c-make-styles-buffer-local t))
(mmm-update-mode-info major-mode)
(setq mmm-region-saved-locals-for-dominant
+ ;; FIXME: Neither is defined in recent Emacs.
(list* (list 'font-lock-cache-state nil)
(list 'font-lock-cache-position (make-marker))
(copy-tree (cdr (assq major-mode
mmm-region-saved-locals-defaults)))))
diff --git a/mmm-region.el b/mmm-region.el
index 35bad1e..7600ff0 100644
--- a/mmm-region.el
+++ b/mmm-region.el
@@ -621,6 +621,21 @@ the region ones."
(set (car var) (cadr var))))
(mmm-get-saved-local-variables mode ovl)))
+;; Used for debugging.
+(defun mmm-diff-local-variables (mode ovl)
+ (let (res)
+ (mapc (lambda (var)
+ (let ((current-value (if (consp (car var))
+ (funcall (caar var))
+ (symbol-value (car var)))))
+ (unless (equal current-value (cadr var))
+ (push
+ (message "var: %s, current: %s, saved: %s" (car var)
+ current-value (cadr var))
+ res))))
+ (mmm-get-saved-local-variables mode ovl))
+ res))
+
(defun mmm-get-saved-local-variables (mode ovl)
(append (get mode 'mmm-local-variables)
(cdr (assq mode mmm-buffer-saved-locals))
diff --git a/mmm-vars.el b/mmm-vars.el
index 6a36fb9..21d17d7 100644
--- a/mmm-vars.el
+++ b/mmm-vars.el
@@ -288,7 +288,7 @@
abbrev-mode
local-abbrev-table
;; And finally the syntax table and local map.
- ((syntax-table . set-syntax-table))
+ ((syntax-table . set-syntax-table) buffer)
((current-local-map . use-local-map) buffer)
paragraph-separate
paragraph-start
diff --git a/tests/highlighting.el b/tests/highlighting.el
new file mode 100644
index 0000000..25fcf95
--- /dev/null
+++ b/tests/highlighting.el
@@ -0,0 +1,59 @@
+(require 'ert-x)
+
+(defvar foo-mode-keywords
+ `((,(concat "\\b"
+ (regexp-opt '("foo" "bar") t)
+ "\\b")
+ . font-lock-keyword-face)))
+
+(define-derived-mode foo1-mode fundamental-mode ""
+ (setq font-lock-defaults '(foo-mode-keywords t t)))
+
+(ert-deftest mmm-font-lock-without-font-lock-syntax-table ()
+ (ert-with-test-buffer nil
+ (let (mmm-mode-ext-classes-alist
+ mmm-parse-when-idle)
+ (insert "foo // foo_bar")
+ (fundamental-mode)
+ (mmm-mode-on)
+ (mmm-ify-by-regexp 'foo1-mode "// " 0 "\\'" 0 nil)
+ (font-lock-fontify-region (point-min) (point-max))
+ (beginning-of-buffer)
+ (should-not (get-text-property (point) 'face))
+ (search-forward "fo" nil nil 2)
+ (should (eq (get-text-property (point) 'face) font-lock-keyword-face))
+ (search-forward "ba")
+ (should (eq (get-text-property (point) 'face) font-lock-keyword-face)))))
+
+(define-derived-mode foo2-mode fundamental-mode ""
+ (setq font-lock-defaults '(foo-mode-keywords t t ((?_ . "w")))))
+
+(ert-deftest mmm-font-lock-with-font-lock-syntax-table ()
+ (ert-with-test-buffer nil
+ (let (mmm-mode-ext-classes-alist
+ mmm-parse-when-idle)
+ (insert "foo // foo_bar")
+ (fundamental-mode)
+ (mmm-mode-on)
+ (mmm-ify-by-regexp 'foo2-mode "// " 0 "\\'" 0 nil)
+ (font-lock-fontify-region (point-min) (point-max))
+ (should-not (next-single-property-change (point-min) 'face)))))
+
+(define-derived-mode foo3-mode fundamental-mode ""
+ (setq font-lock-defaults '(foo-mode-keywords nil t ((?_ . "w")))))
+
+(ert-deftest mmm-syntax-propertize-function-preserves-current-syntax-table ()
+ (ert-with-test-buffer nil
+ (let (mmm-mode-ext-classes-alist
+ mmm-parse-when-idle)
+ (insert "foo_and_bar\n\nfoo")
+ (foo3-mode)
+ (mmm-mode-on)
+ (syntax-ppss-flush-cache (point-min))
+ ;; It locally changes `syntax-table' to `font-lock-syntax-table'
+ ;; and calls `syntax-ppss' inside that before fontifying.
+ (font-lock-fontify-region (point-min) (point-max))
+ (let ((pt (next-single-property-change (point-min) 'face)))
+ (should pt)
+ (goto-char pt)
+ (should (looking-at "foo\\'"))))))
- [elpa] master 141bbee 352/433: Remove regexp-opt's legacy stuff, (continued)
- [elpa] master 141bbee 352/433: Remove regexp-opt's legacy stuff, Dmitry Gutov, 2018/03/15
- [elpa] master ff4c564 344/433: * mmm-noweb.el: Add the FIXME note., Dmitry Gutov, 2018/03/15
- [elpa] master 5c152e0 334/433: Merge pull request #20 from dgutov/overlays, Dmitry Gutov, 2018/03/15
- [elpa] master 16907a3 368/433: Delete .cvsignore, move almost everything to .gitignore, Dmitry Gutov, 2018/03/15
- [elpa] master df0d56b 406/433: Fix regression from the previous commit, Dmitry Gutov, 2018/03/15
- [elpa] master 50764ae 269/433: Fixed back recognition of output regions., Dmitry Gutov, 2018/03/15
- [elpa] master cb905bd 431/433: Add copyright blurbs to the test files, Dmitry Gutov, 2018/03/15
- [elpa] master 38f1f2a 390/433: Update TODO, Dmitry Gutov, 2018/03/15
- [elpa] master 6406e1a 357/433: Update NEWS, Dmitry Gutov, 2018/03/15
- [elpa] master a57afa3 421/433: Release 0.5.5, Dmitry Gutov, 2018/03/15
- [elpa] master fd3c992 378/433: Fix sporadic keywords mishighlighting in sql-mode,
Dmitry Gutov <=
- [elpa] master 8ed11ab 262/433: Added delimiter regions and region name matching., Dmitry Gutov, 2018/03/15
- [elpa] master cb10b47 165/433: (mmm-set-buffer-file-name-p): Added to control file name setting., Dmitry Gutov, 2018/03/15
- [elpa] master ca87dd4 187/433: (mmm-update-mode-info): Hacked so `font-lock-keywords-alist' works., Dmitry Gutov, 2018/03/15
- [elpa] master cf82d88 423/433: Add to TODO, Dmitry Gutov, 2018/03/15
- [elpa] master 3ef8864 374/433: Expected results depend on the Emacs version, Dmitry Gutov, 2018/03/15
- [elpa] master c563b85 377/433: mmm-beginning-of-syntax: Don't consider overlays ending at point, Dmitry Gutov, 2018/03/15
- [elpa] master b8c18c2 227/433: Defined new submode placement error conditions., Dmitry Gutov, 2018/03/15
- [elpa] master 4e21882 403/433: mmm-match-region: Return front-pos even without front-delim; likewise for back, Dmitry Gutov, 2018/03/15
- [elpa] master b3c3510 289/433: Fix fontification of the first subregion line, Dmitry Gutov, 2018/03/15
- [elpa] master 4d41181 405/433: Make c-mode raise fewer errors, Dmitry Gutov, 2018/03/15