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 (including nested objects)
148(object
149 (method_definition
150 [
151 "get"
152 "set"
153 "async"
154 "*"
155 ]* @context
156 name: (_) @name
157 parameters: (formal_parameters
158 "(" @context
159 ")" @context)) @item)
160
161(public_field_definition
162 [
163 "declare"
164 "readonly"
165 "abstract"
166 "static"
167 (accessibility_modifier)
168 ]* @context
169 name: (_) @name) @item
170
171; Add support for (node:test, bun:test and Jest) runnable
172((call_expression
173 function: [
174 (identifier) @_name
175 (member_expression
176 object: [
177 (identifier) @_name
178 (member_expression
179 object: (identifier) @_name)
180 ])
181 ] @context
182 (#any-of? @_name "it" "test" "describe" "context" "suite")
183 arguments: (arguments
184 .
185 [
186 (string
187 (string_fragment) @name)
188 (identifier) @name
189 ]))) @item
190
191; Add support for parameterized tests
192((call_expression
193 function: (call_expression
194 function: (member_expression
195 object: [
196 (identifier) @_name
197 (member_expression
198 object: (identifier) @_name)
199 ]
200 property: (property_identifier) @_property)
201 (#any-of? @_name "it" "test" "describe" "context" "suite")
202 (#eq? @_property "each"))
203 arguments: (arguments
204 .
205 [
206 (string
207 (string_fragment) @name)
208 (identifier) @name
209 ]))) @item
210
211; Object properties
212(pair
213 key: [
214 (property_identifier) @name
215 (string
216 (string_fragment) @name)
217 (number) @name
218 (computed_property_name) @name
219 ]) @item
220
221; Nested variables in function bodies
222(statement_block
223 (lexical_declaration
224 [
225 "let"
226 "const"
227 ] @context
228 (variable_declarator
229 name: (identifier) @name) @item))
230
231; Nested array destructuring in functions
232(statement_block
233 (lexical_declaration
234 [
235 "let"
236 "const"
237 ] @context
238 (variable_declarator
239 name: (array_pattern
240 [
241 (identifier) @name @item
242 (assignment_pattern
243 left: (identifier) @name @item)
244 (rest_pattern
245 (identifier) @name @item)
246 ]))))
247
248; Nested object destructuring in functions
249(statement_block
250 (lexical_declaration
251 [
252 "let"
253 "const"
254 ] @context
255 (variable_declarator
256 name: (object_pattern
257 [
258 (shorthand_property_identifier_pattern) @name @item
259 (pair_pattern
260 value: (identifier) @name @item)
261 (pair_pattern
262 value: (assignment_pattern
263 left: (identifier) @name @item))
264 (rest_pattern
265 (identifier) @name @item)
266 ]))))
267
268(comment) @annotation