[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 a3a1ef7bd5 2/2: Fix rust-ts-mode type and module highlighting (
From: |
Dmitry Gutov |
Subject: |
emacs-29 a3a1ef7bd5 2/2: Fix rust-ts-mode type and module highlighting (Bug#61302) |
Date: |
Tue, 14 Feb 2023 16:55:11 -0500 (EST) |
branch: emacs-29
commit a3a1ef7bd5eb7a3b74b0fd80ce78ef234c25f573
Author: Randy Taylor <dev@rjt.dev>
Commit: Dmitry Gutov <dgutov@yandex.ru>
Fix rust-ts-mode type and module highlighting (Bug#61302)
* lisp/progmodes/rust-ts-mode.el (rust-ts-mode--font-lock-settings):
Specify import queries to avoid clashing with scoped identifiers in
the code. Highlight attributes with font-lock-preprocessor-face.
---
lisp/progmodes/rust-ts-mode.el | 88 ++++++++++++++++++++++++++++++++++--------
1 file changed, 72 insertions(+), 16 deletions(-)
diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el
index f709b16ff3..f510b7bb6c 100644
--- a/lisp/progmodes/rust-ts-mode.el
+++ b/lisp/progmodes/rust-ts-mode.el
@@ -124,8 +124,8 @@
(treesit-font-lock-rules
:language 'rust
:feature 'attribute
- '((attribute_item) @font-lock-constant-face
- (inner_attribute_item) @font-lock-constant-face)
+ '((attribute_item) @font-lock-preprocessor-face
+ (inner_attribute_item) @font-lock-preprocessor-face)
:language 'rust
:feature 'bracket
@@ -147,12 +147,6 @@
:feature 'comment
'(([(block_comment) (line_comment)]) @font-lock-comment-face)
- :language 'rust
- :feature 'constant
- `((boolean_literal) @font-lock-constant-face
- ((identifier) @font-lock-constant-face
- (:match "^[A-Z][A-Z\\d_]*$" @font-lock-constant-face)))
-
:language 'rust
:feature 'delimiter
'((["," "." ";" ":" "::"]) @font-lock-delimiter-face)
@@ -211,7 +205,54 @@
:language 'rust
:feature 'type
- `((enum_variant name: (identifier) @font-lock-type-face)
+ `((scoped_use_list path: (identifier) @font-lock-constant-face)
+ (scoped_use_list path: (scoped_identifier
+ name: (identifier) @font-lock-constant-face))
+
+ ((use_as_clause alias: (identifier) @font-lock-type-face)
+ (:match "^[A-Z]" @font-lock-type-face))
+ ((use_as_clause path: (identifier) @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)
+ (:match "^[A-Z]" @font-lock-type-face))
+ (use_list (identifier) @default)
+ ((use_list (scoped_identifier path: (_)
+ name: (identifier) @font-lock-type-face))
+ (: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)
(match_arm
pattern: (match_pattern (_ type: (identifier) @font-lock-type-face)))
(match_arm
@@ -225,25 +266,40 @@
(:match "^[A-Z]" @font-lock-type-face))
((scoped_identifier path: (identifier) @font-lock-type-face)
(:match "^[A-Z]" @font-lock-type-face))
- ((scoped_identifier
- (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_type_identifier path: (identifier) @font-lock-type-face)
+ ((scoped_identifier path: (identifier) @font-lock-type-face)
+ (:match
+
"^\\(u8\\|u16\\|u32\\|u64\\|u128\\|usize\\|i8\\|i16\\|i32\\|i64\\|i128\\|isize\\|char\\|str\\)$"
+ @font-lock-type-face))
+ (scoped_identifier path: (_) @font-lock-constant-face
+ name: (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
- (use_as_clause alias: (identifier) @font-lock-type-face)
- (use_list (identifier) @font-lock-type-face))
+ ;; Ensure function calls aren't highlighted as types.
+ (call_expression function: (scoped_identifier name: (identifier)
@default)))
:language 'rust
:feature 'property
'((field_identifier) @font-lock-property-face
(shorthand_field_initializer (identifier) @font-lock-property-face))
+ ;; Must be under type, otherwise some imports can be highlighted as
consants.
+ :language 'rust
+ :feature 'constant
+ `((boolean_literal) @font-lock-constant-face
+ ((identifier) @font-lock-constant-face
+ (:match "^[A-Z][A-Z\\d_]*$" @font-lock-constant-face)))
+
:language 'rust
:feature 'variable
'((identifier) @font-lock-variable-name-face