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      [
 92        "&"
 93        "&&"
 94      ] @context
 95      (function_declarator
 96        declarator: (_) @name
 97        parameters: (parameter_list
 98          "(" @context
 99          ")" @context)))
100  ]
101  (type_qualifier)? @context) @item
102
103(declaration
104  [
105    (storage_class_specifier)
106    (type_qualifier)
107  ]* @context
108  type: (_)? @context
109  declarator: [
110    (field_identifier) @name
111    (pointer_declarator
112      "*" @context
113      declarator: (field_identifier) @name)
114    (function_declarator
115      declarator: (_) @name
116      parameters: (parameter_list
117        "(" @context
118        ")" @context))
119    (pointer_declarator
120      "*" @context
121      declarator: (function_declarator
122        declarator: (_) @name
123        parameters: (parameter_list
124          "(" @context
125          ")" @context)))
126    (pointer_declarator
127      "*" @context
128      declarator: (pointer_declarator
129        "*" @context
130        declarator: (function_declarator
131          declarator: (_) @name
132          parameters: (parameter_list
133            "(" @context
134            ")" @context))))
135    (reference_declarator
136      [
137        "&"
138        "&&"
139      ] @context
140      (function_declarator
141        declarator: (_) @name
142        parameters: (parameter_list
143          "(" @context
144          ")" @context)))
145  ]
146  (type_qualifier)? @context) @item
147
148(field_declaration
149  [
150    (storage_class_specifier)
151    (type_qualifier)
152  ]* @context
153  type: (_) @context
154  declarator: [
155    (field_identifier) @name
156    (pointer_declarator
157      "*" @context
158      declarator: (field_identifier) @name)
159    (function_declarator
160      declarator: (_) @name
161      parameters: (parameter_list
162        "(" @context
163        ")" @context))
164    (pointer_declarator
165      "*" @context
166      declarator: (function_declarator
167        declarator: (_) @name
168        parameters: (parameter_list
169          "(" @context
170          ")" @context)))
171    (pointer_declarator
172      "*" @context
173      declarator: (pointer_declarator
174        "*" @context
175        declarator: (function_declarator
176          declarator: (_) @name
177          parameters: (parameter_list
178            "(" @context
179            ")" @context))))
180    (reference_declarator
181      [
182        "&"
183        "&&"
184      ] @context
185      (function_declarator
186        declarator: (_) @name
187        parameters: (parameter_list
188          "(" @context
189          ")" @context)))
190    ; Fields declarations may define multiple fields, and so @item is on the
191    ; declarator so they each get distinct ranges.
192  ] @item
193  (type_qualifier)? @context)
194
195(comment) @annotation