1(type_identifier) @type
2(primitive_type) @type.builtin
3(self) @variable.special
4(field_identifier) @property
5
6(trait_item name: (type_identifier) @type.interface)
7(impl_item trait: (type_identifier) @type.interface)
8(abstract_type trait: (type_identifier) @type.interface)
9(dynamic_type trait: (type_identifier) @type.interface)
10(trait_bounds (type_identifier) @type.interface)
11
12(call_expression
13 function: [
14 (identifier) @function
15 (scoped_identifier
16 name: (identifier) @function)
17 (field_expression
18 field: (field_identifier) @function.method)
19 ])
20
21(generic_function
22 function: [
23 (identifier) @function
24 (scoped_identifier
25 name: (identifier) @function)
26 (field_expression
27 field: (field_identifier) @function.method)
28 ])
29
30(function_item name: (identifier) @function.definition)
31(function_signature_item name: (identifier) @function.definition)
32
33(macro_invocation
34 macro: [
35 (identifier) @function.special
36 (scoped_identifier
37 name: (identifier) @function.special)
38 ])
39
40(macro_definition
41 name: (identifier) @function.special.definition)
42
43; Identifier conventions
44
45; Assume uppercase names are types/enum-constructors
46((identifier) @type
47 (#match? @type "^[A-Z]"))
48
49; Assume all-caps names are constants
50((identifier) @constant
51 (#match? @constant "^_*[A-Z][A-Z\\d_]*$"))
52
53[
54 "("
55 ")"
56 "{"
57 "}"
58 "["
59 "]"
60] @punctuation.bracket
61
62(_
63 .
64 "<" @punctuation.bracket
65 ">" @punctuation.bracket)
66
67[
68 ";"
69 ","
70 "::"
71] @punctuation.delimiter
72
73[
74 "#"
75] @punctuation.special
76
77[
78 "as"
79 "async"
80 "await"
81 "break"
82 "const"
83 "continue"
84 "default"
85 "dyn"
86 "else"
87 "enum"
88 "extern"
89 "fn"
90 "for"
91 "if"
92 "impl"
93 "in"
94 "let"
95 "loop"
96 "macro_rules!"
97 "match"
98 "mod"
99 "move"
100 "pub"
101 "ref"
102 "return"
103 "static"
104 "struct"
105 "trait"
106 "type"
107 "union"
108 "unsafe"
109 "use"
110 "where"
111 "while"
112 "yield"
113 (crate)
114 (mutable_specifier)
115 (super)
116] @keyword
117
118[
119 (string_literal)
120 (raw_string_literal)
121 (char_literal)
122] @string
123
124[
125 (integer_literal)
126 (float_literal)
127] @number
128
129(boolean_literal) @constant
130
131[
132 (line_comment)
133 (block_comment)
134] @comment
135
136[
137 (line_comment (doc_comment))
138 (block_comment (doc_comment))
139] @comment.doc
140
141[
142 "!"
143 "!="
144 "%"
145 "%="
146 "&"
147 "&="
148 "&&"
149 "*"
150 "*="
151 "*"
152 "+"
153 "+="
154 ","
155 "-"
156 "-="
157 "->"
158 "."
159 ".."
160 "..="
161 "..."
162 "/"
163 "/="
164 ":"
165 ";"
166 "<<"
167 "<<="
168 "<"
169 "<="
170 "="
171 "=="
172 "=>"
173 ">"
174 ">="
175 ">>"
176 ">>="
177 "@"
178 "^"
179 "^="
180 "|"
181 "|="
182 "||"
183 "?"
184] @operator
185
186(lifetime) @lifetime
187
188(parameter (identifier) @variable.parameter)
189
190(attribute_item) @attribute
191(inner_attribute_item) @attribute