"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)
(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"
;; 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)
: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)