outline.scm

  1(preproc_def
  2    "#define" @context
  3    name: (_) @name) @item
  4
  5(preproc_function_def
  6    "#define" @context
  7    name: (_) @name
  8    parameters: (preproc_params
  9        "(" @context
 10        ")" @context)) @item
 11
 12(namespace_definition
 13    "inline"? @context
 14    "namespace" @context
 15    name: (_) @name) @item
 16
 17(type_definition
 18    "typedef" @context
 19    declarator: (_) @name) @item
 20
 21(struct_specifier
 22    "struct" @context
 23    name: (_) @name) @item
 24
 25(class_specifier
 26    "class" @context
 27    name: (_) @name) @item
 28
 29(enum_specifier
 30    "enum" @context
 31    [
 32        "class"
 33        "struct"
 34    ]? @context
 35    name: (_) @name) @item
 36
 37(union_specifier
 38    "union" @context
 39    name: (_) @name) @item
 40
 41(enumerator
 42    name: (_) @name) @item
 43
 44(concept_definition
 45    "concept" @context
 46    name: (_) @name) @item
 47
 48(declaration
 49    [
 50        (storage_class_specifier)
 51        (type_qualifier)
 52    ]* @context
 53    type: (_) @context
 54    declarator: [
 55        ; The declaration may define multiple variables, using @item on the
 56        ; declarator so that they get distinct ranges.
 57        (init_declarator
 58            declarator: (_) @item @name)
 59        (identifier) @item @name
 60    ] @item)
 61
 62(function_definition
 63    [
 64        (storage_class_specifier)
 65        (type_qualifier)
 66    ]* @context
 67    type: (_)? @context
 68    declarator: [
 69        (function_declarator
 70            declarator: (_) @name
 71            parameters: (parameter_list
 72                "(" @context
 73                ")" @context))
 74        (pointer_declarator
 75            "*" @context
 76            declarator: (function_declarator
 77                declarator: (_) @name
 78                parameters: (parameter_list
 79                    "(" @context
 80                    ")" @context)))
 81        (pointer_declarator
 82            "*" @context
 83            declarator: (pointer_declarator
 84                "*" @context
 85                declarator: (function_declarator
 86                    declarator: (_) @name
 87                    parameters: (parameter_list
 88                        "(" @context
 89                        ")" @context))))
 90        (reference_declarator
 91            ["&" "&&"] @context
 92            (function_declarator
 93                declarator: (_) @name
 94                parameters: (parameter_list
 95                    "(" @context
 96                    ")" @context)))
 97    ]
 98    (type_qualifier)? @context) @item
 99
100(declaration
101    [
102        (storage_class_specifier)
103        (type_qualifier)
104    ]* @context
105    type: (_)? @context
106    declarator: [
107        (field_identifier) @name
108        (pointer_declarator
109            "*" @context
110            declarator: (field_identifier) @name)
111        (function_declarator
112            declarator: (_) @name
113            parameters: (parameter_list
114                "(" @context
115                ")" @context))
116        (pointer_declarator
117            "*" @context
118            declarator: (function_declarator
119                declarator: (_) @name
120                parameters: (parameter_list
121                    "(" @context
122                    ")" @context)))
123        (pointer_declarator
124            "*" @context
125            declarator: (pointer_declarator
126                "*" @context
127                declarator: (function_declarator
128                    declarator: (_) @name
129                    parameters: (parameter_list
130                        "(" @context
131                        ")" @context))))
132        (reference_declarator
133            ["&" "&&"] @context
134            (function_declarator
135                declarator: (_) @name
136                parameters: (parameter_list
137                    "(" @context
138                    ")" @context)))
139    ]
140    (type_qualifier)? @context) @item
141
142(field_declaration
143    [
144        (storage_class_specifier)
145        (type_qualifier)
146    ]* @context
147    type: (_) @context
148    declarator: [
149        (field_identifier) @name
150        (pointer_declarator
151            "*" @context
152            declarator: (field_identifier) @name)
153        (function_declarator
154            declarator: (_) @name
155            parameters: (parameter_list
156                "(" @context
157                ")" @context))
158        (pointer_declarator
159            "*" @context
160            declarator: (function_declarator
161                declarator: (_) @name
162                parameters: (parameter_list
163                    "(" @context
164                    ")" @context)))
165        (pointer_declarator
166            "*" @context
167            declarator: (pointer_declarator
168                "*" @context
169                declarator: (function_declarator
170                    declarator: (_) @name
171                    parameters: (parameter_list
172                        "(" @context
173                        ")" @context))))
174        (reference_declarator
175            ["&" "&&"] @context
176            (function_declarator
177                declarator: (_) @name
178                parameters: (parameter_list
179                    "(" @context
180                    ")" @context)))
181    ; Fields declarations may define multiple fields, and so @item is on the
182    ; declarator so they each get distinct ranges.
183    ] @item
184    (type_qualifier)? @context)
185
186(comment) @annotation