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