1; Variables
2
3(identifier) @variable
4
5; Properties
6
7(property_identifier) @property
8(shorthand_property_identifier) @property
9(shorthand_property_identifier_pattern) @property
10
11; Function and method calls
12
13(call_expression
14 function: (identifier) @function)
15
16(call_expression
17 function: (member_expression
18 property: (property_identifier) @function.method))
19
20; Function and method definitions
21
22(function_expression
23 name: (identifier) @function)
24(function_declaration
25 name: (identifier) @function)
26(method_definition
27 name: (property_identifier) @function.method)
28
29(pair
30 key: (property_identifier) @function.method
31 value: [(function_expression) (arrow_function)])
32
33(assignment_expression
34 left: (member_expression
35 property: (property_identifier) @function.method)
36 right: [(function_expression) (arrow_function)])
37
38(variable_declarator
39 name: (identifier) @function
40 value: [(function_expression) (arrow_function)])
41
42(assignment_expression
43 left: (identifier) @function
44 right: [(function_expression) (arrow_function)])
45
46; Special identifiers
47
48((identifier) @type
49 (#match? @type "^[A-Z]"))
50(type_identifier) @type
51(predefined_type) @type.builtin
52
53([
54 (identifier)
55 (shorthand_property_identifier)
56 (shorthand_property_identifier_pattern)
57 ] @constant
58 (#match? @constant "^_*[A-Z_][A-Z\\d_]*$"))
59
60; Literals
61
62(this) @keyword
63(super) @keyword
64
65[
66 (null)
67 (undefined)
68] @constant.builtin
69
70[
71 (true)
72 (false)
73] @boolean
74
75(comment) @comment
76
77[
78 (string)
79 (template_string)
80] @string
81
82(escape_sequence) @string.escape
83
84(regex) @string.regex
85(number) @number
86
87; Tokens
88
89[
90 ";"
91 "?."
92 "."
93 ","
94 ":"
95] @punctuation.delimiter
96
97[
98 "-"
99 "--"
100 "-="
101 "+"
102 "++"
103 "+="
104 "*"
105 "*="
106 "**"
107 "**="
108 "/"
109 "/="
110 "%"
111 "%="
112 "<"
113 "<="
114 "<<"
115 "<<="
116 "="
117 "=="
118 "==="
119 "!"
120 "!="
121 "!=="
122 "=>"
123 ">"
124 ">="
125 ">>"
126 ">>="
127 ">>>"
128 ">>>="
129 "~"
130 "^"
131 "&"
132 "|"
133 "^="
134 "&="
135 "|="
136 "&&"
137 "||"
138 "??"
139 "&&="
140 "||="
141 "??="
142] @operator
143
144[
145 "("
146 ")"
147 "["
148 "]"
149 "{"
150 "}"
151] @punctuation.bracket
152
153(ternary_expression
154 [
155 "?"
156 ":"
157 ] @operator
158)
159
160[
161 "as"
162 "async"
163 "await"
164 "break"
165 "case"
166 "catch"
167 "class"
168 "const"
169 "continue"
170 "debugger"
171 "default"
172 "delete"
173 "do"
174 "else"
175 "export"
176 "extends"
177 "finally"
178 "for"
179 "from"
180 "function"
181 "get"
182 "if"
183 "import"
184 "in"
185 "instanceof"
186 "let"
187 "new"
188 "of"
189 "return"
190 "set"
191 "static"
192 "switch"
193 "target"
194 "throw"
195 "try"
196 "typeof"
197 "using"
198 "var"
199 "void"
200 "while"
201 "with"
202 "yield"
203] @keyword
204
205(template_substitution
206 "${" @punctuation.special
207 "}" @punctuation.special) @embedded
208
209(type_arguments
210 "<" @punctuation.bracket
211 ">" @punctuation.bracket)
212
213; Keywords
214
215[ "abstract"
216 "declare"
217 "enum"
218 "export"
219 "implements"
220 "interface"
221 "keyof"
222 "namespace"
223 "private"
224 "protected"
225 "public"
226 "type"
227 "readonly"
228 "override"
229] @keyword
230
231; JSX elements
232(jsx_opening_element (identifier) @tag (#match? @tag "^[a-z][^.]*$"))
233(jsx_closing_element (identifier) @tag (#match? @tag "^[a-z][^.]*$"))
234(jsx_self_closing_element (identifier) @tag (#match? @tag "^[a-z][^.]*$"))
235
236(jsx_attribute (property_identifier) @attribute)
237(jsx_opening_element (["<" ">"]) @punctuation.bracket)
238(jsx_closing_element (["</" ">"]) @punctuation.bracket)
239(jsx_self_closing_element (["<" "/>"]) @punctuation.bracket)