emacs-elpa-diffs
[Top][All Lists]
Advanced

[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\\'"))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]