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