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 ; Multiple names may be exported - @item is on the declarator to keep
35 ; ranges distinct.
36 (variable_declarator
37 name: (_) @name) @item)))
38
39(program
40 (lexical_declaration
41 ["let" "const"] @context
42 ; Multiple names may be defined - @item is on the declarator to keep
43 ; ranges distinct.
44 (variable_declarator
45 name: (_) @name) @item))
46
47(class_declaration
48 "class" @context
49 name: (_) @name) @item
50
51(method_definition
52 [
53 "get"
54 "set"
55 "async"
56 "*"
57 "readonly"
58 "static"
59 (override_modifier)
60 (accessibility_modifier)
61 ]* @context
62 name: (_) @name
63 parameters: (formal_parameters
64 "(" @context
65 ")" @context)) @item
66
67(public_field_definition
68 [
69 "declare"
70 "readonly"
71 "abstract"
72 "static"
73 (accessibility_modifier)
74 ]* @context
75 name: (_) @name) @item
76
77; Add support for (node:test, bun:test and Jest) runnable
78(
79 (call_expression
80 function: [
81 (identifier) @_name
82 (member_expression
83 object: [
84 (identifier) @_name
85 (member_expression object: (identifier) @_name)
86 ]
87 )
88 ] @context
89 (#any-of? @_name "it" "test" "describe" "context" "suite")
90 arguments: (
91 arguments . [
92 (string (string_fragment) @name)
93 (identifier) @name
94 ]
95 )
96 )
97) @item
98
99; Add support for parameterized tests
100(
101 (call_expression
102 function: (call_expression
103 function: (member_expression
104 object: [(identifier) @_name (member_expression object: (identifier) @_name)]
105 property: (property_identifier) @_property
106 )
107 (#any-of? @_name "it" "test" "describe" "context" "suite")
108 (#eq? @_property "each")
109 )
110 arguments: (
111 arguments . [
112 (string (string_fragment) @name)
113 (identifier) @name
114 ]
115 )
116 )
117) @item
118
119; Arrow functions in variable declarations (anywhere in the tree, including nested in functions)
120(lexical_declaration
121 ["let" "const"] @context
122 (variable_declarator
123 name: (_) @name
124 value: (arrow_function)) @item)
125
126; Async arrow functions in variable declarations
127(lexical_declaration
128 ["let" "const"] @context
129 (variable_declarator
130 name: (_) @name
131 value: (arrow_function
132 "async" @context)) @item)
133
134; Named function expressions in variable declarations
135(lexical_declaration
136 ["let" "const"] @context
137 (variable_declarator
138 name: (_) @name
139 value: (function_expression)) @item)
140
141(comment) @annotation