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