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 ["let" "const"] @context
34 (variable_declarator
35 name: (identifier) @name) @item)))
36
37; Exported array destructuring
38(program
39 (export_statement
40 (lexical_declaration
41 ["let" "const"] @context
42 (variable_declarator
43 name: (array_pattern
44 [
45 (identifier) @name @item
46 (assignment_pattern left: (identifier) @name @item)
47 (rest_pattern (identifier) @name @item)
48 ])))))
49
50; Exported object destructuring
51(program
52 (export_statement
53 (lexical_declaration
54 ["let" "const"] @context
55 (variable_declarator
56 name: (object_pattern
57 [(shorthand_property_identifier_pattern) @name @item
58 (pair_pattern
59 value: (identifier) @name @item)
60 (pair_pattern
61 value: (assignment_pattern left: (identifier) @name @item))
62 (rest_pattern (identifier) @name @item)])))))
63
64(program
65 (lexical_declaration
66 ["let" "const"] @context
67 (variable_declarator
68 name: (identifier) @name) @item))
69
70; Top-level array destructuring
71(program
72 (lexical_declaration
73 ["let" "const"] @context
74 (variable_declarator
75 name: (array_pattern
76 [
77 (identifier) @name @item
78 (assignment_pattern left: (identifier) @name @item)
79 (rest_pattern (identifier) @name @item)
80 ]))))
81
82; Top-level object destructuring
83(program
84 (lexical_declaration
85 ["let" "const"] @context
86 (variable_declarator
87 name: (object_pattern
88 [(shorthand_property_identifier_pattern) @name @item
89 (pair_pattern
90 value: (identifier) @name @item)
91 (pair_pattern
92 value: (assignment_pattern left: (identifier) @name @item))
93 (rest_pattern (identifier) @name @item)]))))
94
95(class_declaration
96 "class" @context
97 name: (_) @name) @item
98
99; Method definitions in classes (not in object literals)
100(class_body
101 (method_definition
102 [
103 "get"
104 "set"
105 "async"
106 "*"
107 "readonly"
108 "static"
109 (override_modifier)
110 (accessibility_modifier)
111 ]* @context
112 name: (_) @name
113 parameters: (formal_parameters
114 "(" @context
115 ")" @context)) @item)
116
117; Object literal methods
118(variable_declarator
119 value: (object
120 (method_definition
121 [
122 "get"
123 "set"
124 "async"
125 "*"
126 ]* @context
127 name: (_) @name
128 parameters: (formal_parameters
129 "(" @context
130 ")" @context)) @item))
131
132(public_field_definition
133 [
134 "declare"
135 "readonly"
136 "abstract"
137 "static"
138 (accessibility_modifier)
139 ]* @context
140 name: (_) @name) @item
141
142; Add support for (node:test, bun:test and Jest) runnable
143(
144 (call_expression
145 function: [
146 (identifier) @_name
147 (member_expression
148 object: [
149 (identifier) @_name
150 (member_expression object: (identifier) @_name)
151 ]
152 )
153 ] @context
154 (#any-of? @_name "it" "test" "describe" "context" "suite")
155 arguments: (
156 arguments . [
157 (string (string_fragment) @name)
158 (identifier) @name
159 ]
160 )
161 )
162) @item
163
164; Add support for parameterized tests
165(
166 (call_expression
167 function: (call_expression
168 function: (member_expression
169 object: [(identifier) @_name (member_expression object: (identifier) @_name)]
170 property: (property_identifier) @_property
171 )
172 (#any-of? @_name "it" "test" "describe" "context" "suite")
173 (#eq? @_property "each")
174 )
175 arguments: (
176 arguments . [
177 (string (string_fragment) @name)
178 (identifier) @name
179 ]
180 )
181 )
182) @item
183
184; Object properties
185(pair
186 key: [
187 (property_identifier) @name
188 (string (string_fragment) @name)
189 (number) @name
190 (computed_property_name) @name
191 ]) @item
192
193; Nested variables in function bodies
194(statement_block
195 (lexical_declaration
196 ["let" "const"] @context
197 (variable_declarator
198 name: (identifier) @name) @item))
199
200; Nested array destructuring in functions
201(statement_block
202 (lexical_declaration
203 ["let" "const"] @context
204 (variable_declarator
205 name: (array_pattern
206 [
207 (identifier) @name @item
208 (assignment_pattern left: (identifier) @name @item)
209 (rest_pattern (identifier) @name @item)
210 ]))))
211
212; Nested object destructuring in functions
213(statement_block
214 (lexical_declaration
215 ["let" "const"] @context
216 (variable_declarator
217 name: (object_pattern
218 [(shorthand_property_identifier_pattern) @name @item
219 (pair_pattern value: (identifier) @name @item)
220 (pair_pattern value: (assignment_pattern left: (identifier) @name @item))
221 (rest_pattern (identifier) @name @item)]))))
222
223(comment) @annotation