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(type_definition
13 "typedef" @context
14 declarator: (_) @name) @item
15
16(struct_specifier
17 "struct" @context
18 name: (_) @name) @item
19
20(class_specifier
21 "class" @context
22 name: (_) @name) @item
23
24(enum_specifier
25 "enum" @context
26 name: (_) @name) @item
27
28(enumerator
29 name: (_) @name) @item
30
31(concept_definition
32 "concept" @context
33 name: (_) @name) @item
34
35(declaration
36 (storage_class_specifier) @context
37 (type_qualifier)? @context
38 type: (_) @context
39 declarator: (init_declarator
40 declarator: (_) @name)) @item
41
42(function_definition
43 (type_qualifier)? @context
44 type: (_)? @context
45 declarator: [
46 (function_declarator
47 declarator: (_) @name
48 parameters: (parameter_list
49 "(" @context
50 ")" @context))
51 (pointer_declarator
52 "*" @context
53 declarator: (function_declarator
54 declarator: (_) @name
55 parameters: (parameter_list
56 "(" @context
57 ")" @context)))
58 (pointer_declarator
59 "*" @context
60 declarator: (pointer_declarator
61 "*" @context
62 declarator: (function_declarator
63 declarator: (_) @name
64 parameters: (parameter_list
65 "(" @context
66 ")" @context))))
67 (reference_declarator
68 ["&" "&&"] @context
69 (function_declarator
70 declarator: (_) @name
71 parameters: (parameter_list
72 "(" @context
73 ")" @context)))
74 ]
75 (type_qualifier)? @context) @item
76
77(declaration
78 (type_qualifier)? @context
79 type: (_)? @context
80 declarator: [
81 (field_identifier) @name
82 (pointer_declarator
83 "*" @context
84 declarator: (field_identifier) @name)
85 (function_declarator
86 declarator: (_) @name
87 parameters: (parameter_list
88 "(" @context
89 ")" @context))
90 (pointer_declarator
91 "*" @context
92 declarator: (function_declarator
93 declarator: (_) @name
94 parameters: (parameter_list
95 "(" @context
96 ")" @context)))
97 (pointer_declarator
98 "*" @context
99 declarator: (pointer_declarator
100 "*" @context
101 declarator: (function_declarator
102 declarator: (_) @name
103 parameters: (parameter_list
104 "(" @context
105 ")" @context))))
106 (reference_declarator
107 ["&" "&&"] @context
108 (function_declarator
109 declarator: (_) @name
110 parameters: (parameter_list
111 "(" @context
112 ")" @context)))
113 ]
114 (type_qualifier)? @context) @item
115
116(field_declaration
117 (type_qualifier)? @context
118 type: (_) @context
119 declarator: [
120 (field_identifier) @name
121 (pointer_declarator
122 "*" @context
123 declarator: (field_identifier) @name)
124 (function_declarator
125 declarator: (_) @name
126 parameters: (parameter_list
127 "(" @context
128 ")" @context))
129 (pointer_declarator
130 "*" @context
131 declarator: (function_declarator
132 declarator: (_) @name
133 parameters: (parameter_list
134 "(" @context
135 ")" @context)))
136 (pointer_declarator
137 "*" @context
138 declarator: (pointer_declarator
139 "*" @context
140 declarator: (function_declarator
141 declarator: (_) @name
142 parameters: (parameter_list
143 "(" @context
144 ")" @context))))
145 (reference_declarator
146 ["&" "&&"] @context
147 (function_declarator
148 declarator: (_) @name
149 parameters: (parameter_list
150 "(" @context
151 ")" @context)))
152 ; Fields declarations may define multiple fields, and so @item is on the
153 ; declarator so they each get distinct ranges.
154 ] @item
155 (type_qualifier)? @context)
156
157(comment) @annotation