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