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