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