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: (init_declarator
 55      ; The declaration may define multiple variables, using @item on the
 56      ; declarator so that they get distinct ranges.
 57      declarator: (_) @item @name))
 58
 59(function_definition
 60    (type_qualifier)? @context
 61    type: (_)? @context
 62    declarator: [
 63        (function_declarator
 64            declarator: (_) @name
 65            parameters: (parameter_list
 66                "(" @context
 67                ")" @context))
 68        (pointer_declarator
 69            "*" @context
 70            declarator: (function_declarator
 71                declarator: (_) @name
 72                parameters: (parameter_list
 73                    "(" @context
 74                    ")" @context)))
 75        (pointer_declarator
 76            "*" @context
 77            declarator: (pointer_declarator
 78                "*" @context
 79                declarator: (function_declarator
 80                    declarator: (_) @name
 81                    parameters: (parameter_list
 82                        "(" @context
 83                        ")" @context))))
 84        (reference_declarator
 85            ["&" "&&"] @context
 86            (function_declarator
 87                declarator: (_) @name
 88                parameters: (parameter_list
 89                    "(" @context
 90                    ")" @context)))
 91    ]
 92    (type_qualifier)? @context) @item
 93
 94(declaration
 95    (type_qualifier)? @context
 96    type: (_)? @context
 97    declarator: [
 98        (field_identifier) @name
 99        (pointer_declarator
100            "*" @context
101            declarator: (field_identifier) @name)
102        (function_declarator
103            declarator: (_) @name
104            parameters: (parameter_list
105                "(" @context
106                ")" @context))
107        (pointer_declarator
108            "*" @context
109            declarator: (function_declarator
110                declarator: (_) @name
111                parameters: (parameter_list
112                    "(" @context
113                    ")" @context)))
114        (pointer_declarator
115            "*" @context
116            declarator: (pointer_declarator
117                "*" @context
118                declarator: (function_declarator
119                    declarator: (_) @name
120                    parameters: (parameter_list
121                        "(" @context
122                        ")" @context))))
123        (reference_declarator
124            ["&" "&&"] @context
125            (function_declarator
126                declarator: (_) @name
127                parameters: (parameter_list
128                    "(" @context
129                    ")" @context)))
130    ]
131    (type_qualifier)? @context) @item
132
133(field_declaration
134    [
135        (storage_class_specifier)
136        (type_qualifier)
137    ]* @context
138    type: (_) @context
139    declarator: [
140        (field_identifier) @name
141        (pointer_declarator
142            "*" @context
143            declarator: (field_identifier) @name)
144        (function_declarator
145            declarator: (_) @name
146            parameters: (parameter_list
147                "(" @context
148                ")" @context))
149        (pointer_declarator
150            "*" @context
151            declarator: (function_declarator
152                declarator: (_) @name
153                parameters: (parameter_list
154                    "(" @context
155                    ")" @context)))
156        (pointer_declarator
157            "*" @context
158            declarator: (pointer_declarator
159                "*" @context
160                declarator: (function_declarator
161                    declarator: (_) @name
162                    parameters: (parameter_list
163                        "(" @context
164                        ")" @context))))
165        (reference_declarator
166            ["&" "&&"] @context
167            (function_declarator
168                declarator: (_) @name
169                parameters: (parameter_list
170                    "(" @context
171                    ")" @context)))
172    ; Fields declarations may define multiple fields, and so @item is on the
173    ; declarator so they each get distinct ranges.
174    ] @item
175    (type_qualifier)? @context)
176
177(comment) @annotation