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