From: Randy Taylor Date: Thu, 9 Feb 2023 02:43:04 +0000 (-0500) Subject: Fix rust-ts-mode type and module highlighting (Bug#61302) X-Git-Tag: emacs-29.0.90~426^2~16 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a3a1ef7bd5eb7a3b74b0fd80ce78ef234c25f573;p=emacs.git 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. --- diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index f709b16ff39..f510b7bb6c9 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