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