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