outline.scm

  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