rust-ts-mode--font-lock-settings: Avoid the explicit 'default' face
* lisp/progmodes/rust-ts-mode.el (rust-ts-mode--fontify-scope) (rust-ts-mode--fontify-tail): New functions. (rust-ts-mode--font-lock-settings): Use them instead of a lot of more complex queries (bug#61302). Thus avoid having to create block fontification by other features using the 'default' face. Replace the catch-all query for 'variable' with an enumeration of possible parent nodes.
This commit is contained in:
parent
b5bea14ca1
commit
1ac05eac74
1 changed files with 47 additions and 62 deletions
|
@ -209,50 +209,15 @@
|
||||||
`((scoped_use_list path: (identifier) @font-lock-constant-face)
|
`((scoped_use_list path: (identifier) @font-lock-constant-face)
|
||||||
(scoped_use_list path: (scoped_identifier
|
(scoped_use_list path: (scoped_identifier
|
||||||
name: (identifier) @font-lock-constant-face))
|
name: (identifier) @font-lock-constant-face))
|
||||||
|
|
||||||
((use_as_clause alias: (identifier) @font-lock-type-face)
|
((use_as_clause alias: (identifier) @font-lock-type-face)
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
(:match "^[A-Z]" @font-lock-type-face))
|
||||||
((use_as_clause path: (identifier) @font-lock-type-face)
|
((use_as_clause path: (identifier) @font-lock-type-face)
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
(:match "^[A-Z]" @font-lock-type-face))
|
||||||
((use_as_clause path:
|
|
||||||
(scoped_identifier path: (_)
|
|
||||||
name: (identifier) @font-lock-type-face))
|
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
|
||||||
(use_as_clause path: (scoped_identifier name: (identifier) @default))
|
|
||||||
|
|
||||||
((use_declaration
|
|
||||||
argument: (scoped_identifier
|
|
||||||
path: (_) @font-lock-constant-face
|
|
||||||
name: (identifier) @font-lock-type-face))
|
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
|
||||||
(use_declaration
|
|
||||||
argument: (scoped_identifier
|
|
||||||
name: (identifier) @default))
|
|
||||||
|
|
||||||
(use_declaration
|
|
||||||
argument: (scoped_identifier
|
|
||||||
path: (scoped_identifier
|
|
||||||
path: (_) @font-lock-constant-face
|
|
||||||
name: (identifier) @font-lock-constant-face)
|
|
||||||
name: (identifier) @default))
|
|
||||||
|
|
||||||
(use_declaration
|
|
||||||
argument: (scoped_use_list
|
|
||||||
path: (scoped_identifier
|
|
||||||
path: (_) @font-lock-constant-face
|
|
||||||
name: (identifier) @font-lock-constant-face)))
|
|
||||||
|
|
||||||
((use_list (identifier) @font-lock-type-face)
|
((use_list (identifier) @font-lock-type-face)
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
(:match "^[A-Z]" @font-lock-type-face))
|
||||||
(use_list (identifier) @default)
|
(use_wildcard [(identifier) @rust-ts-mode--fontify-scope
|
||||||
((use_list (scoped_identifier path: (_)
|
(scoped_identifier
|
||||||
name: (identifier) @font-lock-type-face))
|
name: (identifier) @rust-ts-mode--fontify-scope)])
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
|
||||||
(use_list (scoped_identifier path: (_)
|
|
||||||
name: (identifier) @default))
|
|
||||||
(use_wildcard (scoped_identifier
|
|
||||||
name: (identifier) @font-lock-constant-face))
|
|
||||||
|
|
||||||
(enum_variant name: (identifier) @font-lock-type-face)
|
(enum_variant name: (identifier) @font-lock-type-face)
|
||||||
(match_arm
|
(match_arm
|
||||||
pattern: (match_pattern (_ type: (identifier) @font-lock-type-face)))
|
pattern: (match_pattern (_ type: (identifier) @font-lock-type-face)))
|
||||||
|
@ -263,31 +228,13 @@
|
||||||
(mod_item name: (identifier) @font-lock-constant-face)
|
(mod_item name: (identifier) @font-lock-constant-face)
|
||||||
(primitive_type) @font-lock-type-face
|
(primitive_type) @font-lock-type-face
|
||||||
(type_identifier) @font-lock-type-face
|
(type_identifier) @font-lock-type-face
|
||||||
((scoped_identifier name: (identifier) @font-lock-type-face)
|
((scoped_identifier name: (identifier) @rust-ts-mode--fontify-tail))
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
|
||||||
((scoped_identifier path: (identifier) @font-lock-type-face)
|
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
|
||||||
((scoped_identifier
|
|
||||||
path: [(identifier) @font-lock-type-face
|
|
||||||
(scoped_identifier
|
|
||||||
name: (identifier) @font-lock-type-face)])
|
|
||||||
(:match "^[A-Z]" @font-lock-type-face))
|
|
||||||
((scoped_identifier path: (identifier) @font-lock-type-face)
|
((scoped_identifier path: (identifier) @font-lock-type-face)
|
||||||
(:match
|
(:match
|
||||||
"^\\(u8\\|u16\\|u32\\|u64\\|u128\\|usize\\|i8\\|i16\\|i32\\|i64\\|i128\\|isize\\|char\\|str\\)$"
|
"^\\(u8\\|u16\\|u32\\|u64\\|u128\\|usize\\|i8\\|i16\\|i32\\|i64\\|i128\\|isize\\|char\\|str\\)$"
|
||||||
@font-lock-type-face))
|
@font-lock-type-face))
|
||||||
(scoped_identifier path: (_) @font-lock-constant-face
|
((scoped_identifier path: (identifier) @rust-ts-mode--fontify-scope))
|
||||||
name: (identifier) @font-lock-type-face)
|
(type_identifier) @font-lock-type-face)
|
||||||
(scoped_identifier path: (scoped_identifier
|
|
||||||
name: (identifier) @font-lock-constant-face))
|
|
||||||
(scoped_type_identifier path: (_) @font-lock-constant-face)
|
|
||||||
(scoped_type_identifier
|
|
||||||
path: (scoped_identifier
|
|
||||||
path: (_) @font-lock-constant-face
|
|
||||||
name: (identifier) @font-lock-constant-face))
|
|
||||||
(type_identifier) @font-lock-type-face
|
|
||||||
;; Ensure function calls aren't highlighted as types.
|
|
||||||
(call_expression function: (scoped_identifier name: (identifier) @default)))
|
|
||||||
|
|
||||||
:language 'rust
|
:language 'rust
|
||||||
:feature 'property
|
:feature 'property
|
||||||
|
@ -303,9 +250,25 @@
|
||||||
|
|
||||||
:language 'rust
|
:language 'rust
|
||||||
:feature 'variable
|
:feature 'variable
|
||||||
'((identifier) @font-lock-variable-name-face
|
'((arguments (identifier) @font-lock-variable-name-face)
|
||||||
;; Everything in a token_tree is an identifier.
|
(array_expression (identifier) @font-lock-variable-name-face)
|
||||||
(token_tree (identifier) @default))
|
(assignment_expression right: (identifier) @font-lock-variable-name-face)
|
||||||
|
(binary_expression left: (identifier) @font-lock-variable-name-face)
|
||||||
|
(binary_expression right: (identifier) @font-lock-variable-name-face)
|
||||||
|
(block (identifier) @font-lock-variable-name-face)
|
||||||
|
(compound_assignment_expr right: (identifier) @font-lock-variable-name-face)
|
||||||
|
(field_expression value: (identifier) @font-lock-variable-name-face)
|
||||||
|
(field_initializer value: (identifier) @font-lock-variable-name-face)
|
||||||
|
(if_expression condition: (identifier) @font-lock-variable-name-face)
|
||||||
|
(let_condition value: (identifier) @font-lock-variable-name-face)
|
||||||
|
(let_declaration value: (identifier) @font-lock-variable-name-face)
|
||||||
|
(match_arm value: (identifier) @font-lock-variable-name-face)
|
||||||
|
(match_expression value: (identifier) @font-lock-variable-name-face)
|
||||||
|
(reference_expression value: (identifier) @font-lock-variable-name-face)
|
||||||
|
(return_expression (identifier) @font-lock-variable-name-face)
|
||||||
|
(tuple_expression (identifier) @font-lock-variable-name-face)
|
||||||
|
(unary_expression (identifier) @font-lock-variable-name-face)
|
||||||
|
(while_expression condition: (identifier) @font-lock-variable-name-face))
|
||||||
|
|
||||||
:language 'rust
|
:language 'rust
|
||||||
:feature 'escape-sequence
|
:feature 'escape-sequence
|
||||||
|
@ -318,6 +281,28 @@
|
||||||
'((ERROR) @font-lock-warning-face))
|
'((ERROR) @font-lock-warning-face))
|
||||||
"Tree-sitter font-lock settings for `rust-ts-mode'.")
|
"Tree-sitter font-lock settings for `rust-ts-mode'.")
|
||||||
|
|
||||||
|
(defun rust-ts-mode--fontify-scope (node override start end &optional tail-p)
|
||||||
|
(let* ((case-fold-search nil)
|
||||||
|
(face
|
||||||
|
(cond
|
||||||
|
((string-match-p "^[A-Z]" (treesit-node-text node))
|
||||||
|
'font-lock-type-face)
|
||||||
|
((and
|
||||||
|
tail-p
|
||||||
|
(string-match-p
|
||||||
|
"\\`\\(?:use_list\\|call_expression\\|use_as_clause\\|use_declaration\\)\\'"
|
||||||
|
(treesit-node-type (treesit-node-parent (treesit-node-parent node)))))
|
||||||
|
nil)
|
||||||
|
(t 'font-lock-constant-face))))
|
||||||
|
(when face
|
||||||
|
(treesit-fontify-with-override
|
||||||
|
(treesit-node-start node) (treesit-node-end node)
|
||||||
|
face
|
||||||
|
override start end))))
|
||||||
|
|
||||||
|
(defun rust-ts-mode--fontify-tail (node override start end)
|
||||||
|
(rust-ts-mode--fontify-scope node override start end t))
|
||||||
|
|
||||||
(defalias 'rust-ts-mode--fontify-pattern
|
(defalias 'rust-ts-mode--fontify-pattern
|
||||||
(and
|
(and
|
||||||
(treesit-available-p)
|
(treesit-available-p)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue