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