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