1(internal_module
2 "namespace" @context
3 name: (_) @name) @item
4
5(enum_declaration
6 "enum" @context
7 name: (_) @name) @item
8
9(function_declaration
10 "async"? @context
11 "function" @context
12 name: (_) @name
13 parameters: (formal_parameters
14 "(" @context
15 ")" @context)) @item
16
17(generator_function_declaration
18 "async"? @context
19 "function" @context
20 "*" @context
21 name: (_) @name
22 parameters: (formal_parameters
23 "(" @context
24 ")" @context)) @item
25
26(interface_declaration
27 "interface" @context
28 name: (_) @name) @item
29
30(program
31 (export_statement
32 (lexical_declaration
33 [
34 "let"
35 "const"
36 ] @context
37 (variable_declarator
38 name: (identifier) @name) @item)))
39
40; Exported array destructuring
41(program
42 (export_statement
43 (lexical_declaration
44 [
45 "let"
46 "const"
47 ] @context
48 (variable_declarator
49 name: (array_pattern
50 [
51 (identifier) @name @item
52 (assignment_pattern
53 left: (identifier) @name @item)
54 (rest_pattern
55 (identifier) @name @item)
56 ])))))
57
58; Exported object destructuring
59(program
60 (export_statement
61 (lexical_declaration
62 [
63 "let"
64 "const"
65 ] @context
66 (variable_declarator
67 name: (object_pattern
68 [
69 (shorthand_property_identifier_pattern) @name @item
70 (pair_pattern
71 value: (identifier) @name @item)
72 (pair_pattern
73 value: (assignment_pattern
74 left: (identifier) @name @item))
75 (rest_pattern
76 (identifier) @name @item)
77 ])))))
78
79(program
80 (lexical_declaration
81 [
82 "let"
83 "const"
84 ] @context
85 (variable_declarator
86 name: (identifier) @name) @item))
87
88; Top-level array destructuring
89(program
90 (lexical_declaration
91 [
92 "let"
93 "const"
94 ] @context
95 (variable_declarator
96 name: (array_pattern
97 [
98 (identifier) @name @item
99 (assignment_pattern
100 left: (identifier) @name @item)
101 (rest_pattern
102 (identifier) @name @item)
103 ]))))
104
105; Top-level object destructuring
106(program
107 (lexical_declaration
108 [
109 "let"
110 "const"
111 ] @context
112 (variable_declarator
113 name: (object_pattern
114 [
115 (shorthand_property_identifier_pattern) @name @item
116 (pair_pattern
117 value: (identifier) @name @item)
118 (pair_pattern
119 value: (assignment_pattern
120 left: (identifier) @name @item))
121 (rest_pattern
122 (identifier) @name @item)
123 ]))))
124
125(class_declaration
126 "class" @context
127 name: (_) @name) @item
128
129; Method definitions in classes (not in object literals)
130(class_body
131 (method_definition
132 [
133 "get"
134 "set"
135 "async"
136 "*"
137 "readonly"
138 "static"
139 (override_modifier)
140 (accessibility_modifier)
141 ]* @context
142 name: (_) @name
143 parameters: (formal_parameters
144 "(" @context
145 ")" @context)) @item)
146
147; Object literal methods
148(variable_declarator
149 value: (object
150 (method_definition
151 [
152 "get"
153 "set"
154 "async"
155 "*"
156 ]* @context
157 name: (_) @name
158 parameters: (formal_parameters
159 "(" @context
160 ")" @context)) @item))
161
162(public_field_definition
163 [
164 "declare"
165 "readonly"
166 "abstract"
167 "static"
168 (accessibility_modifier)
169 ]* @context
170 name: (_) @name) @item
171
172; Add support for (node:test, bun:test and Jest) runnable
173((call_expression
174 function: [
175 (identifier) @_name
176 (member_expression
177 object: [
178 (identifier) @_name
179 (member_expression
180 object: (identifier) @_name)
181 ])
182 ] @context
183 (#any-of? @_name "it" "test" "describe" "context" "suite")
184 arguments: (arguments
185 .
186 [
187 (string
188 (string_fragment) @name)
189 (identifier) @name
190 ]))) @item
191
192; Add support for parameterized tests
193((call_expression
194 function: (call_expression
195 function: (member_expression
196 object: [
197 (identifier) @_name
198 (member_expression
199 object: (identifier) @_name)
200 ]
201 property: (property_identifier) @_property)
202 (#any-of? @_name "it" "test" "describe" "context" "suite")
203 (#eq? @_property "each"))
204 arguments: (arguments
205 .
206 [
207 (string
208 (string_fragment) @name)
209 (identifier) @name
210 ]))) @item
211
212; Object properties
213(pair
214 key: [
215 (property_identifier) @name
216 (string
217 (string_fragment) @name)
218 (number) @name
219 (computed_property_name) @name
220 ]) @item
221
222; Nested variables in function bodies
223(statement_block
224 (lexical_declaration
225 [
226 "let"
227 "const"
228 ] @context
229 (variable_declarator
230 name: (identifier) @name) @item))
231
232; Nested array destructuring in functions
233(statement_block
234 (lexical_declaration
235 [
236 "let"
237 "const"
238 ] @context
239 (variable_declarator
240 name: (array_pattern
241 [
242 (identifier) @name @item
243 (assignment_pattern
244 left: (identifier) @name @item)
245 (rest_pattern
246 (identifier) @name @item)
247 ]))))
248
249; Nested object destructuring in functions
250(statement_block
251 (lexical_declaration
252 [
253 "let"
254 "const"
255 ] @context
256 (variable_declarator
257 name: (object_pattern
258 [
259 (shorthand_property_identifier_pattern) @name @item
260 (pair_pattern
261 value: (identifier) @name @item)
262 (pair_pattern
263 value: (assignment_pattern
264 left: (identifier) @name @item))
265 (rest_pattern
266 (identifier) @name @item)
267 ]))))
268
269(comment) @annotation