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