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