]> git.eshelyaron.com Git - emacs.git/commitdiff
Constant highlighting no longer captures Java annotations
authorVincenzo Pupillo <v.pupillo@gmail.com>
Wed, 22 Jan 2025 15:14:41 +0000 (16:14 +0100)
committerEshel Yaron <me@eshelyaron.com>
Tue, 4 Mar 2025 20:48:30 +0000 (21:48 +0100)
* lisp/progmodes/java-ts-mode.el
(java-ts-mode--fontify-constant): New function.
(java-ts-mode--font-lock-settings): Use it.

(cherry picked from commit 563b6f94511b76266984bc6764ec2a9391448138)

lisp/progmodes/java-ts-mode.el

index cbf5db24afda3faf39ec0bc06f395ce84000abb7..826bdb12ca67f1c250d7f0081bb69d9c9a7b02f1 100644 (file)
@@ -179,6 +179,23 @@ the available version of Tree-sitter for Java."
     (error
      `((string_literal) @font-lock-string-face))))
 
+(defun java-ts-mode--fontify-constant (node override start end &rest _)
+  "Fontify a Java constant.
+In Java the names of variables declared class constants and of ANSI
+constants should be all uppercase with words separated by underscores.
+This function also prevents annotations from being highlighted as if
+they were constants.
+For NODE, OVERRIDE, START, and END, see `treesit-font-lock-rules'."
+  (let ((node-start (treesit-node-start node))
+       (case-fold-search nil))
+    (when (and
+          (not (equal (char-before node-start) ?@)) ;; skip annotations
+          (string-match "\\`[A-Z_][0-9A-Z_]*\\'" (treesit-node-text node)))
+      (treesit-fontify-with-override
+       node-start (treesit-node-end node)
+       'font-lock-constant-face override
+       start end))))
+
 (defvar java-ts-mode--font-lock-settings
   (treesit-font-lock-rules
    :language 'java
@@ -189,8 +206,7 @@ the available version of Tree-sitter for Java."
    :language 'java
    :override t
    :feature 'constant
-   `(((identifier) @font-lock-constant-face
-      (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face))
+   `((identifier) @java-ts-mode--fontify-constant
      [(true) (false)] @font-lock-constant-face)
    :language 'java
    :override t