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