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