]> git.eshelyaron.com Git - emacs.git/commitdiff
Tweak faces in Java and TypeScript
authorTheodor Thornhill <theo@thornhill.no>
Mon, 21 Nov 2022 12:12:03 +0000 (13:12 +0100)
committerYuan Fu <casouri@gmail.com>
Tue, 22 Nov 2022 07:36:01 +0000 (23:36 -0800)
* lisp/progmodes/java-ts-mode.el (java-ts-mode--operators): Remove @
as an operator.

(java-ts-mode--font-lock-settings): Use constant-face for @ to match
rest of the annotation.  Add bracket, delimiter and use some of the
new faces.

(java-ts-mode--imenu): Clean up the implementation a little.

(java-ts-mode): Refer to the new features.

* lisp/progmodes/ts-mode.el (ts-mode--font-lock-settings, ts-mode):
Add in bracket and delimiter'.

lisp/progmodes/java-ts-mode.el
lisp/progmodes/ts-mode.el

index ee8ac31f675abfa7c01c279ab29c19ebc566de45..e78f1b4c6e8db5fc1e3fa6dcc1319dc9b7586b95 100644 (file)
   "C keywords for tree-sitter font-locking.")
 
 (defvar java-ts-mode--operators
-  '("@" "+" ":" "++" "-" "--" "&" "&&" "|" "||"
-    "!=" "==" "*" "/" "%" "<" "<=" ">" ">=" "="
-    "-=" "+=" "*=" "/=" "%=" "->" "^" "^=" "&="
-    "|=" "~" ">>" ">>>" "<<" "::" "?")
+  '("+" ":" "++" "-" "--" "&" "&&" "|" "||" "="
+    "!=" "==" "*" "/" "%" "<" "<=" ">" ">="
+    "-=" "+=" "*=" "/=" "%=" "->" "^" "^="
+    "|=" "~" ">>" ">>>" "<<" "::" "?" "&=")
   "C operators for tree-sitter font-locking.")
 
 (defvar java-ts-mode--font-lock-settings
   (treesit-font-lock-rules
-   :language 'java
-   :override t
-   :feature 'basic
-   '((identifier) @font-lock-variable-name-face)
    :language 'java
    :override t
    :feature 'comment
    :language 'java
    :override t
    :feature 'operator
-   `([,@java-ts-mode--operators] @font-lock-builtin-face)
+   `([,@java-ts-mode--operators] @font-lock-operator-face
+     "@" @font-lock-constant-face)
    :language 'java
    :override t
    :feature 'annotation
 
      (method_reference (identifier) @font-lock-type-face)
 
+     (scoped_identifier (identifier) @font-lock-variable-name-face)
+
      ((scoped_identifier name: (identifier) @font-lock-type-face)
       (:match "^[A-Z]" @font-lock-type-face))
 
    `((method_declaration
       name: (identifier) @font-lock-function-name-face)
 
+     (variable_declarator
+      name: (identifier) @font-lock-variable-name-face)
+
+     (element_value_pair
+      key: (identifier) @font-lock-property-face)
+
      (formal_parameter
       name: (identifier) @font-lock-variable-name-face)
 
      (method_invocation
       name: (identifier) @font-lock-function-name-face)
 
-     (argument_list (identifier) @font-lock-variable-name-face)))
+     (argument_list (identifier) @font-lock-variable-name-face))
+
+   :language 'java
+   :feature 'bracket
+   '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+
+   :language 'java
+   :feature 'delimiter
+   '((["," ":" ";"]) @font-lock-delimiter-face))
   "Tree-sitter font-lock settings.")
 
 (defun java-ts-mode--imenu-1 (node)
@@ -248,33 +261,27 @@ the subtrees."
 (defun java-ts-mode--imenu ()
   "Return Imenu alist for the current buffer."
   (let* ((node (treesit-buffer-root-node))
-         (class-tree
-          `("Class" . ,(java-ts-mode--imenu-1
-                        (treesit-induce-sparse-tree
-                         node "^class_declaration$" nil 1000))))
-         (interface-tree
-          `("Interface" . ,(java-ts-mode--imenu-1
-                            (treesit-induce-sparse-tree
-                             node "^interface_declaration$"  nil 1000))))
-         (enum-tree
-          `("Enum" . ,(java-ts-mode--imenu-1
-                       (treesit-induce-sparse-tree
-                        node "^enum_declaration$"  nil 1000))))
-         (record-tree
-          `("Record" . ,(java-ts-mode--imenu-1
-                         (treesit-induce-sparse-tree
-                          node "^record_declaration$"  nil 1000))))
-         (method-tree
-          `("Method" . ,(java-ts-mode--imenu-1
-                         (treesit-induce-sparse-tree
-                          node "^method_declaration$"  nil 1000)))))
-    (cl-remove-if
-     #'null
-     `(,(when (cdr class-tree) class-tree)
-       ,(when (cdr interface-tree) interface-tree)
-       ,(when (cdr enum-tree) enum-tree)
-       ,(when (cdr record-tree) record-tree)
-       ,(when (cdr method-tree) method-tree)))))
+         (class-tree (treesit-induce-sparse-tree
+                      node "^class_declaration$" nil 1000))
+         (interface-tree (treesit-induce-sparse-tree
+                          node "^interface_declaration$" nil 1000))
+         (enum-tree (treesit-induce-sparse-tree
+                     node "^enum_declaration$" nil 1000))
+         (record-tree (treesit-induce-sparse-tree
+                       node "^record_declaration$"  nil 1000))
+         (method-tree (treesit-induce-sparse-tree
+                       node "^method_declaration$" nil 1000))
+         (class-index (java-ts-mode--imenu-1 class-tree))
+         (interface-index (java-ts-mode--imenu-1 interface-tree))
+         (enum-index (java-ts-mode--imenu-1 enum-tree))
+         (record-index (java-ts-mode--imenu-1 record-tree))
+         (method-index (java-ts-mode--imenu-1 method-tree)))
+    (append
+     (when class-index `(("Class" . ,class-index)))
+     (when interface-index `(("Interface" . ,interface-index)))
+     (when enum-index `(("Enum" . ,enum-index)))
+     (when record-index `(("Record" . ,record-index)))
+     (when method-index `(("Method" . ,method-index))))))
 
 ;;;###autoload
 (define-derived-mode java-ts-mode prog-mode "Java"
@@ -307,9 +314,9 @@ the subtrees."
   ;; Font-lock.
   (setq-local treesit-font-lock-settings java-ts-mode--font-lock-settings)
   (setq-local treesit-font-lock-feature-list
-              '((basic comment keyword constant string operator)
+              '((comment keyword constant string)
                 (type definition expression literal annotation)
-                ()))
+                (bracket delimiter operator)))
 
   ;; Imenu.
   (setq-local imenu-create-index-function #'java-ts-mode--imenu)
index 01719a89ee2e6149a097e0f3e4076e02c471d9d0..a91eba6501ab268e147f44e9b497f3119e5f2f95 100644 (file)
    :language 'tsx
    :override t
    :feature 'property
-   `((pair key: (property_identifier) @font-lock-variable-name-face)
+   `((pair key: (property_identifier) @font-lock-property-face)
 
      (pair value: (identifier) @font-lock-variable-name-face)
 
      (pair
-      key: (property_identifier) @font-lock-function-name-face
+      key: (property_identifier) @font-lock-property-face
       value: [(function) (arrow_function)])
 
      (property_signature
-      name: (property_identifier) @font-lock-variable-name-face)
+      name: (property_identifier) @font-lock-property-face)
 
-     ((shorthand_property_identifier) @font-lock-variable-name-face)
+     ((shorthand_property_identifier) @font-lock-property-face)
 
      ((shorthand_property_identifier_pattern)
       @font-lock-variable-name-face))
    :override t
    :feature 'pattern
    `((pair_pattern
-      key: (property_identifier) @font-lock-variable-name-face)
+      key: (property_identifier) @font-lock-property-face)
 
      (array_pattern (identifier) @font-lock-variable-name-face))
 
       [(nested_identifier (identifier)) (identifier)]
       @font-lock-function-name-face)
 
-     (jsx_attribute (property_identifier) @font-lock-constant-face)))
+     (jsx_attribute (property_identifier) @font-lock-constant-face))
+   :language 'tsx
+   :feature 'bracket
+   '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+
+   :language 'tsx
+   :feature 'delimiter
+   '((["," ":" ";"]) @font-lock-delimiter-face))
   "Tree-sitter font-lock settings.")
 
 ;;;###autoload
     (setq-local treesit-font-lock-feature-list
                 '((comment declaration)
                   (string keyword identifier expression constant)
-                  (property pattern jsx)))
+                  (property pattern jsx bracket delimiter)))
     ;; Imenu.
     (setq-local imenu-create-index-function #'js--treesit-imenu)