]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix font locking of booleans in conf-toml-mode
authorStefan Kangas <stefankangas@gmail.com>
Tue, 1 Aug 2023 10:18:12 +0000 (12:18 +0200)
committerStefan Kangas <stefankangas@gmail.com>
Tue, 1 Aug 2023 12:39:30 +0000 (14:39 +0200)
* lisp/textmodes/conf-mode.el (conf-toml-mode): Do not use case
folding when font locking.
* test/lisp/textmodes/conf-mode-tests.el (conf-test-toml-mode):
Expand test.

lisp/textmodes/conf-mode.el
test/lisp/textmodes/conf-mode-tests.el

index d15fba9c43a9a413ea0546dc287187e74f43177b..ff41dcdf000f87fd7a686a38c64227f63ada60c1 100644 (file)
@@ -245,6 +245,7 @@ This variable is best set in the file local variables, or through
     ("^\\s-*\\(.+?\\)\\(?:\\[\\(.*?\\)\\]\\)?\\s-*="
      (1 'font-lock-variable-name-face)
      (2 'font-lock-constant-face nil t))
+    ;; Must be lower-case according to the TOML spec.
     ("\\_<false\\|true\\_>" 0 'font-lock-keyword-face))
   "Keywords to highlight in Conf TOML mode.")
 
@@ -643,7 +644,10 @@ For details see `conf-mode'.  Example:
 
 \[entry]
 value = \"some string\""
-  (conf-mode-initialize "#" 'conf-toml-font-lock-keywords)
+  (conf-mode-initialize "#")
+  ;; Booleans are "always lowercase", so we must *not* use case
+  ;; folding.  Therefore, we can't set it using `conf-mode-initialize´.
+  (setq-local font-lock-defaults `(,conf-toml-font-lock-keywords nil nil nil nil))
   (setq-local conf-assignment-column 0)
   (setq-local conf-assignment-sign ?=))
 
index 1f6d9b6b587da9d9a1a9be16dc69e46fea2bc019..677a6d35d66245d9465b16aeed1224aeee1d735c 100644 (file)
@@ -158,7 +158,6 @@ image/tiff                  tiff tif
     (should-not (face-at-point))))
 
 (ert-deftest conf-test-toml-mode ()
-  ;; From `conf-toml-mode' docstring.
   (with-temp-buffer
     (insert "[entry]
 value = \"some string\"")
@@ -174,6 +173,22 @@ value = \"some string\"")
     (search-forward "som")
     (should (equal (face-at-point) 'font-lock-string-face))))
 
+(ert-deftest conf-test-toml-mode/boolean ()
+  ;; https://toml.io/en/v1.0.0#boolean
+  (with-temp-buffer
+    (insert "[entry]
+a = true
+b = True")
+    (goto-char (point-min))
+    (conf-toml-mode)
+    (font-lock-mode)
+    (font-lock-ensure)
+    (search-forward "tru")
+    (should (equal (face-at-point) 'font-lock-keyword-face))
+    ;; Do not fontify upper-case "True".
+    (search-forward "Tru")
+    (should (equal (face-at-point) nil))))
+
 (ert-deftest conf-test-desktop-mode ()
   ;; From `conf-desktop-mode' dostring.
   (with-temp-buffer