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) @variable.special
63(super) @variable.special
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 "var"
198 "void"
199 "while"
200 "with"
201 "yield"
202] @keyword
203
204(template_substitution
205 "${" @punctuation.special
206 "}" @punctuation.special) @embedded
207
208(type_arguments
209 "<" @punctuation.bracket
210 ">" @punctuation.bracket)
211
212; Keywords
213
214[ "abstract"
215 "declare"
216 "enum"
217 "export"
218 "implements"
219 "interface"
220 "keyof"
221 "namespace"
222 "private"
223 "protected"
224 "public"
225 "type"
226 "readonly"
227 "override"
228] @keyword
229
230; JSX elements
231(jsx_opening_element (identifier) @tag (#match? @tag "^[a-z][^.]*$"))
232(jsx_closing_element (identifier) @tag (#match? @tag "^[a-z][^.]*$"))
233(jsx_self_closing_element (identifier) @tag (#match? @tag "^[a-z][^.]*$"))
234
235(jsx_attribute (property_identifier) @attribute)
236(jsx_opening_element (["<" ">"]) @punctuation.bracket)
237(jsx_closing_element (["</" ">"]) @punctuation.bracket)
238(jsx_self_closing_element (["<" "/>"]) @punctuation.bracket)