Skip to main content

syn/gen/
visit.rs

1// SPDX-License-Identifier: Apache-2.0 OR MIT
2
3// This file is @generated by syn-internal-codegen.
4// It is not intended for manual editing.
5
6#![allow(unused_variables)]
7#![allow(clippy::needless_pass_by_ref_mut)]
8#[cfg(any(feature = "full", feature = "derive"))]
9use crate::punctuated::Punctuated;
10#[cfg(feature = "full")]
11macro_rules! full {
12    ($e:expr) => {
13        $e
14    };
15}
16#[cfg(all(feature = "derive", not(feature = "full")))]
17macro_rules! full {
18    ($e:expr) => {
19        unreachable!()
20    };
21}
22macro_rules! skip {
23    ($($tt:tt)*) => {};
24}
25/// Syntax tree traversal to walk a shared borrow of a syntax tree.
26///
27/// See the [module documentation] for details.
28///
29/// [module documentation]: self
30pub trait Visit<'ast> {
31    #[cfg(any(feature = "derive", feature = "full"))]
32    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
33    fn visit_abi(&mut self, i: &'ast crate::Abi) {
34        visit_abi(self, i);
35    }
36    #[cfg(any(feature = "derive", feature = "full"))]
37    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
38    fn visit_angle_bracketed_generic_arguments(
39        &mut self,
40        i: &'ast crate::AngleBracketedGenericArguments,
41    ) {
42        visit_angle_bracketed_generic_arguments(self, i);
43    }
44    #[cfg(feature = "full")]
45    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
46    fn visit_arm(&mut self, i: &'ast crate::Arm) {
47        visit_arm(self, i);
48    }
49    #[cfg(any(feature = "derive", feature = "full"))]
50    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
51    fn visit_assoc_const(&mut self, i: &'ast crate::AssocConst) {
52        visit_assoc_const(self, i);
53    }
54    #[cfg(any(feature = "derive", feature = "full"))]
55    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
56    fn visit_assoc_type(&mut self, i: &'ast crate::AssocType) {
57        visit_assoc_type(self, i);
58    }
59    #[cfg(any(feature = "derive", feature = "full"))]
60    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
61    fn visit_attr_style(&mut self, i: &'ast crate::AttrStyle) {
62        visit_attr_style(self, i);
63    }
64    #[cfg(any(feature = "derive", feature = "full"))]
65    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
66    fn visit_attribute(&mut self, i: &'ast crate::Attribute) {
67        visit_attribute(self, i);
68    }
69    #[cfg(any(feature = "derive", feature = "full"))]
70    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
71    fn visit_bare_fn_arg(&mut self, i: &'ast crate::BareFnArg) {
72        visit_bare_fn_arg(self, i);
73    }
74    #[cfg(any(feature = "derive", feature = "full"))]
75    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
76    fn visit_bare_variadic(&mut self, i: &'ast crate::BareVariadic) {
77        visit_bare_variadic(self, i);
78    }
79    #[cfg(any(feature = "derive", feature = "full"))]
80    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
81    fn visit_bin_op(&mut self, i: &'ast crate::BinOp) {
82        visit_bin_op(self, i);
83    }
84    #[cfg(feature = "full")]
85    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
86    fn visit_block(&mut self, i: &'ast crate::Block) {
87        visit_block(self, i);
88    }
89    #[cfg(any(feature = "derive", feature = "full"))]
90    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
91    fn visit_bound_lifetimes(&mut self, i: &'ast crate::BoundLifetimes) {
92        visit_bound_lifetimes(self, i);
93    }
94    #[cfg(feature = "full")]
95    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
96    fn visit_captured_param(&mut self, i: &'ast crate::CapturedParam) {
97        visit_captured_param(self, i);
98    }
99    #[cfg(any(feature = "derive", feature = "full"))]
100    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
101    fn visit_const_param(&mut self, i: &'ast crate::ConstParam) {
102        visit_const_param(self, i);
103    }
104    #[cfg(any(feature = "derive", feature = "full"))]
105    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
106    fn visit_constraint(&mut self, i: &'ast crate::Constraint) {
107        visit_constraint(self, i);
108    }
109    #[cfg(feature = "derive")]
110    #[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
111    fn visit_data(&mut self, i: &'ast crate::Data) {
112        visit_data(self, i);
113    }
114    #[cfg(feature = "derive")]
115    #[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
116    fn visit_data_enum(&mut self, i: &'ast crate::DataEnum) {
117        visit_data_enum(self, i);
118    }
119    #[cfg(feature = "derive")]
120    #[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
121    fn visit_data_struct(&mut self, i: &'ast crate::DataStruct) {
122        visit_data_struct(self, i);
123    }
124    #[cfg(feature = "derive")]
125    #[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
126    fn visit_data_union(&mut self, i: &'ast crate::DataUnion) {
127        visit_data_union(self, i);
128    }
129    #[cfg(feature = "derive")]
130    #[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
131    fn visit_derive_input(&mut self, i: &'ast crate::DeriveInput) {
132        visit_derive_input(self, i);
133    }
134    #[cfg(any(feature = "derive", feature = "full"))]
135    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
136    fn visit_expr(&mut self, i: &'ast crate::Expr) {
137        visit_expr(self, i);
138    }
139    #[cfg(feature = "full")]
140    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
141    fn visit_expr_array(&mut self, i: &'ast crate::ExprArray) {
142        visit_expr_array(self, i);
143    }
144    #[cfg(feature = "full")]
145    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
146    fn visit_expr_assign(&mut self, i: &'ast crate::ExprAssign) {
147        visit_expr_assign(self, i);
148    }
149    #[cfg(feature = "full")]
150    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
151    fn visit_expr_async(&mut self, i: &'ast crate::ExprAsync) {
152        visit_expr_async(self, i);
153    }
154    #[cfg(feature = "full")]
155    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
156    fn visit_expr_await(&mut self, i: &'ast crate::ExprAwait) {
157        visit_expr_await(self, i);
158    }
159    #[cfg(any(feature = "derive", feature = "full"))]
160    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
161    fn visit_expr_binary(&mut self, i: &'ast crate::ExprBinary) {
162        visit_expr_binary(self, i);
163    }
164    #[cfg(feature = "full")]
165    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
166    fn visit_expr_block(&mut self, i: &'ast crate::ExprBlock) {
167        visit_expr_block(self, i);
168    }
169    #[cfg(feature = "full")]
170    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
171    fn visit_expr_break(&mut self, i: &'ast crate::ExprBreak) {
172        visit_expr_break(self, i);
173    }
174    #[cfg(any(feature = "derive", feature = "full"))]
175    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
176    fn visit_expr_call(&mut self, i: &'ast crate::ExprCall) {
177        visit_expr_call(self, i);
178    }
179    #[cfg(any(feature = "derive", feature = "full"))]
180    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
181    fn visit_expr_cast(&mut self, i: &'ast crate::ExprCast) {
182        visit_expr_cast(self, i);
183    }
184    #[cfg(feature = "full")]
185    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
186    fn visit_expr_closure(&mut self, i: &'ast crate::ExprClosure) {
187        visit_expr_closure(self, i);
188    }
189    #[cfg(feature = "full")]
190    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
191    fn visit_expr_const(&mut self, i: &'ast crate::ExprConst) {
192        visit_expr_const(self, i);
193    }
194    #[cfg(feature = "full")]
195    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
196    fn visit_expr_continue(&mut self, i: &'ast crate::ExprContinue) {
197        visit_expr_continue(self, i);
198    }
199    #[cfg(any(feature = "derive", feature = "full"))]
200    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
201    fn visit_expr_field(&mut self, i: &'ast crate::ExprField) {
202        visit_expr_field(self, i);
203    }
204    #[cfg(feature = "full")]
205    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
206    fn visit_expr_for_loop(&mut self, i: &'ast crate::ExprForLoop) {
207        visit_expr_for_loop(self, i);
208    }
209    #[cfg(any(feature = "derive", feature = "full"))]
210    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
211    fn visit_expr_group(&mut self, i: &'ast crate::ExprGroup) {
212        visit_expr_group(self, i);
213    }
214    #[cfg(feature = "full")]
215    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
216    fn visit_expr_if(&mut self, i: &'ast crate::ExprIf) {
217        visit_expr_if(self, i);
218    }
219    #[cfg(any(feature = "derive", feature = "full"))]
220    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
221    fn visit_expr_index(&mut self, i: &'ast crate::ExprIndex) {
222        visit_expr_index(self, i);
223    }
224    #[cfg(feature = "full")]
225    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
226    fn visit_expr_infer(&mut self, i: &'ast crate::ExprInfer) {
227        visit_expr_infer(self, i);
228    }
229    #[cfg(feature = "full")]
230    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
231    fn visit_expr_let(&mut self, i: &'ast crate::ExprLet) {
232        visit_expr_let(self, i);
233    }
234    #[cfg(any(feature = "derive", feature = "full"))]
235    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
236    fn visit_expr_lit(&mut self, i: &'ast crate::ExprLit) {
237        visit_expr_lit(self, i);
238    }
239    #[cfg(feature = "full")]
240    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
241    fn visit_expr_loop(&mut self, i: &'ast crate::ExprLoop) {
242        visit_expr_loop(self, i);
243    }
244    #[cfg(any(feature = "derive", feature = "full"))]
245    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
246    fn visit_expr_macro(&mut self, i: &'ast crate::ExprMacro) {
247        visit_expr_macro(self, i);
248    }
249    #[cfg(feature = "full")]
250    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
251    fn visit_expr_match(&mut self, i: &'ast crate::ExprMatch) {
252        visit_expr_match(self, i);
253    }
254    #[cfg(any(feature = "derive", feature = "full"))]
255    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
256    fn visit_expr_method_call(&mut self, i: &'ast crate::ExprMethodCall) {
257        visit_expr_method_call(self, i);
258    }
259    #[cfg(any(feature = "derive", feature = "full"))]
260    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
261    fn visit_expr_paren(&mut self, i: &'ast crate::ExprParen) {
262        visit_expr_paren(self, i);
263    }
264    #[cfg(any(feature = "derive", feature = "full"))]
265    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
266    fn visit_expr_path(&mut self, i: &'ast crate::ExprPath) {
267        visit_expr_path(self, i);
268    }
269    #[cfg(feature = "full")]
270    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
271    fn visit_expr_range(&mut self, i: &'ast crate::ExprRange) {
272        visit_expr_range(self, i);
273    }
274    #[cfg(feature = "full")]
275    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
276    fn visit_expr_raw_addr(&mut self, i: &'ast crate::ExprRawAddr) {
277        visit_expr_raw_addr(self, i);
278    }
279    #[cfg(any(feature = "derive", feature = "full"))]
280    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
281    fn visit_expr_reference(&mut self, i: &'ast crate::ExprReference) {
282        visit_expr_reference(self, i);
283    }
284    #[cfg(feature = "full")]
285    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
286    fn visit_expr_repeat(&mut self, i: &'ast crate::ExprRepeat) {
287        visit_expr_repeat(self, i);
288    }
289    #[cfg(feature = "full")]
290    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
291    fn visit_expr_return(&mut self, i: &'ast crate::ExprReturn) {
292        visit_expr_return(self, i);
293    }
294    #[cfg(any(feature = "derive", feature = "full"))]
295    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
296    fn visit_expr_struct(&mut self, i: &'ast crate::ExprStruct) {
297        visit_expr_struct(self, i);
298    }
299    #[cfg(feature = "full")]
300    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
301    fn visit_expr_try(&mut self, i: &'ast crate::ExprTry) {
302        visit_expr_try(self, i);
303    }
304    #[cfg(feature = "full")]
305    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
306    fn visit_expr_try_block(&mut self, i: &'ast crate::ExprTryBlock) {
307        visit_expr_try_block(self, i);
308    }
309    #[cfg(any(feature = "derive", feature = "full"))]
310    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
311    fn visit_expr_tuple(&mut self, i: &'ast crate::ExprTuple) {
312        visit_expr_tuple(self, i);
313    }
314    #[cfg(any(feature = "derive", feature = "full"))]
315    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
316    fn visit_expr_unary(&mut self, i: &'ast crate::ExprUnary) {
317        visit_expr_unary(self, i);
318    }
319    #[cfg(feature = "full")]
320    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
321    fn visit_expr_unsafe(&mut self, i: &'ast crate::ExprUnsafe) {
322        visit_expr_unsafe(self, i);
323    }
324    #[cfg(feature = "full")]
325    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
326    fn visit_expr_while(&mut self, i: &'ast crate::ExprWhile) {
327        visit_expr_while(self, i);
328    }
329    #[cfg(feature = "full")]
330    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
331    fn visit_expr_yield(&mut self, i: &'ast crate::ExprYield) {
332        visit_expr_yield(self, i);
333    }
334    #[cfg(any(feature = "derive", feature = "full"))]
335    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
336    fn visit_field(&mut self, i: &'ast crate::Field) {
337        visit_field(self, i);
338    }
339    #[cfg(any(feature = "derive", feature = "full"))]
340    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
341    fn visit_field_mutability(&mut self, i: &'ast crate::FieldMutability) {
342        visit_field_mutability(self, i);
343    }
344    #[cfg(feature = "full")]
345    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
346    fn visit_field_pat(&mut self, i: &'ast crate::FieldPat) {
347        visit_field_pat(self, i);
348    }
349    #[cfg(any(feature = "derive", feature = "full"))]
350    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
351    fn visit_field_value(&mut self, i: &'ast crate::FieldValue) {
352        visit_field_value(self, i);
353    }
354    #[cfg(any(feature = "derive", feature = "full"))]
355    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
356    fn visit_fields(&mut self, i: &'ast crate::Fields) {
357        visit_fields(self, i);
358    }
359    #[cfg(any(feature = "derive", feature = "full"))]
360    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
361    fn visit_fields_named(&mut self, i: &'ast crate::FieldsNamed) {
362        visit_fields_named(self, i);
363    }
364    #[cfg(any(feature = "derive", feature = "full"))]
365    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
366    fn visit_fields_unnamed(&mut self, i: &'ast crate::FieldsUnnamed) {
367        visit_fields_unnamed(self, i);
368    }
369    #[cfg(feature = "full")]
370    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
371    fn visit_file(&mut self, i: &'ast crate::File) {
372        visit_file(self, i);
373    }
374    #[cfg(feature = "full")]
375    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
376    fn visit_fn_arg(&mut self, i: &'ast crate::FnArg) {
377        visit_fn_arg(self, i);
378    }
379    #[cfg(feature = "full")]
380    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
381    fn visit_foreign_item(&mut self, i: &'ast crate::ForeignItem) {
382        visit_foreign_item(self, i);
383    }
384    #[cfg(feature = "full")]
385    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
386    fn visit_foreign_item_fn(&mut self, i: &'ast crate::ForeignItemFn) {
387        visit_foreign_item_fn(self, i);
388    }
389    #[cfg(feature = "full")]
390    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
391    fn visit_foreign_item_macro(&mut self, i: &'ast crate::ForeignItemMacro) {
392        visit_foreign_item_macro(self, i);
393    }
394    #[cfg(feature = "full")]
395    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
396    fn visit_foreign_item_static(&mut self, i: &'ast crate::ForeignItemStatic) {
397        visit_foreign_item_static(self, i);
398    }
399    #[cfg(feature = "full")]
400    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
401    fn visit_foreign_item_type(&mut self, i: &'ast crate::ForeignItemType) {
402        visit_foreign_item_type(self, i);
403    }
404    #[cfg(any(feature = "derive", feature = "full"))]
405    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
406    fn visit_generic_argument(&mut self, i: &'ast crate::GenericArgument) {
407        visit_generic_argument(self, i);
408    }
409    #[cfg(any(feature = "derive", feature = "full"))]
410    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
411    fn visit_generic_param(&mut self, i: &'ast crate::GenericParam) {
412        visit_generic_param(self, i);
413    }
414    #[cfg(any(feature = "derive", feature = "full"))]
415    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
416    fn visit_generics(&mut self, i: &'ast crate::Generics) {
417        visit_generics(self, i);
418    }
419    fn visit_ident(&mut self, i: &'ast proc_macro2::Ident) {
420        visit_ident(self, i);
421    }
422    #[cfg(feature = "full")]
423    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
424    fn visit_impl_item(&mut self, i: &'ast crate::ImplItem) {
425        visit_impl_item(self, i);
426    }
427    #[cfg(feature = "full")]
428    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
429    fn visit_impl_item_const(&mut self, i: &'ast crate::ImplItemConst) {
430        visit_impl_item_const(self, i);
431    }
432    #[cfg(feature = "full")]
433    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
434    fn visit_impl_item_fn(&mut self, i: &'ast crate::ImplItemFn) {
435        visit_impl_item_fn(self, i);
436    }
437    #[cfg(feature = "full")]
438    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
439    fn visit_impl_item_macro(&mut self, i: &'ast crate::ImplItemMacro) {
440        visit_impl_item_macro(self, i);
441    }
442    #[cfg(feature = "full")]
443    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
444    fn visit_impl_item_type(&mut self, i: &'ast crate::ImplItemType) {
445        visit_impl_item_type(self, i);
446    }
447    #[cfg(feature = "full")]
448    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
449    fn visit_impl_restriction(&mut self, i: &'ast crate::ImplRestriction) {
450        visit_impl_restriction(self, i);
451    }
452    #[cfg(any(feature = "derive", feature = "full"))]
453    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
454    fn visit_index(&mut self, i: &'ast crate::Index) {
455        visit_index(self, i);
456    }
457    #[cfg(feature = "full")]
458    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
459    fn visit_item(&mut self, i: &'ast crate::Item) {
460        visit_item(self, i);
461    }
462    #[cfg(feature = "full")]
463    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
464    fn visit_item_const(&mut self, i: &'ast crate::ItemConst) {
465        visit_item_const(self, i);
466    }
467    #[cfg(feature = "full")]
468    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
469    fn visit_item_enum(&mut self, i: &'ast crate::ItemEnum) {
470        visit_item_enum(self, i);
471    }
472    #[cfg(feature = "full")]
473    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
474    fn visit_item_extern_crate(&mut self, i: &'ast crate::ItemExternCrate) {
475        visit_item_extern_crate(self, i);
476    }
477    #[cfg(feature = "full")]
478    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
479    fn visit_item_fn(&mut self, i: &'ast crate::ItemFn) {
480        visit_item_fn(self, i);
481    }
482    #[cfg(feature = "full")]
483    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
484    fn visit_item_foreign_mod(&mut self, i: &'ast crate::ItemForeignMod) {
485        visit_item_foreign_mod(self, i);
486    }
487    #[cfg(feature = "full")]
488    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
489    fn visit_item_impl(&mut self, i: &'ast crate::ItemImpl) {
490        visit_item_impl(self, i);
491    }
492    #[cfg(feature = "full")]
493    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
494    fn visit_item_macro(&mut self, i: &'ast crate::ItemMacro) {
495        visit_item_macro(self, i);
496    }
497    #[cfg(feature = "full")]
498    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
499    fn visit_item_mod(&mut self, i: &'ast crate::ItemMod) {
500        visit_item_mod(self, i);
501    }
502    #[cfg(feature = "full")]
503    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
504    fn visit_item_static(&mut self, i: &'ast crate::ItemStatic) {
505        visit_item_static(self, i);
506    }
507    #[cfg(feature = "full")]
508    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
509    fn visit_item_struct(&mut self, i: &'ast crate::ItemStruct) {
510        visit_item_struct(self, i);
511    }
512    #[cfg(feature = "full")]
513    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
514    fn visit_item_trait(&mut self, i: &'ast crate::ItemTrait) {
515        visit_item_trait(self, i);
516    }
517    #[cfg(feature = "full")]
518    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
519    fn visit_item_trait_alias(&mut self, i: &'ast crate::ItemTraitAlias) {
520        visit_item_trait_alias(self, i);
521    }
522    #[cfg(feature = "full")]
523    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
524    fn visit_item_type(&mut self, i: &'ast crate::ItemType) {
525        visit_item_type(self, i);
526    }
527    #[cfg(feature = "full")]
528    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
529    fn visit_item_union(&mut self, i: &'ast crate::ItemUnion) {
530        visit_item_union(self, i);
531    }
532    #[cfg(feature = "full")]
533    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
534    fn visit_item_use(&mut self, i: &'ast crate::ItemUse) {
535        visit_item_use(self, i);
536    }
537    #[cfg(feature = "full")]
538    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
539    fn visit_label(&mut self, i: &'ast crate::Label) {
540        visit_label(self, i);
541    }
542    fn visit_lifetime(&mut self, i: &'ast crate::Lifetime) {
543        visit_lifetime(self, i);
544    }
545    #[cfg(any(feature = "derive", feature = "full"))]
546    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
547    fn visit_lifetime_param(&mut self, i: &'ast crate::LifetimeParam) {
548        visit_lifetime_param(self, i);
549    }
550    fn visit_lit(&mut self, i: &'ast crate::Lit) {
551        visit_lit(self, i);
552    }
553    fn visit_lit_bool(&mut self, i: &'ast crate::LitBool) {
554        visit_lit_bool(self, i);
555    }
556    fn visit_lit_byte(&mut self, i: &'ast crate::LitByte) {
557        visit_lit_byte(self, i);
558    }
559    fn visit_lit_byte_str(&mut self, i: &'ast crate::LitByteStr) {
560        visit_lit_byte_str(self, i);
561    }
562    fn visit_lit_cstr(&mut self, i: &'ast crate::LitCStr) {
563        visit_lit_cstr(self, i);
564    }
565    fn visit_lit_char(&mut self, i: &'ast crate::LitChar) {
566        visit_lit_char(self, i);
567    }
568    fn visit_lit_float(&mut self, i: &'ast crate::LitFloat) {
569        visit_lit_float(self, i);
570    }
571    fn visit_lit_int(&mut self, i: &'ast crate::LitInt) {
572        visit_lit_int(self, i);
573    }
574    fn visit_lit_str(&mut self, i: &'ast crate::LitStr) {
575        visit_lit_str(self, i);
576    }
577    #[cfg(feature = "full")]
578    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
579    fn visit_local(&mut self, i: &'ast crate::Local) {
580        visit_local(self, i);
581    }
582    #[cfg(feature = "full")]
583    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
584    fn visit_local_init(&mut self, i: &'ast crate::LocalInit) {
585        visit_local_init(self, i);
586    }
587    #[cfg(any(feature = "derive", feature = "full"))]
588    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
589    fn visit_macro(&mut self, i: &'ast crate::Macro) {
590        visit_macro(self, i);
591    }
592    #[cfg(any(feature = "derive", feature = "full"))]
593    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
594    fn visit_macro_delimiter(&mut self, i: &'ast crate::MacroDelimiter) {
595        visit_macro_delimiter(self, i);
596    }
597    #[cfg(any(feature = "derive", feature = "full"))]
598    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
599    fn visit_member(&mut self, i: &'ast crate::Member) {
600        visit_member(self, i);
601    }
602    #[cfg(any(feature = "derive", feature = "full"))]
603    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
604    fn visit_meta(&mut self, i: &'ast crate::Meta) {
605        visit_meta(self, i);
606    }
607    #[cfg(any(feature = "derive", feature = "full"))]
608    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
609    fn visit_meta_list(&mut self, i: &'ast crate::MetaList) {
610        visit_meta_list(self, i);
611    }
612    #[cfg(any(feature = "derive", feature = "full"))]
613    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
614    fn visit_meta_name_value(&mut self, i: &'ast crate::MetaNameValue) {
615        visit_meta_name_value(self, i);
616    }
617    #[cfg(any(feature = "derive", feature = "full"))]
618    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
619    fn visit_parenthesized_generic_arguments(
620        &mut self,
621        i: &'ast crate::ParenthesizedGenericArguments,
622    ) {
623        visit_parenthesized_generic_arguments(self, i);
624    }
625    #[cfg(feature = "full")]
626    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
627    fn visit_pat(&mut self, i: &'ast crate::Pat) {
628        visit_pat(self, i);
629    }
630    #[cfg(feature = "full")]
631    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
632    fn visit_pat_ident(&mut self, i: &'ast crate::PatIdent) {
633        visit_pat_ident(self, i);
634    }
635    #[cfg(feature = "full")]
636    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
637    fn visit_pat_or(&mut self, i: &'ast crate::PatOr) {
638        visit_pat_or(self, i);
639    }
640    #[cfg(feature = "full")]
641    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
642    fn visit_pat_paren(&mut self, i: &'ast crate::PatParen) {
643        visit_pat_paren(self, i);
644    }
645    #[cfg(feature = "full")]
646    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
647    fn visit_pat_reference(&mut self, i: &'ast crate::PatReference) {
648        visit_pat_reference(self, i);
649    }
650    #[cfg(feature = "full")]
651    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
652    fn visit_pat_rest(&mut self, i: &'ast crate::PatRest) {
653        visit_pat_rest(self, i);
654    }
655    #[cfg(feature = "full")]
656    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
657    fn visit_pat_slice(&mut self, i: &'ast crate::PatSlice) {
658        visit_pat_slice(self, i);
659    }
660    #[cfg(feature = "full")]
661    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
662    fn visit_pat_struct(&mut self, i: &'ast crate::PatStruct) {
663        visit_pat_struct(self, i);
664    }
665    #[cfg(feature = "full")]
666    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
667    fn visit_pat_tuple(&mut self, i: &'ast crate::PatTuple) {
668        visit_pat_tuple(self, i);
669    }
670    #[cfg(feature = "full")]
671    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
672    fn visit_pat_tuple_struct(&mut self, i: &'ast crate::PatTupleStruct) {
673        visit_pat_tuple_struct(self, i);
674    }
675    #[cfg(feature = "full")]
676    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
677    fn visit_pat_type(&mut self, i: &'ast crate::PatType) {
678        visit_pat_type(self, i);
679    }
680    #[cfg(feature = "full")]
681    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
682    fn visit_pat_wild(&mut self, i: &'ast crate::PatWild) {
683        visit_pat_wild(self, i);
684    }
685    #[cfg(any(feature = "derive", feature = "full"))]
686    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
687    fn visit_path(&mut self, i: &'ast crate::Path) {
688        visit_path(self, i);
689    }
690    #[cfg(any(feature = "derive", feature = "full"))]
691    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
692    fn visit_path_arguments(&mut self, i: &'ast crate::PathArguments) {
693        visit_path_arguments(self, i);
694    }
695    #[cfg(any(feature = "derive", feature = "full"))]
696    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
697    fn visit_path_segment(&mut self, i: &'ast crate::PathSegment) {
698        visit_path_segment(self, i);
699    }
700    #[cfg(feature = "full")]
701    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
702    fn visit_pointer_mutability(&mut self, i: &'ast crate::PointerMutability) {
703        visit_pointer_mutability(self, i);
704    }
705    #[cfg(feature = "full")]
706    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
707    fn visit_precise_capture(&mut self, i: &'ast crate::PreciseCapture) {
708        visit_precise_capture(self, i);
709    }
710    #[cfg(any(feature = "derive", feature = "full"))]
711    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
712    fn visit_predicate_lifetime(&mut self, i: &'ast crate::PredicateLifetime) {
713        visit_predicate_lifetime(self, i);
714    }
715    #[cfg(any(feature = "derive", feature = "full"))]
716    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
717    fn visit_predicate_type(&mut self, i: &'ast crate::PredicateType) {
718        visit_predicate_type(self, i);
719    }
720    #[cfg(any(feature = "derive", feature = "full"))]
721    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
722    fn visit_qself(&mut self, i: &'ast crate::QSelf) {
723        visit_qself(self, i);
724    }
725    #[cfg(feature = "full")]
726    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
727    fn visit_range_limits(&mut self, i: &'ast crate::RangeLimits) {
728        visit_range_limits(self, i);
729    }
730    #[cfg(feature = "full")]
731    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
732    fn visit_receiver(&mut self, i: &'ast crate::Receiver) {
733        visit_receiver(self, i);
734    }
735    #[cfg(any(feature = "derive", feature = "full"))]
736    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
737    fn visit_return_type(&mut self, i: &'ast crate::ReturnType) {
738        visit_return_type(self, i);
739    }
740    #[cfg(feature = "full")]
741    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
742    fn visit_signature(&mut self, i: &'ast crate::Signature) {
743        visit_signature(self, i);
744    }
745    fn visit_span(&mut self, i: &proc_macro2::Span) {}
746    #[cfg(feature = "full")]
747    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
748    fn visit_static_mutability(&mut self, i: &'ast crate::StaticMutability) {
749        visit_static_mutability(self, i);
750    }
751    #[cfg(feature = "full")]
752    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
753    fn visit_stmt(&mut self, i: &'ast crate::Stmt) {
754        visit_stmt(self, i);
755    }
756    #[cfg(feature = "full")]
757    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
758    fn visit_stmt_macro(&mut self, i: &'ast crate::StmtMacro) {
759        visit_stmt_macro(self, i);
760    }
761    fn visit_token_stream(&mut self, i: &'ast proc_macro2::TokenStream) {}
762    #[cfg(any(feature = "derive", feature = "full"))]
763    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
764    fn visit_trait_bound(&mut self, i: &'ast crate::TraitBound) {
765        visit_trait_bound(self, i);
766    }
767    #[cfg(any(feature = "derive", feature = "full"))]
768    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
769    fn visit_trait_bound_modifier(&mut self, i: &'ast crate::TraitBoundModifier) {
770        visit_trait_bound_modifier(self, i);
771    }
772    #[cfg(feature = "full")]
773    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
774    fn visit_trait_item(&mut self, i: &'ast crate::TraitItem) {
775        visit_trait_item(self, i);
776    }
777    #[cfg(feature = "full")]
778    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
779    fn visit_trait_item_const(&mut self, i: &'ast crate::TraitItemConst) {
780        visit_trait_item_const(self, i);
781    }
782    #[cfg(feature = "full")]
783    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
784    fn visit_trait_item_fn(&mut self, i: &'ast crate::TraitItemFn) {
785        visit_trait_item_fn(self, i);
786    }
787    #[cfg(feature = "full")]
788    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
789    fn visit_trait_item_macro(&mut self, i: &'ast crate::TraitItemMacro) {
790        visit_trait_item_macro(self, i);
791    }
792    #[cfg(feature = "full")]
793    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
794    fn visit_trait_item_type(&mut self, i: &'ast crate::TraitItemType) {
795        visit_trait_item_type(self, i);
796    }
797    #[cfg(any(feature = "derive", feature = "full"))]
798    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
799    fn visit_type(&mut self, i: &'ast crate::Type) {
800        visit_type(self, i);
801    }
802    #[cfg(any(feature = "derive", feature = "full"))]
803    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
804    fn visit_type_array(&mut self, i: &'ast crate::TypeArray) {
805        visit_type_array(self, i);
806    }
807    #[cfg(any(feature = "derive", feature = "full"))]
808    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
809    fn visit_type_bare_fn(&mut self, i: &'ast crate::TypeBareFn) {
810        visit_type_bare_fn(self, i);
811    }
812    #[cfg(any(feature = "derive", feature = "full"))]
813    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
814    fn visit_type_group(&mut self, i: &'ast crate::TypeGroup) {
815        visit_type_group(self, i);
816    }
817    #[cfg(any(feature = "derive", feature = "full"))]
818    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
819    fn visit_type_impl_trait(&mut self, i: &'ast crate::TypeImplTrait) {
820        visit_type_impl_trait(self, i);
821    }
822    #[cfg(any(feature = "derive", feature = "full"))]
823    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
824    fn visit_type_infer(&mut self, i: &'ast crate::TypeInfer) {
825        visit_type_infer(self, i);
826    }
827    #[cfg(any(feature = "derive", feature = "full"))]
828    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
829    fn visit_type_macro(&mut self, i: &'ast crate::TypeMacro) {
830        visit_type_macro(self, i);
831    }
832    #[cfg(any(feature = "derive", feature = "full"))]
833    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
834    fn visit_type_never(&mut self, i: &'ast crate::TypeNever) {
835        visit_type_never(self, i);
836    }
837    #[cfg(any(feature = "derive", feature = "full"))]
838    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
839    fn visit_type_param(&mut self, i: &'ast crate::TypeParam) {
840        visit_type_param(self, i);
841    }
842    #[cfg(any(feature = "derive", feature = "full"))]
843    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
844    fn visit_type_param_bound(&mut self, i: &'ast crate::TypeParamBound) {
845        visit_type_param_bound(self, i);
846    }
847    #[cfg(any(feature = "derive", feature = "full"))]
848    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
849    fn visit_type_paren(&mut self, i: &'ast crate::TypeParen) {
850        visit_type_paren(self, i);
851    }
852    #[cfg(any(feature = "derive", feature = "full"))]
853    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
854    fn visit_type_path(&mut self, i: &'ast crate::TypePath) {
855        visit_type_path(self, i);
856    }
857    #[cfg(any(feature = "derive", feature = "full"))]
858    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
859    fn visit_type_ptr(&mut self, i: &'ast crate::TypePtr) {
860        visit_type_ptr(self, i);
861    }
862    #[cfg(any(feature = "derive", feature = "full"))]
863    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
864    fn visit_type_reference(&mut self, i: &'ast crate::TypeReference) {
865        visit_type_reference(self, i);
866    }
867    #[cfg(any(feature = "derive", feature = "full"))]
868    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
869    fn visit_type_slice(&mut self, i: &'ast crate::TypeSlice) {
870        visit_type_slice(self, i);
871    }
872    #[cfg(any(feature = "derive", feature = "full"))]
873    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
874    fn visit_type_trait_object(&mut self, i: &'ast crate::TypeTraitObject) {
875        visit_type_trait_object(self, i);
876    }
877    #[cfg(any(feature = "derive", feature = "full"))]
878    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
879    fn visit_type_tuple(&mut self, i: &'ast crate::TypeTuple) {
880        visit_type_tuple(self, i);
881    }
882    #[cfg(any(feature = "derive", feature = "full"))]
883    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
884    fn visit_un_op(&mut self, i: &'ast crate::UnOp) {
885        visit_un_op(self, i);
886    }
887    #[cfg(feature = "full")]
888    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
889    fn visit_use_glob(&mut self, i: &'ast crate::UseGlob) {
890        visit_use_glob(self, i);
891    }
892    #[cfg(feature = "full")]
893    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
894    fn visit_use_group(&mut self, i: &'ast crate::UseGroup) {
895        visit_use_group(self, i);
896    }
897    #[cfg(feature = "full")]
898    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
899    fn visit_use_name(&mut self, i: &'ast crate::UseName) {
900        visit_use_name(self, i);
901    }
902    #[cfg(feature = "full")]
903    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
904    fn visit_use_path(&mut self, i: &'ast crate::UsePath) {
905        visit_use_path(self, i);
906    }
907    #[cfg(feature = "full")]
908    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
909    fn visit_use_rename(&mut self, i: &'ast crate::UseRename) {
910        visit_use_rename(self, i);
911    }
912    #[cfg(feature = "full")]
913    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
914    fn visit_use_tree(&mut self, i: &'ast crate::UseTree) {
915        visit_use_tree(self, i);
916    }
917    #[cfg(feature = "full")]
918    #[cfg_attr(docsrs, doc(cfg(feature = "full")))]
919    fn visit_variadic(&mut self, i: &'ast crate::Variadic) {
920        visit_variadic(self, i);
921    }
922    #[cfg(any(feature = "derive", feature = "full"))]
923    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
924    fn visit_variant(&mut self, i: &'ast crate::Variant) {
925        visit_variant(self, i);
926    }
927    #[cfg(any(feature = "derive", feature = "full"))]
928    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
929    fn visit_vis_restricted(&mut self, i: &'ast crate::VisRestricted) {
930        visit_vis_restricted(self, i);
931    }
932    #[cfg(any(feature = "derive", feature = "full"))]
933    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
934    fn visit_visibility(&mut self, i: &'ast crate::Visibility) {
935        visit_visibility(self, i);
936    }
937    #[cfg(any(feature = "derive", feature = "full"))]
938    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
939    fn visit_where_clause(&mut self, i: &'ast crate::WhereClause) {
940        visit_where_clause(self, i);
941    }
942    #[cfg(any(feature = "derive", feature = "full"))]
943    #[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
944    fn visit_where_predicate(&mut self, i: &'ast crate::WherePredicate) {
945        visit_where_predicate(self, i);
946    }
947}
948#[cfg(any(feature = "derive", feature = "full"))]
949#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
950pub fn visit_abi<'ast, V>(v: &mut V, node: &'ast crate::Abi)
951where
952    V: Visit<'ast> + ?Sized,
953{
954    skip!(node.extern_token);
955    if let Some(it) = &node.name {
956        v.visit_lit_str(it);
957    }
958}
959#[cfg(any(feature = "derive", feature = "full"))]
960#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
961pub fn visit_angle_bracketed_generic_arguments<'ast, V>(
962    v: &mut V,
963    node: &'ast crate::AngleBracketedGenericArguments,
964)
965where
966    V: Visit<'ast> + ?Sized,
967{
968    skip!(node.colon2_token);
969    skip!(node.lt_token);
970    for el in Punctuated::pairs(&node.args) {
971        let it = el.value();
972        v.visit_generic_argument(it);
973    }
974    skip!(node.gt_token);
975}
976#[cfg(feature = "full")]
977#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
978pub fn visit_arm<'ast, V>(v: &mut V, node: &'ast crate::Arm)
979where
980    V: Visit<'ast> + ?Sized,
981{
982    for it in &node.attrs {
983        v.visit_attribute(it);
984    }
985    v.visit_pat(&node.pat);
986    if let Some(it) = &node.guard {
987        skip!((it).0);
988        v.visit_expr(&*(it).1);
989    }
990    skip!(node.fat_arrow_token);
991    v.visit_expr(&*node.body);
992    skip!(node.comma);
993}
994#[cfg(any(feature = "derive", feature = "full"))]
995#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
996pub fn visit_assoc_const<'ast, V>(v: &mut V, node: &'ast crate::AssocConst)
997where
998    V: Visit<'ast> + ?Sized,
999{
1000    v.visit_ident(&node.ident);
1001    if let Some(it) = &node.generics {
1002        v.visit_angle_bracketed_generic_arguments(it);
1003    }
1004    skip!(node.eq_token);
1005    v.visit_expr(&node.value);
1006}
1007#[cfg(any(feature = "derive", feature = "full"))]
1008#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1009pub fn visit_assoc_type<'ast, V>(v: &mut V, node: &'ast crate::AssocType)
1010where
1011    V: Visit<'ast> + ?Sized,
1012{
1013    v.visit_ident(&node.ident);
1014    if let Some(it) = &node.generics {
1015        v.visit_angle_bracketed_generic_arguments(it);
1016    }
1017    skip!(node.eq_token);
1018    v.visit_type(&node.ty);
1019}
1020#[cfg(any(feature = "derive", feature = "full"))]
1021#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1022pub fn visit_attr_style<'ast, V>(v: &mut V, node: &'ast crate::AttrStyle)
1023where
1024    V: Visit<'ast> + ?Sized,
1025{
1026    match node {
1027        crate::AttrStyle::Outer => {}
1028        crate::AttrStyle::Inner(_binding_0) => {
1029            skip!(_binding_0);
1030        }
1031    }
1032}
1033#[cfg(any(feature = "derive", feature = "full"))]
1034#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1035pub fn visit_attribute<'ast, V>(v: &mut V, node: &'ast crate::Attribute)
1036where
1037    V: Visit<'ast> + ?Sized,
1038{
1039    skip!(node.pound_token);
1040    v.visit_attr_style(&node.style);
1041    skip!(node.bracket_token);
1042    v.visit_meta(&node.meta);
1043}
1044#[cfg(any(feature = "derive", feature = "full"))]
1045#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1046pub fn visit_bare_fn_arg<'ast, V>(v: &mut V, node: &'ast crate::BareFnArg)
1047where
1048    V: Visit<'ast> + ?Sized,
1049{
1050    for it in &node.attrs {
1051        v.visit_attribute(it);
1052    }
1053    if let Some(it) = &node.name {
1054        v.visit_ident(&(it).0);
1055        skip!((it).1);
1056    }
1057    v.visit_type(&node.ty);
1058}
1059#[cfg(any(feature = "derive", feature = "full"))]
1060#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1061pub fn visit_bare_variadic<'ast, V>(v: &mut V, node: &'ast crate::BareVariadic)
1062where
1063    V: Visit<'ast> + ?Sized,
1064{
1065    for it in &node.attrs {
1066        v.visit_attribute(it);
1067    }
1068    if let Some(it) = &node.name {
1069        v.visit_ident(&(it).0);
1070        skip!((it).1);
1071    }
1072    skip!(node.dots);
1073    skip!(node.comma);
1074}
1075#[cfg(any(feature = "derive", feature = "full"))]
1076#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1077pub fn visit_bin_op<'ast, V>(v: &mut V, node: &'ast crate::BinOp)
1078where
1079    V: Visit<'ast> + ?Sized,
1080{
1081    match node {
1082        crate::BinOp::Add(_binding_0) => {
1083            skip!(_binding_0);
1084        }
1085        crate::BinOp::Sub(_binding_0) => {
1086            skip!(_binding_0);
1087        }
1088        crate::BinOp::Mul(_binding_0) => {
1089            skip!(_binding_0);
1090        }
1091        crate::BinOp::Div(_binding_0) => {
1092            skip!(_binding_0);
1093        }
1094        crate::BinOp::Rem(_binding_0) => {
1095            skip!(_binding_0);
1096        }
1097        crate::BinOp::And(_binding_0) => {
1098            skip!(_binding_0);
1099        }
1100        crate::BinOp::Or(_binding_0) => {
1101            skip!(_binding_0);
1102        }
1103        crate::BinOp::BitXor(_binding_0) => {
1104            skip!(_binding_0);
1105        }
1106        crate::BinOp::BitAnd(_binding_0) => {
1107            skip!(_binding_0);
1108        }
1109        crate::BinOp::BitOr(_binding_0) => {
1110            skip!(_binding_0);
1111        }
1112        crate::BinOp::Shl(_binding_0) => {
1113            skip!(_binding_0);
1114        }
1115        crate::BinOp::Shr(_binding_0) => {
1116            skip!(_binding_0);
1117        }
1118        crate::BinOp::Eq(_binding_0) => {
1119            skip!(_binding_0);
1120        }
1121        crate::BinOp::Lt(_binding_0) => {
1122            skip!(_binding_0);
1123        }
1124        crate::BinOp::Le(_binding_0) => {
1125            skip!(_binding_0);
1126        }
1127        crate::BinOp::Ne(_binding_0) => {
1128            skip!(_binding_0);
1129        }
1130        crate::BinOp::Ge(_binding_0) => {
1131            skip!(_binding_0);
1132        }
1133        crate::BinOp::Gt(_binding_0) => {
1134            skip!(_binding_0);
1135        }
1136        crate::BinOp::AddAssign(_binding_0) => {
1137            skip!(_binding_0);
1138        }
1139        crate::BinOp::SubAssign(_binding_0) => {
1140            skip!(_binding_0);
1141        }
1142        crate::BinOp::MulAssign(_binding_0) => {
1143            skip!(_binding_0);
1144        }
1145        crate::BinOp::DivAssign(_binding_0) => {
1146            skip!(_binding_0);
1147        }
1148        crate::BinOp::RemAssign(_binding_0) => {
1149            skip!(_binding_0);
1150        }
1151        crate::BinOp::BitXorAssign(_binding_0) => {
1152            skip!(_binding_0);
1153        }
1154        crate::BinOp::BitAndAssign(_binding_0) => {
1155            skip!(_binding_0);
1156        }
1157        crate::BinOp::BitOrAssign(_binding_0) => {
1158            skip!(_binding_0);
1159        }
1160        crate::BinOp::ShlAssign(_binding_0) => {
1161            skip!(_binding_0);
1162        }
1163        crate::BinOp::ShrAssign(_binding_0) => {
1164            skip!(_binding_0);
1165        }
1166    }
1167}
1168#[cfg(feature = "full")]
1169#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1170pub fn visit_block<'ast, V>(v: &mut V, node: &'ast crate::Block)
1171where
1172    V: Visit<'ast> + ?Sized,
1173{
1174    skip!(node.brace_token);
1175    for it in &node.stmts {
1176        v.visit_stmt(it);
1177    }
1178}
1179#[cfg(any(feature = "derive", feature = "full"))]
1180#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1181pub fn visit_bound_lifetimes<'ast, V>(v: &mut V, node: &'ast crate::BoundLifetimes)
1182where
1183    V: Visit<'ast> + ?Sized,
1184{
1185    skip!(node.for_token);
1186    skip!(node.lt_token);
1187    for el in Punctuated::pairs(&node.lifetimes) {
1188        let it = el.value();
1189        v.visit_generic_param(it);
1190    }
1191    skip!(node.gt_token);
1192}
1193#[cfg(feature = "full")]
1194#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1195pub fn visit_captured_param<'ast, V>(v: &mut V, node: &'ast crate::CapturedParam)
1196where
1197    V: Visit<'ast> + ?Sized,
1198{
1199    match node {
1200        crate::CapturedParam::Lifetime(_binding_0) => {
1201            v.visit_lifetime(_binding_0);
1202        }
1203        crate::CapturedParam::Ident(_binding_0) => {
1204            v.visit_ident(_binding_0);
1205        }
1206    }
1207}
1208#[cfg(any(feature = "derive", feature = "full"))]
1209#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1210pub fn visit_const_param<'ast, V>(v: &mut V, node: &'ast crate::ConstParam)
1211where
1212    V: Visit<'ast> + ?Sized,
1213{
1214    for it in &node.attrs {
1215        v.visit_attribute(it);
1216    }
1217    skip!(node.const_token);
1218    v.visit_ident(&node.ident);
1219    skip!(node.colon_token);
1220    v.visit_type(&node.ty);
1221    skip!(node.eq_token);
1222    if let Some(it) = &node.default {
1223        v.visit_expr(it);
1224    }
1225}
1226#[cfg(any(feature = "derive", feature = "full"))]
1227#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1228pub fn visit_constraint<'ast, V>(v: &mut V, node: &'ast crate::Constraint)
1229where
1230    V: Visit<'ast> + ?Sized,
1231{
1232    v.visit_ident(&node.ident);
1233    if let Some(it) = &node.generics {
1234        v.visit_angle_bracketed_generic_arguments(it);
1235    }
1236    skip!(node.colon_token);
1237    for el in Punctuated::pairs(&node.bounds) {
1238        let it = el.value();
1239        v.visit_type_param_bound(it);
1240    }
1241}
1242#[cfg(feature = "derive")]
1243#[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
1244pub fn visit_data<'ast, V>(v: &mut V, node: &'ast crate::Data)
1245where
1246    V: Visit<'ast> + ?Sized,
1247{
1248    match node {
1249        crate::Data::Struct(_binding_0) => {
1250            v.visit_data_struct(_binding_0);
1251        }
1252        crate::Data::Enum(_binding_0) => {
1253            v.visit_data_enum(_binding_0);
1254        }
1255        crate::Data::Union(_binding_0) => {
1256            v.visit_data_union(_binding_0);
1257        }
1258    }
1259}
1260#[cfg(feature = "derive")]
1261#[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
1262pub fn visit_data_enum<'ast, V>(v: &mut V, node: &'ast crate::DataEnum)
1263where
1264    V: Visit<'ast> + ?Sized,
1265{
1266    skip!(node.enum_token);
1267    skip!(node.brace_token);
1268    for el in Punctuated::pairs(&node.variants) {
1269        let it = el.value();
1270        v.visit_variant(it);
1271    }
1272}
1273#[cfg(feature = "derive")]
1274#[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
1275pub fn visit_data_struct<'ast, V>(v: &mut V, node: &'ast crate::DataStruct)
1276where
1277    V: Visit<'ast> + ?Sized,
1278{
1279    skip!(node.struct_token);
1280    v.visit_fields(&node.fields);
1281    skip!(node.semi_token);
1282}
1283#[cfg(feature = "derive")]
1284#[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
1285pub fn visit_data_union<'ast, V>(v: &mut V, node: &'ast crate::DataUnion)
1286where
1287    V: Visit<'ast> + ?Sized,
1288{
1289    skip!(node.union_token);
1290    v.visit_fields_named(&node.fields);
1291}
1292#[cfg(feature = "derive")]
1293#[cfg_attr(docsrs, doc(cfg(feature = "derive")))]
1294pub fn visit_derive_input<'ast, V>(v: &mut V, node: &'ast crate::DeriveInput)
1295where
1296    V: Visit<'ast> + ?Sized,
1297{
1298    for it in &node.attrs {
1299        v.visit_attribute(it);
1300    }
1301    v.visit_visibility(&node.vis);
1302    v.visit_ident(&node.ident);
1303    v.visit_generics(&node.generics);
1304    v.visit_data(&node.data);
1305}
1306#[cfg(any(feature = "derive", feature = "full"))]
1307#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1308pub fn visit_expr<'ast, V>(v: &mut V, node: &'ast crate::Expr)
1309where
1310    V: Visit<'ast> + ?Sized,
1311{
1312    match node {
1313        crate::Expr::Array(_binding_0) => {
1314            full!(v.visit_expr_array(_binding_0));
1315        }
1316        crate::Expr::Assign(_binding_0) => {
1317            full!(v.visit_expr_assign(_binding_0));
1318        }
1319        crate::Expr::Async(_binding_0) => {
1320            full!(v.visit_expr_async(_binding_0));
1321        }
1322        crate::Expr::Await(_binding_0) => {
1323            full!(v.visit_expr_await(_binding_0));
1324        }
1325        crate::Expr::Binary(_binding_0) => {
1326            v.visit_expr_binary(_binding_0);
1327        }
1328        crate::Expr::Block(_binding_0) => {
1329            full!(v.visit_expr_block(_binding_0));
1330        }
1331        crate::Expr::Break(_binding_0) => {
1332            full!(v.visit_expr_break(_binding_0));
1333        }
1334        crate::Expr::Call(_binding_0) => {
1335            v.visit_expr_call(_binding_0);
1336        }
1337        crate::Expr::Cast(_binding_0) => {
1338            v.visit_expr_cast(_binding_0);
1339        }
1340        crate::Expr::Closure(_binding_0) => {
1341            full!(v.visit_expr_closure(_binding_0));
1342        }
1343        crate::Expr::Const(_binding_0) => {
1344            full!(v.visit_expr_const(_binding_0));
1345        }
1346        crate::Expr::Continue(_binding_0) => {
1347            full!(v.visit_expr_continue(_binding_0));
1348        }
1349        crate::Expr::Field(_binding_0) => {
1350            v.visit_expr_field(_binding_0);
1351        }
1352        crate::Expr::ForLoop(_binding_0) => {
1353            full!(v.visit_expr_for_loop(_binding_0));
1354        }
1355        crate::Expr::Group(_binding_0) => {
1356            v.visit_expr_group(_binding_0);
1357        }
1358        crate::Expr::If(_binding_0) => {
1359            full!(v.visit_expr_if(_binding_0));
1360        }
1361        crate::Expr::Index(_binding_0) => {
1362            v.visit_expr_index(_binding_0);
1363        }
1364        crate::Expr::Infer(_binding_0) => {
1365            full!(v.visit_expr_infer(_binding_0));
1366        }
1367        crate::Expr::Let(_binding_0) => {
1368            full!(v.visit_expr_let(_binding_0));
1369        }
1370        crate::Expr::Lit(_binding_0) => {
1371            v.visit_expr_lit(_binding_0);
1372        }
1373        crate::Expr::Loop(_binding_0) => {
1374            full!(v.visit_expr_loop(_binding_0));
1375        }
1376        crate::Expr::Macro(_binding_0) => {
1377            v.visit_expr_macro(_binding_0);
1378        }
1379        crate::Expr::Match(_binding_0) => {
1380            full!(v.visit_expr_match(_binding_0));
1381        }
1382        crate::Expr::MethodCall(_binding_0) => {
1383            v.visit_expr_method_call(_binding_0);
1384        }
1385        crate::Expr::Paren(_binding_0) => {
1386            v.visit_expr_paren(_binding_0);
1387        }
1388        crate::Expr::Path(_binding_0) => {
1389            v.visit_expr_path(_binding_0);
1390        }
1391        crate::Expr::Range(_binding_0) => {
1392            full!(v.visit_expr_range(_binding_0));
1393        }
1394        crate::Expr::RawAddr(_binding_0) => {
1395            full!(v.visit_expr_raw_addr(_binding_0));
1396        }
1397        crate::Expr::Reference(_binding_0) => {
1398            v.visit_expr_reference(_binding_0);
1399        }
1400        crate::Expr::Repeat(_binding_0) => {
1401            full!(v.visit_expr_repeat(_binding_0));
1402        }
1403        crate::Expr::Return(_binding_0) => {
1404            full!(v.visit_expr_return(_binding_0));
1405        }
1406        crate::Expr::Struct(_binding_0) => {
1407            v.visit_expr_struct(_binding_0);
1408        }
1409        crate::Expr::Try(_binding_0) => {
1410            full!(v.visit_expr_try(_binding_0));
1411        }
1412        crate::Expr::TryBlock(_binding_0) => {
1413            full!(v.visit_expr_try_block(_binding_0));
1414        }
1415        crate::Expr::Tuple(_binding_0) => {
1416            v.visit_expr_tuple(_binding_0);
1417        }
1418        crate::Expr::Unary(_binding_0) => {
1419            v.visit_expr_unary(_binding_0);
1420        }
1421        crate::Expr::Unsafe(_binding_0) => {
1422            full!(v.visit_expr_unsafe(_binding_0));
1423        }
1424        crate::Expr::Verbatim(_binding_0) => {
1425            v.visit_token_stream(_binding_0);
1426        }
1427        crate::Expr::While(_binding_0) => {
1428            full!(v.visit_expr_while(_binding_0));
1429        }
1430        crate::Expr::Yield(_binding_0) => {
1431            full!(v.visit_expr_yield(_binding_0));
1432        }
1433    }
1434}
1435#[cfg(feature = "full")]
1436#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1437pub fn visit_expr_array<'ast, V>(v: &mut V, node: &'ast crate::ExprArray)
1438where
1439    V: Visit<'ast> + ?Sized,
1440{
1441    for it in &node.attrs {
1442        v.visit_attribute(it);
1443    }
1444    skip!(node.bracket_token);
1445    for el in Punctuated::pairs(&node.elems) {
1446        let it = el.value();
1447        v.visit_expr(it);
1448    }
1449}
1450#[cfg(feature = "full")]
1451#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1452pub fn visit_expr_assign<'ast, V>(v: &mut V, node: &'ast crate::ExprAssign)
1453where
1454    V: Visit<'ast> + ?Sized,
1455{
1456    for it in &node.attrs {
1457        v.visit_attribute(it);
1458    }
1459    v.visit_expr(&*node.left);
1460    skip!(node.eq_token);
1461    v.visit_expr(&*node.right);
1462}
1463#[cfg(feature = "full")]
1464#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1465pub fn visit_expr_async<'ast, V>(v: &mut V, node: &'ast crate::ExprAsync)
1466where
1467    V: Visit<'ast> + ?Sized,
1468{
1469    for it in &node.attrs {
1470        v.visit_attribute(it);
1471    }
1472    skip!(node.async_token);
1473    skip!(node.capture);
1474    v.visit_block(&node.block);
1475}
1476#[cfg(feature = "full")]
1477#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1478pub fn visit_expr_await<'ast, V>(v: &mut V, node: &'ast crate::ExprAwait)
1479where
1480    V: Visit<'ast> + ?Sized,
1481{
1482    for it in &node.attrs {
1483        v.visit_attribute(it);
1484    }
1485    v.visit_expr(&*node.base);
1486    skip!(node.dot_token);
1487    skip!(node.await_token);
1488}
1489#[cfg(any(feature = "derive", feature = "full"))]
1490#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1491pub fn visit_expr_binary<'ast, V>(v: &mut V, node: &'ast crate::ExprBinary)
1492where
1493    V: Visit<'ast> + ?Sized,
1494{
1495    for it in &node.attrs {
1496        v.visit_attribute(it);
1497    }
1498    v.visit_expr(&*node.left);
1499    v.visit_bin_op(&node.op);
1500    v.visit_expr(&*node.right);
1501}
1502#[cfg(feature = "full")]
1503#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1504pub fn visit_expr_block<'ast, V>(v: &mut V, node: &'ast crate::ExprBlock)
1505where
1506    V: Visit<'ast> + ?Sized,
1507{
1508    for it in &node.attrs {
1509        v.visit_attribute(it);
1510    }
1511    if let Some(it) = &node.label {
1512        v.visit_label(it);
1513    }
1514    v.visit_block(&node.block);
1515}
1516#[cfg(feature = "full")]
1517#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1518pub fn visit_expr_break<'ast, V>(v: &mut V, node: &'ast crate::ExprBreak)
1519where
1520    V: Visit<'ast> + ?Sized,
1521{
1522    for it in &node.attrs {
1523        v.visit_attribute(it);
1524    }
1525    skip!(node.break_token);
1526    if let Some(it) = &node.label {
1527        v.visit_lifetime(it);
1528    }
1529    if let Some(it) = &node.expr {
1530        v.visit_expr(&**it);
1531    }
1532}
1533#[cfg(any(feature = "derive", feature = "full"))]
1534#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1535pub fn visit_expr_call<'ast, V>(v: &mut V, node: &'ast crate::ExprCall)
1536where
1537    V: Visit<'ast> + ?Sized,
1538{
1539    for it in &node.attrs {
1540        v.visit_attribute(it);
1541    }
1542    v.visit_expr(&*node.func);
1543    skip!(node.paren_token);
1544    for el in Punctuated::pairs(&node.args) {
1545        let it = el.value();
1546        v.visit_expr(it);
1547    }
1548}
1549#[cfg(any(feature = "derive", feature = "full"))]
1550#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1551pub fn visit_expr_cast<'ast, V>(v: &mut V, node: &'ast crate::ExprCast)
1552where
1553    V: Visit<'ast> + ?Sized,
1554{
1555    for it in &node.attrs {
1556        v.visit_attribute(it);
1557    }
1558    v.visit_expr(&*node.expr);
1559    skip!(node.as_token);
1560    v.visit_type(&*node.ty);
1561}
1562#[cfg(feature = "full")]
1563#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1564pub fn visit_expr_closure<'ast, V>(v: &mut V, node: &'ast crate::ExprClosure)
1565where
1566    V: Visit<'ast> + ?Sized,
1567{
1568    for it in &node.attrs {
1569        v.visit_attribute(it);
1570    }
1571    if let Some(it) = &node.lifetimes {
1572        v.visit_bound_lifetimes(it);
1573    }
1574    skip!(node.constness);
1575    skip!(node.movability);
1576    skip!(node.asyncness);
1577    skip!(node.capture);
1578    skip!(node.or1_token);
1579    for el in Punctuated::pairs(&node.inputs) {
1580        let it = el.value();
1581        v.visit_pat(it);
1582    }
1583    skip!(node.or2_token);
1584    v.visit_return_type(&node.output);
1585    v.visit_expr(&*node.body);
1586}
1587#[cfg(feature = "full")]
1588#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1589pub fn visit_expr_const<'ast, V>(v: &mut V, node: &'ast crate::ExprConst)
1590where
1591    V: Visit<'ast> + ?Sized,
1592{
1593    for it in &node.attrs {
1594        v.visit_attribute(it);
1595    }
1596    skip!(node.const_token);
1597    v.visit_block(&node.block);
1598}
1599#[cfg(feature = "full")]
1600#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1601pub fn visit_expr_continue<'ast, V>(v: &mut V, node: &'ast crate::ExprContinue)
1602where
1603    V: Visit<'ast> + ?Sized,
1604{
1605    for it in &node.attrs {
1606        v.visit_attribute(it);
1607    }
1608    skip!(node.continue_token);
1609    if let Some(it) = &node.label {
1610        v.visit_lifetime(it);
1611    }
1612}
1613#[cfg(any(feature = "derive", feature = "full"))]
1614#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1615pub fn visit_expr_field<'ast, V>(v: &mut V, node: &'ast crate::ExprField)
1616where
1617    V: Visit<'ast> + ?Sized,
1618{
1619    for it in &node.attrs {
1620        v.visit_attribute(it);
1621    }
1622    v.visit_expr(&*node.base);
1623    skip!(node.dot_token);
1624    v.visit_member(&node.member);
1625}
1626#[cfg(feature = "full")]
1627#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1628pub fn visit_expr_for_loop<'ast, V>(v: &mut V, node: &'ast crate::ExprForLoop)
1629where
1630    V: Visit<'ast> + ?Sized,
1631{
1632    for it in &node.attrs {
1633        v.visit_attribute(it);
1634    }
1635    if let Some(it) = &node.label {
1636        v.visit_label(it);
1637    }
1638    skip!(node.for_token);
1639    v.visit_pat(&*node.pat);
1640    skip!(node.in_token);
1641    v.visit_expr(&*node.expr);
1642    v.visit_block(&node.body);
1643}
1644#[cfg(any(feature = "derive", feature = "full"))]
1645#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1646pub fn visit_expr_group<'ast, V>(v: &mut V, node: &'ast crate::ExprGroup)
1647where
1648    V: Visit<'ast> + ?Sized,
1649{
1650    for it in &node.attrs {
1651        v.visit_attribute(it);
1652    }
1653    skip!(node.group_token);
1654    v.visit_expr(&*node.expr);
1655}
1656#[cfg(feature = "full")]
1657#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1658pub fn visit_expr_if<'ast, V>(v: &mut V, node: &'ast crate::ExprIf)
1659where
1660    V: Visit<'ast> + ?Sized,
1661{
1662    for it in &node.attrs {
1663        v.visit_attribute(it);
1664    }
1665    skip!(node.if_token);
1666    v.visit_expr(&*node.cond);
1667    v.visit_block(&node.then_branch);
1668    if let Some(it) = &node.else_branch {
1669        skip!((it).0);
1670        v.visit_expr(&*(it).1);
1671    }
1672}
1673#[cfg(any(feature = "derive", feature = "full"))]
1674#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1675pub fn visit_expr_index<'ast, V>(v: &mut V, node: &'ast crate::ExprIndex)
1676where
1677    V: Visit<'ast> + ?Sized,
1678{
1679    for it in &node.attrs {
1680        v.visit_attribute(it);
1681    }
1682    v.visit_expr(&*node.expr);
1683    skip!(node.bracket_token);
1684    v.visit_expr(&*node.index);
1685}
1686#[cfg(feature = "full")]
1687#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1688pub fn visit_expr_infer<'ast, V>(v: &mut V, node: &'ast crate::ExprInfer)
1689where
1690    V: Visit<'ast> + ?Sized,
1691{
1692    for it in &node.attrs {
1693        v.visit_attribute(it);
1694    }
1695    skip!(node.underscore_token);
1696}
1697#[cfg(feature = "full")]
1698#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1699pub fn visit_expr_let<'ast, V>(v: &mut V, node: &'ast crate::ExprLet)
1700where
1701    V: Visit<'ast> + ?Sized,
1702{
1703    for it in &node.attrs {
1704        v.visit_attribute(it);
1705    }
1706    skip!(node.let_token);
1707    v.visit_pat(&*node.pat);
1708    skip!(node.eq_token);
1709    v.visit_expr(&*node.expr);
1710}
1711#[cfg(any(feature = "derive", feature = "full"))]
1712#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1713pub fn visit_expr_lit<'ast, V>(v: &mut V, node: &'ast crate::ExprLit)
1714where
1715    V: Visit<'ast> + ?Sized,
1716{
1717    for it in &node.attrs {
1718        v.visit_attribute(it);
1719    }
1720    v.visit_lit(&node.lit);
1721}
1722#[cfg(feature = "full")]
1723#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1724pub fn visit_expr_loop<'ast, V>(v: &mut V, node: &'ast crate::ExprLoop)
1725where
1726    V: Visit<'ast> + ?Sized,
1727{
1728    for it in &node.attrs {
1729        v.visit_attribute(it);
1730    }
1731    if let Some(it) = &node.label {
1732        v.visit_label(it);
1733    }
1734    skip!(node.loop_token);
1735    v.visit_block(&node.body);
1736}
1737#[cfg(any(feature = "derive", feature = "full"))]
1738#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1739pub fn visit_expr_macro<'ast, V>(v: &mut V, node: &'ast crate::ExprMacro)
1740where
1741    V: Visit<'ast> + ?Sized,
1742{
1743    for it in &node.attrs {
1744        v.visit_attribute(it);
1745    }
1746    v.visit_macro(&node.mac);
1747}
1748#[cfg(feature = "full")]
1749#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1750pub fn visit_expr_match<'ast, V>(v: &mut V, node: &'ast crate::ExprMatch)
1751where
1752    V: Visit<'ast> + ?Sized,
1753{
1754    for it in &node.attrs {
1755        v.visit_attribute(it);
1756    }
1757    skip!(node.match_token);
1758    v.visit_expr(&*node.expr);
1759    skip!(node.brace_token);
1760    for it in &node.arms {
1761        v.visit_arm(it);
1762    }
1763}
1764#[cfg(any(feature = "derive", feature = "full"))]
1765#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1766pub fn visit_expr_method_call<'ast, V>(v: &mut V, node: &'ast crate::ExprMethodCall)
1767where
1768    V: Visit<'ast> + ?Sized,
1769{
1770    for it in &node.attrs {
1771        v.visit_attribute(it);
1772    }
1773    v.visit_expr(&*node.receiver);
1774    skip!(node.dot_token);
1775    v.visit_ident(&node.method);
1776    if let Some(it) = &node.turbofish {
1777        v.visit_angle_bracketed_generic_arguments(it);
1778    }
1779    skip!(node.paren_token);
1780    for el in Punctuated::pairs(&node.args) {
1781        let it = el.value();
1782        v.visit_expr(it);
1783    }
1784}
1785#[cfg(any(feature = "derive", feature = "full"))]
1786#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1787pub fn visit_expr_paren<'ast, V>(v: &mut V, node: &'ast crate::ExprParen)
1788where
1789    V: Visit<'ast> + ?Sized,
1790{
1791    for it in &node.attrs {
1792        v.visit_attribute(it);
1793    }
1794    skip!(node.paren_token);
1795    v.visit_expr(&*node.expr);
1796}
1797#[cfg(any(feature = "derive", feature = "full"))]
1798#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1799pub fn visit_expr_path<'ast, V>(v: &mut V, node: &'ast crate::ExprPath)
1800where
1801    V: Visit<'ast> + ?Sized,
1802{
1803    for it in &node.attrs {
1804        v.visit_attribute(it);
1805    }
1806    if let Some(it) = &node.qself {
1807        v.visit_qself(it);
1808    }
1809    v.visit_path(&node.path);
1810}
1811#[cfg(feature = "full")]
1812#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1813pub fn visit_expr_range<'ast, V>(v: &mut V, node: &'ast crate::ExprRange)
1814where
1815    V: Visit<'ast> + ?Sized,
1816{
1817    for it in &node.attrs {
1818        v.visit_attribute(it);
1819    }
1820    if let Some(it) = &node.start {
1821        v.visit_expr(&**it);
1822    }
1823    v.visit_range_limits(&node.limits);
1824    if let Some(it) = &node.end {
1825        v.visit_expr(&**it);
1826    }
1827}
1828#[cfg(feature = "full")]
1829#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1830pub fn visit_expr_raw_addr<'ast, V>(v: &mut V, node: &'ast crate::ExprRawAddr)
1831where
1832    V: Visit<'ast> + ?Sized,
1833{
1834    for it in &node.attrs {
1835        v.visit_attribute(it);
1836    }
1837    skip!(node.and_token);
1838    skip!(node.raw);
1839    v.visit_pointer_mutability(&node.mutability);
1840    v.visit_expr(&*node.expr);
1841}
1842#[cfg(any(feature = "derive", feature = "full"))]
1843#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1844pub fn visit_expr_reference<'ast, V>(v: &mut V, node: &'ast crate::ExprReference)
1845where
1846    V: Visit<'ast> + ?Sized,
1847{
1848    for it in &node.attrs {
1849        v.visit_attribute(it);
1850    }
1851    skip!(node.and_token);
1852    skip!(node.mutability);
1853    v.visit_expr(&*node.expr);
1854}
1855#[cfg(feature = "full")]
1856#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1857pub fn visit_expr_repeat<'ast, V>(v: &mut V, node: &'ast crate::ExprRepeat)
1858where
1859    V: Visit<'ast> + ?Sized,
1860{
1861    for it in &node.attrs {
1862        v.visit_attribute(it);
1863    }
1864    skip!(node.bracket_token);
1865    v.visit_expr(&*node.expr);
1866    skip!(node.semi_token);
1867    v.visit_expr(&*node.len);
1868}
1869#[cfg(feature = "full")]
1870#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1871pub fn visit_expr_return<'ast, V>(v: &mut V, node: &'ast crate::ExprReturn)
1872where
1873    V: Visit<'ast> + ?Sized,
1874{
1875    for it in &node.attrs {
1876        v.visit_attribute(it);
1877    }
1878    skip!(node.return_token);
1879    if let Some(it) = &node.expr {
1880        v.visit_expr(&**it);
1881    }
1882}
1883#[cfg(any(feature = "derive", feature = "full"))]
1884#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1885pub fn visit_expr_struct<'ast, V>(v: &mut V, node: &'ast crate::ExprStruct)
1886where
1887    V: Visit<'ast> + ?Sized,
1888{
1889    for it in &node.attrs {
1890        v.visit_attribute(it);
1891    }
1892    if let Some(it) = &node.qself {
1893        v.visit_qself(it);
1894    }
1895    v.visit_path(&node.path);
1896    skip!(node.brace_token);
1897    for el in Punctuated::pairs(&node.fields) {
1898        let it = el.value();
1899        v.visit_field_value(it);
1900    }
1901    skip!(node.dot2_token);
1902    if let Some(it) = &node.rest {
1903        v.visit_expr(&**it);
1904    }
1905}
1906#[cfg(feature = "full")]
1907#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1908pub fn visit_expr_try<'ast, V>(v: &mut V, node: &'ast crate::ExprTry)
1909where
1910    V: Visit<'ast> + ?Sized,
1911{
1912    for it in &node.attrs {
1913        v.visit_attribute(it);
1914    }
1915    v.visit_expr(&*node.expr);
1916    skip!(node.question_token);
1917}
1918#[cfg(feature = "full")]
1919#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1920pub fn visit_expr_try_block<'ast, V>(v: &mut V, node: &'ast crate::ExprTryBlock)
1921where
1922    V: Visit<'ast> + ?Sized,
1923{
1924    for it in &node.attrs {
1925        v.visit_attribute(it);
1926    }
1927    skip!(node.try_token);
1928    v.visit_block(&node.block);
1929}
1930#[cfg(any(feature = "derive", feature = "full"))]
1931#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1932pub fn visit_expr_tuple<'ast, V>(v: &mut V, node: &'ast crate::ExprTuple)
1933where
1934    V: Visit<'ast> + ?Sized,
1935{
1936    for it in &node.attrs {
1937        v.visit_attribute(it);
1938    }
1939    skip!(node.paren_token);
1940    for el in Punctuated::pairs(&node.elems) {
1941        let it = el.value();
1942        v.visit_expr(it);
1943    }
1944}
1945#[cfg(any(feature = "derive", feature = "full"))]
1946#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
1947pub fn visit_expr_unary<'ast, V>(v: &mut V, node: &'ast crate::ExprUnary)
1948where
1949    V: Visit<'ast> + ?Sized,
1950{
1951    for it in &node.attrs {
1952        v.visit_attribute(it);
1953    }
1954    v.visit_un_op(&node.op);
1955    v.visit_expr(&*node.expr);
1956}
1957#[cfg(feature = "full")]
1958#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1959pub fn visit_expr_unsafe<'ast, V>(v: &mut V, node: &'ast crate::ExprUnsafe)
1960where
1961    V: Visit<'ast> + ?Sized,
1962{
1963    for it in &node.attrs {
1964        v.visit_attribute(it);
1965    }
1966    skip!(node.unsafe_token);
1967    v.visit_block(&node.block);
1968}
1969#[cfg(feature = "full")]
1970#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1971pub fn visit_expr_while<'ast, V>(v: &mut V, node: &'ast crate::ExprWhile)
1972where
1973    V: Visit<'ast> + ?Sized,
1974{
1975    for it in &node.attrs {
1976        v.visit_attribute(it);
1977    }
1978    if let Some(it) = &node.label {
1979        v.visit_label(it);
1980    }
1981    skip!(node.while_token);
1982    v.visit_expr(&*node.cond);
1983    v.visit_block(&node.body);
1984}
1985#[cfg(feature = "full")]
1986#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
1987pub fn visit_expr_yield<'ast, V>(v: &mut V, node: &'ast crate::ExprYield)
1988where
1989    V: Visit<'ast> + ?Sized,
1990{
1991    for it in &node.attrs {
1992        v.visit_attribute(it);
1993    }
1994    skip!(node.yield_token);
1995    if let Some(it) = &node.expr {
1996        v.visit_expr(&**it);
1997    }
1998}
1999#[cfg(any(feature = "derive", feature = "full"))]
2000#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2001pub fn visit_field<'ast, V>(v: &mut V, node: &'ast crate::Field)
2002where
2003    V: Visit<'ast> + ?Sized,
2004{
2005    for it in &node.attrs {
2006        v.visit_attribute(it);
2007    }
2008    v.visit_visibility(&node.vis);
2009    v.visit_field_mutability(&node.mutability);
2010    if let Some(it) = &node.ident {
2011        v.visit_ident(it);
2012    }
2013    skip!(node.colon_token);
2014    v.visit_type(&node.ty);
2015}
2016#[cfg(any(feature = "derive", feature = "full"))]
2017#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2018pub fn visit_field_mutability<'ast, V>(v: &mut V, node: &'ast crate::FieldMutability)
2019where
2020    V: Visit<'ast> + ?Sized,
2021{
2022    match node {
2023        crate::FieldMutability::None => {}
2024    }
2025}
2026#[cfg(feature = "full")]
2027#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2028pub fn visit_field_pat<'ast, V>(v: &mut V, node: &'ast crate::FieldPat)
2029where
2030    V: Visit<'ast> + ?Sized,
2031{
2032    for it in &node.attrs {
2033        v.visit_attribute(it);
2034    }
2035    v.visit_member(&node.member);
2036    skip!(node.colon_token);
2037    v.visit_pat(&*node.pat);
2038}
2039#[cfg(any(feature = "derive", feature = "full"))]
2040#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2041pub fn visit_field_value<'ast, V>(v: &mut V, node: &'ast crate::FieldValue)
2042where
2043    V: Visit<'ast> + ?Sized,
2044{
2045    for it in &node.attrs {
2046        v.visit_attribute(it);
2047    }
2048    v.visit_member(&node.member);
2049    skip!(node.colon_token);
2050    v.visit_expr(&node.expr);
2051}
2052#[cfg(any(feature = "derive", feature = "full"))]
2053#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2054pub fn visit_fields<'ast, V>(v: &mut V, node: &'ast crate::Fields)
2055where
2056    V: Visit<'ast> + ?Sized,
2057{
2058    match node {
2059        crate::Fields::Named(_binding_0) => {
2060            v.visit_fields_named(_binding_0);
2061        }
2062        crate::Fields::Unnamed(_binding_0) => {
2063            v.visit_fields_unnamed(_binding_0);
2064        }
2065        crate::Fields::Unit => {}
2066    }
2067}
2068#[cfg(any(feature = "derive", feature = "full"))]
2069#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2070pub fn visit_fields_named<'ast, V>(v: &mut V, node: &'ast crate::FieldsNamed)
2071where
2072    V: Visit<'ast> + ?Sized,
2073{
2074    skip!(node.brace_token);
2075    for el in Punctuated::pairs(&node.named) {
2076        let it = el.value();
2077        v.visit_field(it);
2078    }
2079}
2080#[cfg(any(feature = "derive", feature = "full"))]
2081#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2082pub fn visit_fields_unnamed<'ast, V>(v: &mut V, node: &'ast crate::FieldsUnnamed)
2083where
2084    V: Visit<'ast> + ?Sized,
2085{
2086    skip!(node.paren_token);
2087    for el in Punctuated::pairs(&node.unnamed) {
2088        let it = el.value();
2089        v.visit_field(it);
2090    }
2091}
2092#[cfg(feature = "full")]
2093#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2094pub fn visit_file<'ast, V>(v: &mut V, node: &'ast crate::File)
2095where
2096    V: Visit<'ast> + ?Sized,
2097{
2098    skip!(node.shebang);
2099    for it in &node.attrs {
2100        v.visit_attribute(it);
2101    }
2102    for it in &node.items {
2103        v.visit_item(it);
2104    }
2105}
2106#[cfg(feature = "full")]
2107#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2108pub fn visit_fn_arg<'ast, V>(v: &mut V, node: &'ast crate::FnArg)
2109where
2110    V: Visit<'ast> + ?Sized,
2111{
2112    match node {
2113        crate::FnArg::Receiver(_binding_0) => {
2114            v.visit_receiver(_binding_0);
2115        }
2116        crate::FnArg::Typed(_binding_0) => {
2117            v.visit_pat_type(_binding_0);
2118        }
2119    }
2120}
2121#[cfg(feature = "full")]
2122#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2123pub fn visit_foreign_item<'ast, V>(v: &mut V, node: &'ast crate::ForeignItem)
2124where
2125    V: Visit<'ast> + ?Sized,
2126{
2127    match node {
2128        crate::ForeignItem::Fn(_binding_0) => {
2129            v.visit_foreign_item_fn(_binding_0);
2130        }
2131        crate::ForeignItem::Static(_binding_0) => {
2132            v.visit_foreign_item_static(_binding_0);
2133        }
2134        crate::ForeignItem::Type(_binding_0) => {
2135            v.visit_foreign_item_type(_binding_0);
2136        }
2137        crate::ForeignItem::Macro(_binding_0) => {
2138            v.visit_foreign_item_macro(_binding_0);
2139        }
2140        crate::ForeignItem::Verbatim(_binding_0) => {
2141            v.visit_token_stream(_binding_0);
2142        }
2143    }
2144}
2145#[cfg(feature = "full")]
2146#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2147pub fn visit_foreign_item_fn<'ast, V>(v: &mut V, node: &'ast crate::ForeignItemFn)
2148where
2149    V: Visit<'ast> + ?Sized,
2150{
2151    for it in &node.attrs {
2152        v.visit_attribute(it);
2153    }
2154    v.visit_visibility(&node.vis);
2155    v.visit_signature(&node.sig);
2156    skip!(node.semi_token);
2157}
2158#[cfg(feature = "full")]
2159#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2160pub fn visit_foreign_item_macro<'ast, V>(v: &mut V, node: &'ast crate::ForeignItemMacro)
2161where
2162    V: Visit<'ast> + ?Sized,
2163{
2164    for it in &node.attrs {
2165        v.visit_attribute(it);
2166    }
2167    v.visit_macro(&node.mac);
2168    skip!(node.semi_token);
2169}
2170#[cfg(feature = "full")]
2171#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2172pub fn visit_foreign_item_static<'ast, V>(
2173    v: &mut V,
2174    node: &'ast crate::ForeignItemStatic,
2175)
2176where
2177    V: Visit<'ast> + ?Sized,
2178{
2179    for it in &node.attrs {
2180        v.visit_attribute(it);
2181    }
2182    v.visit_visibility(&node.vis);
2183    skip!(node.static_token);
2184    v.visit_static_mutability(&node.mutability);
2185    v.visit_ident(&node.ident);
2186    skip!(node.colon_token);
2187    v.visit_type(&*node.ty);
2188    skip!(node.semi_token);
2189}
2190#[cfg(feature = "full")]
2191#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2192pub fn visit_foreign_item_type<'ast, V>(v: &mut V, node: &'ast crate::ForeignItemType)
2193where
2194    V: Visit<'ast> + ?Sized,
2195{
2196    for it in &node.attrs {
2197        v.visit_attribute(it);
2198    }
2199    v.visit_visibility(&node.vis);
2200    skip!(node.type_token);
2201    v.visit_ident(&node.ident);
2202    v.visit_generics(&node.generics);
2203    skip!(node.semi_token);
2204}
2205#[cfg(any(feature = "derive", feature = "full"))]
2206#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2207pub fn visit_generic_argument<'ast, V>(v: &mut V, node: &'ast crate::GenericArgument)
2208where
2209    V: Visit<'ast> + ?Sized,
2210{
2211    match node {
2212        crate::GenericArgument::Lifetime(_binding_0) => {
2213            v.visit_lifetime(_binding_0);
2214        }
2215        crate::GenericArgument::Type(_binding_0) => {
2216            v.visit_type(_binding_0);
2217        }
2218        crate::GenericArgument::Const(_binding_0) => {
2219            v.visit_expr(_binding_0);
2220        }
2221        crate::GenericArgument::AssocType(_binding_0) => {
2222            v.visit_assoc_type(_binding_0);
2223        }
2224        crate::GenericArgument::AssocConst(_binding_0) => {
2225            v.visit_assoc_const(_binding_0);
2226        }
2227        crate::GenericArgument::Constraint(_binding_0) => {
2228            v.visit_constraint(_binding_0);
2229        }
2230    }
2231}
2232#[cfg(any(feature = "derive", feature = "full"))]
2233#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2234pub fn visit_generic_param<'ast, V>(v: &mut V, node: &'ast crate::GenericParam)
2235where
2236    V: Visit<'ast> + ?Sized,
2237{
2238    match node {
2239        crate::GenericParam::Lifetime(_binding_0) => {
2240            v.visit_lifetime_param(_binding_0);
2241        }
2242        crate::GenericParam::Type(_binding_0) => {
2243            v.visit_type_param(_binding_0);
2244        }
2245        crate::GenericParam::Const(_binding_0) => {
2246            v.visit_const_param(_binding_0);
2247        }
2248    }
2249}
2250#[cfg(any(feature = "derive", feature = "full"))]
2251#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2252pub fn visit_generics<'ast, V>(v: &mut V, node: &'ast crate::Generics)
2253where
2254    V: Visit<'ast> + ?Sized,
2255{
2256    skip!(node.lt_token);
2257    for el in Punctuated::pairs(&node.params) {
2258        let it = el.value();
2259        v.visit_generic_param(it);
2260    }
2261    skip!(node.gt_token);
2262    if let Some(it) = &node.where_clause {
2263        v.visit_where_clause(it);
2264    }
2265}
2266pub fn visit_ident<'ast, V>(v: &mut V, node: &'ast proc_macro2::Ident)
2267where
2268    V: Visit<'ast> + ?Sized,
2269{
2270    v.visit_span(&node.span());
2271}
2272#[cfg(feature = "full")]
2273#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2274pub fn visit_impl_item<'ast, V>(v: &mut V, node: &'ast crate::ImplItem)
2275where
2276    V: Visit<'ast> + ?Sized,
2277{
2278    match node {
2279        crate::ImplItem::Const(_binding_0) => {
2280            v.visit_impl_item_const(_binding_0);
2281        }
2282        crate::ImplItem::Fn(_binding_0) => {
2283            v.visit_impl_item_fn(_binding_0);
2284        }
2285        crate::ImplItem::Type(_binding_0) => {
2286            v.visit_impl_item_type(_binding_0);
2287        }
2288        crate::ImplItem::Macro(_binding_0) => {
2289            v.visit_impl_item_macro(_binding_0);
2290        }
2291        crate::ImplItem::Verbatim(_binding_0) => {
2292            v.visit_token_stream(_binding_0);
2293        }
2294    }
2295}
2296#[cfg(feature = "full")]
2297#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2298pub fn visit_impl_item_const<'ast, V>(v: &mut V, node: &'ast crate::ImplItemConst)
2299where
2300    V: Visit<'ast> + ?Sized,
2301{
2302    for it in &node.attrs {
2303        v.visit_attribute(it);
2304    }
2305    v.visit_visibility(&node.vis);
2306    skip!(node.defaultness);
2307    skip!(node.const_token);
2308    v.visit_ident(&node.ident);
2309    v.visit_generics(&node.generics);
2310    skip!(node.colon_token);
2311    v.visit_type(&node.ty);
2312    skip!(node.eq_token);
2313    v.visit_expr(&node.expr);
2314    skip!(node.semi_token);
2315}
2316#[cfg(feature = "full")]
2317#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2318pub fn visit_impl_item_fn<'ast, V>(v: &mut V, node: &'ast crate::ImplItemFn)
2319where
2320    V: Visit<'ast> + ?Sized,
2321{
2322    for it in &node.attrs {
2323        v.visit_attribute(it);
2324    }
2325    v.visit_visibility(&node.vis);
2326    skip!(node.defaultness);
2327    v.visit_signature(&node.sig);
2328    v.visit_block(&node.block);
2329}
2330#[cfg(feature = "full")]
2331#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2332pub fn visit_impl_item_macro<'ast, V>(v: &mut V, node: &'ast crate::ImplItemMacro)
2333where
2334    V: Visit<'ast> + ?Sized,
2335{
2336    for it in &node.attrs {
2337        v.visit_attribute(it);
2338    }
2339    v.visit_macro(&node.mac);
2340    skip!(node.semi_token);
2341}
2342#[cfg(feature = "full")]
2343#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2344pub fn visit_impl_item_type<'ast, V>(v: &mut V, node: &'ast crate::ImplItemType)
2345where
2346    V: Visit<'ast> + ?Sized,
2347{
2348    for it in &node.attrs {
2349        v.visit_attribute(it);
2350    }
2351    v.visit_visibility(&node.vis);
2352    skip!(node.defaultness);
2353    skip!(node.type_token);
2354    v.visit_ident(&node.ident);
2355    v.visit_generics(&node.generics);
2356    skip!(node.eq_token);
2357    v.visit_type(&node.ty);
2358    skip!(node.semi_token);
2359}
2360#[cfg(feature = "full")]
2361#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2362pub fn visit_impl_restriction<'ast, V>(v: &mut V, node: &'ast crate::ImplRestriction)
2363where
2364    V: Visit<'ast> + ?Sized,
2365{
2366    match *node {}
2367}
2368#[cfg(any(feature = "derive", feature = "full"))]
2369#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2370pub fn visit_index<'ast, V>(v: &mut V, node: &'ast crate::Index)
2371where
2372    V: Visit<'ast> + ?Sized,
2373{
2374    skip!(node.index);
2375    v.visit_span(&node.span);
2376}
2377#[cfg(feature = "full")]
2378#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2379pub fn visit_item<'ast, V>(v: &mut V, node: &'ast crate::Item)
2380where
2381    V: Visit<'ast> + ?Sized,
2382{
2383    match node {
2384        crate::Item::Const(_binding_0) => {
2385            v.visit_item_const(_binding_0);
2386        }
2387        crate::Item::Enum(_binding_0) => {
2388            v.visit_item_enum(_binding_0);
2389        }
2390        crate::Item::ExternCrate(_binding_0) => {
2391            v.visit_item_extern_crate(_binding_0);
2392        }
2393        crate::Item::Fn(_binding_0) => {
2394            v.visit_item_fn(_binding_0);
2395        }
2396        crate::Item::ForeignMod(_binding_0) => {
2397            v.visit_item_foreign_mod(_binding_0);
2398        }
2399        crate::Item::Impl(_binding_0) => {
2400            v.visit_item_impl(_binding_0);
2401        }
2402        crate::Item::Macro(_binding_0) => {
2403            v.visit_item_macro(_binding_0);
2404        }
2405        crate::Item::Mod(_binding_0) => {
2406            v.visit_item_mod(_binding_0);
2407        }
2408        crate::Item::Static(_binding_0) => {
2409            v.visit_item_static(_binding_0);
2410        }
2411        crate::Item::Struct(_binding_0) => {
2412            v.visit_item_struct(_binding_0);
2413        }
2414        crate::Item::Trait(_binding_0) => {
2415            v.visit_item_trait(_binding_0);
2416        }
2417        crate::Item::TraitAlias(_binding_0) => {
2418            v.visit_item_trait_alias(_binding_0);
2419        }
2420        crate::Item::Type(_binding_0) => {
2421            v.visit_item_type(_binding_0);
2422        }
2423        crate::Item::Union(_binding_0) => {
2424            v.visit_item_union(_binding_0);
2425        }
2426        crate::Item::Use(_binding_0) => {
2427            v.visit_item_use(_binding_0);
2428        }
2429        crate::Item::Verbatim(_binding_0) => {
2430            v.visit_token_stream(_binding_0);
2431        }
2432    }
2433}
2434#[cfg(feature = "full")]
2435#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2436pub fn visit_item_const<'ast, V>(v: &mut V, node: &'ast crate::ItemConst)
2437where
2438    V: Visit<'ast> + ?Sized,
2439{
2440    for it in &node.attrs {
2441        v.visit_attribute(it);
2442    }
2443    v.visit_visibility(&node.vis);
2444    skip!(node.const_token);
2445    v.visit_ident(&node.ident);
2446    v.visit_generics(&node.generics);
2447    skip!(node.colon_token);
2448    v.visit_type(&*node.ty);
2449    skip!(node.eq_token);
2450    v.visit_expr(&*node.expr);
2451    skip!(node.semi_token);
2452}
2453#[cfg(feature = "full")]
2454#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2455pub fn visit_item_enum<'ast, V>(v: &mut V, node: &'ast crate::ItemEnum)
2456where
2457    V: Visit<'ast> + ?Sized,
2458{
2459    for it in &node.attrs {
2460        v.visit_attribute(it);
2461    }
2462    v.visit_visibility(&node.vis);
2463    skip!(node.enum_token);
2464    v.visit_ident(&node.ident);
2465    v.visit_generics(&node.generics);
2466    skip!(node.brace_token);
2467    for el in Punctuated::pairs(&node.variants) {
2468        let it = el.value();
2469        v.visit_variant(it);
2470    }
2471}
2472#[cfg(feature = "full")]
2473#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2474pub fn visit_item_extern_crate<'ast, V>(v: &mut V, node: &'ast crate::ItemExternCrate)
2475where
2476    V: Visit<'ast> + ?Sized,
2477{
2478    for it in &node.attrs {
2479        v.visit_attribute(it);
2480    }
2481    v.visit_visibility(&node.vis);
2482    skip!(node.extern_token);
2483    skip!(node.crate_token);
2484    v.visit_ident(&node.ident);
2485    if let Some(it) = &node.rename {
2486        skip!((it).0);
2487        v.visit_ident(&(it).1);
2488    }
2489    skip!(node.semi_token);
2490}
2491#[cfg(feature = "full")]
2492#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2493pub fn visit_item_fn<'ast, V>(v: &mut V, node: &'ast crate::ItemFn)
2494where
2495    V: Visit<'ast> + ?Sized,
2496{
2497    for it in &node.attrs {
2498        v.visit_attribute(it);
2499    }
2500    v.visit_visibility(&node.vis);
2501    v.visit_signature(&node.sig);
2502    v.visit_block(&*node.block);
2503}
2504#[cfg(feature = "full")]
2505#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2506pub fn visit_item_foreign_mod<'ast, V>(v: &mut V, node: &'ast crate::ItemForeignMod)
2507where
2508    V: Visit<'ast> + ?Sized,
2509{
2510    for it in &node.attrs {
2511        v.visit_attribute(it);
2512    }
2513    skip!(node.unsafety);
2514    v.visit_abi(&node.abi);
2515    skip!(node.brace_token);
2516    for it in &node.items {
2517        v.visit_foreign_item(it);
2518    }
2519}
2520#[cfg(feature = "full")]
2521#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2522pub fn visit_item_impl<'ast, V>(v: &mut V, node: &'ast crate::ItemImpl)
2523where
2524    V: Visit<'ast> + ?Sized,
2525{
2526    for it in &node.attrs {
2527        v.visit_attribute(it);
2528    }
2529    skip!(node.defaultness);
2530    skip!(node.unsafety);
2531    skip!(node.impl_token);
2532    v.visit_generics(&node.generics);
2533    if let Some(it) = &node.trait_ {
2534        skip!((it).0);
2535        v.visit_path(&(it).1);
2536        skip!((it).2);
2537    }
2538    v.visit_type(&*node.self_ty);
2539    skip!(node.brace_token);
2540    for it in &node.items {
2541        v.visit_impl_item(it);
2542    }
2543}
2544#[cfg(feature = "full")]
2545#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2546pub fn visit_item_macro<'ast, V>(v: &mut V, node: &'ast crate::ItemMacro)
2547where
2548    V: Visit<'ast> + ?Sized,
2549{
2550    for it in &node.attrs {
2551        v.visit_attribute(it);
2552    }
2553    if let Some(it) = &node.ident {
2554        v.visit_ident(it);
2555    }
2556    v.visit_macro(&node.mac);
2557    skip!(node.semi_token);
2558}
2559#[cfg(feature = "full")]
2560#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2561pub fn visit_item_mod<'ast, V>(v: &mut V, node: &'ast crate::ItemMod)
2562where
2563    V: Visit<'ast> + ?Sized,
2564{
2565    for it in &node.attrs {
2566        v.visit_attribute(it);
2567    }
2568    v.visit_visibility(&node.vis);
2569    skip!(node.unsafety);
2570    skip!(node.mod_token);
2571    v.visit_ident(&node.ident);
2572    if let Some(it) = &node.content {
2573        skip!((it).0);
2574        for it in &(it).1 {
2575            v.visit_item(it);
2576        }
2577    }
2578    skip!(node.semi);
2579}
2580#[cfg(feature = "full")]
2581#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2582pub fn visit_item_static<'ast, V>(v: &mut V, node: &'ast crate::ItemStatic)
2583where
2584    V: Visit<'ast> + ?Sized,
2585{
2586    for it in &node.attrs {
2587        v.visit_attribute(it);
2588    }
2589    v.visit_visibility(&node.vis);
2590    skip!(node.static_token);
2591    v.visit_static_mutability(&node.mutability);
2592    v.visit_ident(&node.ident);
2593    skip!(node.colon_token);
2594    v.visit_type(&*node.ty);
2595    skip!(node.eq_token);
2596    v.visit_expr(&*node.expr);
2597    skip!(node.semi_token);
2598}
2599#[cfg(feature = "full")]
2600#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2601pub fn visit_item_struct<'ast, V>(v: &mut V, node: &'ast crate::ItemStruct)
2602where
2603    V: Visit<'ast> + ?Sized,
2604{
2605    for it in &node.attrs {
2606        v.visit_attribute(it);
2607    }
2608    v.visit_visibility(&node.vis);
2609    skip!(node.struct_token);
2610    v.visit_ident(&node.ident);
2611    v.visit_generics(&node.generics);
2612    v.visit_fields(&node.fields);
2613    skip!(node.semi_token);
2614}
2615#[cfg(feature = "full")]
2616#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2617pub fn visit_item_trait<'ast, V>(v: &mut V, node: &'ast crate::ItemTrait)
2618where
2619    V: Visit<'ast> + ?Sized,
2620{
2621    for it in &node.attrs {
2622        v.visit_attribute(it);
2623    }
2624    v.visit_visibility(&node.vis);
2625    skip!(node.unsafety);
2626    skip!(node.auto_token);
2627    if let Some(it) = &node.restriction {
2628        v.visit_impl_restriction(it);
2629    }
2630    skip!(node.trait_token);
2631    v.visit_ident(&node.ident);
2632    v.visit_generics(&node.generics);
2633    skip!(node.colon_token);
2634    for el in Punctuated::pairs(&node.supertraits) {
2635        let it = el.value();
2636        v.visit_type_param_bound(it);
2637    }
2638    skip!(node.brace_token);
2639    for it in &node.items {
2640        v.visit_trait_item(it);
2641    }
2642}
2643#[cfg(feature = "full")]
2644#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2645pub fn visit_item_trait_alias<'ast, V>(v: &mut V, node: &'ast crate::ItemTraitAlias)
2646where
2647    V: Visit<'ast> + ?Sized,
2648{
2649    for it in &node.attrs {
2650        v.visit_attribute(it);
2651    }
2652    v.visit_visibility(&node.vis);
2653    skip!(node.trait_token);
2654    v.visit_ident(&node.ident);
2655    v.visit_generics(&node.generics);
2656    skip!(node.eq_token);
2657    for el in Punctuated::pairs(&node.bounds) {
2658        let it = el.value();
2659        v.visit_type_param_bound(it);
2660    }
2661    skip!(node.semi_token);
2662}
2663#[cfg(feature = "full")]
2664#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2665pub fn visit_item_type<'ast, V>(v: &mut V, node: &'ast crate::ItemType)
2666where
2667    V: Visit<'ast> + ?Sized,
2668{
2669    for it in &node.attrs {
2670        v.visit_attribute(it);
2671    }
2672    v.visit_visibility(&node.vis);
2673    skip!(node.type_token);
2674    v.visit_ident(&node.ident);
2675    v.visit_generics(&node.generics);
2676    skip!(node.eq_token);
2677    v.visit_type(&*node.ty);
2678    skip!(node.semi_token);
2679}
2680#[cfg(feature = "full")]
2681#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2682pub fn visit_item_union<'ast, V>(v: &mut V, node: &'ast crate::ItemUnion)
2683where
2684    V: Visit<'ast> + ?Sized,
2685{
2686    for it in &node.attrs {
2687        v.visit_attribute(it);
2688    }
2689    v.visit_visibility(&node.vis);
2690    skip!(node.union_token);
2691    v.visit_ident(&node.ident);
2692    v.visit_generics(&node.generics);
2693    v.visit_fields_named(&node.fields);
2694}
2695#[cfg(feature = "full")]
2696#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2697pub fn visit_item_use<'ast, V>(v: &mut V, node: &'ast crate::ItemUse)
2698where
2699    V: Visit<'ast> + ?Sized,
2700{
2701    for it in &node.attrs {
2702        v.visit_attribute(it);
2703    }
2704    v.visit_visibility(&node.vis);
2705    skip!(node.use_token);
2706    skip!(node.leading_colon);
2707    v.visit_use_tree(&node.tree);
2708    skip!(node.semi_token);
2709}
2710#[cfg(feature = "full")]
2711#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2712pub fn visit_label<'ast, V>(v: &mut V, node: &'ast crate::Label)
2713where
2714    V: Visit<'ast> + ?Sized,
2715{
2716    v.visit_lifetime(&node.name);
2717    skip!(node.colon_token);
2718}
2719pub fn visit_lifetime<'ast, V>(v: &mut V, node: &'ast crate::Lifetime)
2720where
2721    V: Visit<'ast> + ?Sized,
2722{
2723    v.visit_span(&node.apostrophe);
2724    v.visit_ident(&node.ident);
2725}
2726#[cfg(any(feature = "derive", feature = "full"))]
2727#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2728pub fn visit_lifetime_param<'ast, V>(v: &mut V, node: &'ast crate::LifetimeParam)
2729where
2730    V: Visit<'ast> + ?Sized,
2731{
2732    for it in &node.attrs {
2733        v.visit_attribute(it);
2734    }
2735    v.visit_lifetime(&node.lifetime);
2736    skip!(node.colon_token);
2737    for el in Punctuated::pairs(&node.bounds) {
2738        let it = el.value();
2739        v.visit_lifetime(it);
2740    }
2741}
2742pub fn visit_lit<'ast, V>(v: &mut V, node: &'ast crate::Lit)
2743where
2744    V: Visit<'ast> + ?Sized,
2745{
2746    match node {
2747        crate::Lit::Str(_binding_0) => {
2748            v.visit_lit_str(_binding_0);
2749        }
2750        crate::Lit::ByteStr(_binding_0) => {
2751            v.visit_lit_byte_str(_binding_0);
2752        }
2753        crate::Lit::CStr(_binding_0) => {
2754            v.visit_lit_cstr(_binding_0);
2755        }
2756        crate::Lit::Byte(_binding_0) => {
2757            v.visit_lit_byte(_binding_0);
2758        }
2759        crate::Lit::Char(_binding_0) => {
2760            v.visit_lit_char(_binding_0);
2761        }
2762        crate::Lit::Int(_binding_0) => {
2763            v.visit_lit_int(_binding_0);
2764        }
2765        crate::Lit::Float(_binding_0) => {
2766            v.visit_lit_float(_binding_0);
2767        }
2768        crate::Lit::Bool(_binding_0) => {
2769            v.visit_lit_bool(_binding_0);
2770        }
2771        crate::Lit::Verbatim(_binding_0) => {
2772            skip!(_binding_0);
2773        }
2774    }
2775}
2776pub fn visit_lit_bool<'ast, V>(v: &mut V, node: &'ast crate::LitBool)
2777where
2778    V: Visit<'ast> + ?Sized,
2779{
2780    skip!(node.value);
2781    v.visit_span(&node.span);
2782}
2783pub fn visit_lit_byte<'ast, V>(v: &mut V, node: &'ast crate::LitByte)
2784where
2785    V: Visit<'ast> + ?Sized,
2786{}
2787pub fn visit_lit_byte_str<'ast, V>(v: &mut V, node: &'ast crate::LitByteStr)
2788where
2789    V: Visit<'ast> + ?Sized,
2790{}
2791pub fn visit_lit_cstr<'ast, V>(v: &mut V, node: &'ast crate::LitCStr)
2792where
2793    V: Visit<'ast> + ?Sized,
2794{}
2795pub fn visit_lit_char<'ast, V>(v: &mut V, node: &'ast crate::LitChar)
2796where
2797    V: Visit<'ast> + ?Sized,
2798{}
2799pub fn visit_lit_float<'ast, V>(v: &mut V, node: &'ast crate::LitFloat)
2800where
2801    V: Visit<'ast> + ?Sized,
2802{}
2803pub fn visit_lit_int<'ast, V>(v: &mut V, node: &'ast crate::LitInt)
2804where
2805    V: Visit<'ast> + ?Sized,
2806{}
2807pub fn visit_lit_str<'ast, V>(v: &mut V, node: &'ast crate::LitStr)
2808where
2809    V: Visit<'ast> + ?Sized,
2810{}
2811#[cfg(feature = "full")]
2812#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2813pub fn visit_local<'ast, V>(v: &mut V, node: &'ast crate::Local)
2814where
2815    V: Visit<'ast> + ?Sized,
2816{
2817    for it in &node.attrs {
2818        v.visit_attribute(it);
2819    }
2820    skip!(node.let_token);
2821    v.visit_pat(&node.pat);
2822    if let Some(it) = &node.init {
2823        v.visit_local_init(it);
2824    }
2825    skip!(node.semi_token);
2826}
2827#[cfg(feature = "full")]
2828#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2829pub fn visit_local_init<'ast, V>(v: &mut V, node: &'ast crate::LocalInit)
2830where
2831    V: Visit<'ast> + ?Sized,
2832{
2833    skip!(node.eq_token);
2834    v.visit_expr(&*node.expr);
2835    if let Some(it) = &node.diverge {
2836        skip!((it).0);
2837        v.visit_expr(&*(it).1);
2838    }
2839}
2840#[cfg(any(feature = "derive", feature = "full"))]
2841#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2842pub fn visit_macro<'ast, V>(v: &mut V, node: &'ast crate::Macro)
2843where
2844    V: Visit<'ast> + ?Sized,
2845{
2846    v.visit_path(&node.path);
2847    skip!(node.bang_token);
2848    v.visit_macro_delimiter(&node.delimiter);
2849    v.visit_token_stream(&node.tokens);
2850}
2851#[cfg(any(feature = "derive", feature = "full"))]
2852#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2853pub fn visit_macro_delimiter<'ast, V>(v: &mut V, node: &'ast crate::MacroDelimiter)
2854where
2855    V: Visit<'ast> + ?Sized,
2856{
2857    match node {
2858        crate::MacroDelimiter::Paren(_binding_0) => {
2859            skip!(_binding_0);
2860        }
2861        crate::MacroDelimiter::Brace(_binding_0) => {
2862            skip!(_binding_0);
2863        }
2864        crate::MacroDelimiter::Bracket(_binding_0) => {
2865            skip!(_binding_0);
2866        }
2867    }
2868}
2869#[cfg(any(feature = "derive", feature = "full"))]
2870#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2871pub fn visit_member<'ast, V>(v: &mut V, node: &'ast crate::Member)
2872where
2873    V: Visit<'ast> + ?Sized,
2874{
2875    match node {
2876        crate::Member::Named(_binding_0) => {
2877            v.visit_ident(_binding_0);
2878        }
2879        crate::Member::Unnamed(_binding_0) => {
2880            v.visit_index(_binding_0);
2881        }
2882    }
2883}
2884#[cfg(any(feature = "derive", feature = "full"))]
2885#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2886pub fn visit_meta<'ast, V>(v: &mut V, node: &'ast crate::Meta)
2887where
2888    V: Visit<'ast> + ?Sized,
2889{
2890    match node {
2891        crate::Meta::Path(_binding_0) => {
2892            v.visit_path(_binding_0);
2893        }
2894        crate::Meta::List(_binding_0) => {
2895            v.visit_meta_list(_binding_0);
2896        }
2897        crate::Meta::NameValue(_binding_0) => {
2898            v.visit_meta_name_value(_binding_0);
2899        }
2900    }
2901}
2902#[cfg(any(feature = "derive", feature = "full"))]
2903#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2904pub fn visit_meta_list<'ast, V>(v: &mut V, node: &'ast crate::MetaList)
2905where
2906    V: Visit<'ast> + ?Sized,
2907{
2908    v.visit_path(&node.path);
2909    v.visit_macro_delimiter(&node.delimiter);
2910    v.visit_token_stream(&node.tokens);
2911}
2912#[cfg(any(feature = "derive", feature = "full"))]
2913#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2914pub fn visit_meta_name_value<'ast, V>(v: &mut V, node: &'ast crate::MetaNameValue)
2915where
2916    V: Visit<'ast> + ?Sized,
2917{
2918    v.visit_path(&node.path);
2919    skip!(node.eq_token);
2920    v.visit_expr(&node.value);
2921}
2922#[cfg(any(feature = "derive", feature = "full"))]
2923#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
2924pub fn visit_parenthesized_generic_arguments<'ast, V>(
2925    v: &mut V,
2926    node: &'ast crate::ParenthesizedGenericArguments,
2927)
2928where
2929    V: Visit<'ast> + ?Sized,
2930{
2931    skip!(node.paren_token);
2932    for el in Punctuated::pairs(&node.inputs) {
2933        let it = el.value();
2934        v.visit_type(it);
2935    }
2936    v.visit_return_type(&node.output);
2937}
2938#[cfg(feature = "full")]
2939#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
2940pub fn visit_pat<'ast, V>(v: &mut V, node: &'ast crate::Pat)
2941where
2942    V: Visit<'ast> + ?Sized,
2943{
2944    match node {
2945        crate::Pat::Const(_binding_0) => {
2946            v.visit_expr_const(_binding_0);
2947        }
2948        crate::Pat::Ident(_binding_0) => {
2949            v.visit_pat_ident(_binding_0);
2950        }
2951        crate::Pat::Lit(_binding_0) => {
2952            v.visit_expr_lit(_binding_0);
2953        }
2954        crate::Pat::Macro(_binding_0) => {
2955            v.visit_expr_macro(_binding_0);
2956        }
2957        crate::Pat::Or(_binding_0) => {
2958            v.visit_pat_or(_binding_0);
2959        }
2960        crate::Pat::Paren(_binding_0) => {
2961            v.visit_pat_paren(_binding_0);
2962        }
2963        crate::Pat::Path(_binding_0) => {
2964            v.visit_expr_path(_binding_0);
2965        }
2966        crate::Pat::Range(_binding_0) => {
2967            v.visit_expr_range(_binding_0);
2968        }
2969        crate::Pat::Reference(_binding_0) => {
2970            v.visit_pat_reference(_binding_0);
2971        }
2972        crate::Pat::Rest(_binding_0) => {
2973            v.visit_pat_rest(_binding_0);
2974        }
2975        crate::Pat::Slice(_binding_0) => {
2976            v.visit_pat_slice(_binding_0);
2977        }
2978        crate::Pat::Struct(_binding_0) => {
2979            v.visit_pat_struct(_binding_0);
2980        }
2981        crate::Pat::Tuple(_binding_0) => {
2982            v.visit_pat_tuple(_binding_0);
2983        }
2984        crate::Pat::TupleStruct(_binding_0) => {
2985            v.visit_pat_tuple_struct(_binding_0);
2986        }
2987        crate::Pat::Type(_binding_0) => {
2988            v.visit_pat_type(_binding_0);
2989        }
2990        crate::Pat::Verbatim(_binding_0) => {
2991            v.visit_token_stream(_binding_0);
2992        }
2993        crate::Pat::Wild(_binding_0) => {
2994            v.visit_pat_wild(_binding_0);
2995        }
2996    }
2997}
2998#[cfg(feature = "full")]
2999#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3000pub fn visit_pat_ident<'ast, V>(v: &mut V, node: &'ast crate::PatIdent)
3001where
3002    V: Visit<'ast> + ?Sized,
3003{
3004    for it in &node.attrs {
3005        v.visit_attribute(it);
3006    }
3007    skip!(node.by_ref);
3008    skip!(node.mutability);
3009    v.visit_ident(&node.ident);
3010    if let Some(it) = &node.subpat {
3011        skip!((it).0);
3012        v.visit_pat(&*(it).1);
3013    }
3014}
3015#[cfg(feature = "full")]
3016#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3017pub fn visit_pat_or<'ast, V>(v: &mut V, node: &'ast crate::PatOr)
3018where
3019    V: Visit<'ast> + ?Sized,
3020{
3021    for it in &node.attrs {
3022        v.visit_attribute(it);
3023    }
3024    skip!(node.leading_vert);
3025    for el in Punctuated::pairs(&node.cases) {
3026        let it = el.value();
3027        v.visit_pat(it);
3028    }
3029}
3030#[cfg(feature = "full")]
3031#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3032pub fn visit_pat_paren<'ast, V>(v: &mut V, node: &'ast crate::PatParen)
3033where
3034    V: Visit<'ast> + ?Sized,
3035{
3036    for it in &node.attrs {
3037        v.visit_attribute(it);
3038    }
3039    skip!(node.paren_token);
3040    v.visit_pat(&*node.pat);
3041}
3042#[cfg(feature = "full")]
3043#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3044pub fn visit_pat_reference<'ast, V>(v: &mut V, node: &'ast crate::PatReference)
3045where
3046    V: Visit<'ast> + ?Sized,
3047{
3048    for it in &node.attrs {
3049        v.visit_attribute(it);
3050    }
3051    skip!(node.and_token);
3052    skip!(node.mutability);
3053    v.visit_pat(&*node.pat);
3054}
3055#[cfg(feature = "full")]
3056#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3057pub fn visit_pat_rest<'ast, V>(v: &mut V, node: &'ast crate::PatRest)
3058where
3059    V: Visit<'ast> + ?Sized,
3060{
3061    for it in &node.attrs {
3062        v.visit_attribute(it);
3063    }
3064    skip!(node.dot2_token);
3065}
3066#[cfg(feature = "full")]
3067#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3068pub fn visit_pat_slice<'ast, V>(v: &mut V, node: &'ast crate::PatSlice)
3069where
3070    V: Visit<'ast> + ?Sized,
3071{
3072    for it in &node.attrs {
3073        v.visit_attribute(it);
3074    }
3075    skip!(node.bracket_token);
3076    for el in Punctuated::pairs(&node.elems) {
3077        let it = el.value();
3078        v.visit_pat(it);
3079    }
3080}
3081#[cfg(feature = "full")]
3082#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3083pub fn visit_pat_struct<'ast, V>(v: &mut V, node: &'ast crate::PatStruct)
3084where
3085    V: Visit<'ast> + ?Sized,
3086{
3087    for it in &node.attrs {
3088        v.visit_attribute(it);
3089    }
3090    if let Some(it) = &node.qself {
3091        v.visit_qself(it);
3092    }
3093    v.visit_path(&node.path);
3094    skip!(node.brace_token);
3095    for el in Punctuated::pairs(&node.fields) {
3096        let it = el.value();
3097        v.visit_field_pat(it);
3098    }
3099    if let Some(it) = &node.rest {
3100        v.visit_pat_rest(it);
3101    }
3102}
3103#[cfg(feature = "full")]
3104#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3105pub fn visit_pat_tuple<'ast, V>(v: &mut V, node: &'ast crate::PatTuple)
3106where
3107    V: Visit<'ast> + ?Sized,
3108{
3109    for it in &node.attrs {
3110        v.visit_attribute(it);
3111    }
3112    skip!(node.paren_token);
3113    for el in Punctuated::pairs(&node.elems) {
3114        let it = el.value();
3115        v.visit_pat(it);
3116    }
3117}
3118#[cfg(feature = "full")]
3119#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3120pub fn visit_pat_tuple_struct<'ast, V>(v: &mut V, node: &'ast crate::PatTupleStruct)
3121where
3122    V: Visit<'ast> + ?Sized,
3123{
3124    for it in &node.attrs {
3125        v.visit_attribute(it);
3126    }
3127    if let Some(it) = &node.qself {
3128        v.visit_qself(it);
3129    }
3130    v.visit_path(&node.path);
3131    skip!(node.paren_token);
3132    for el in Punctuated::pairs(&node.elems) {
3133        let it = el.value();
3134        v.visit_pat(it);
3135    }
3136}
3137#[cfg(feature = "full")]
3138#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3139pub fn visit_pat_type<'ast, V>(v: &mut V, node: &'ast crate::PatType)
3140where
3141    V: Visit<'ast> + ?Sized,
3142{
3143    for it in &node.attrs {
3144        v.visit_attribute(it);
3145    }
3146    v.visit_pat(&*node.pat);
3147    skip!(node.colon_token);
3148    v.visit_type(&*node.ty);
3149}
3150#[cfg(feature = "full")]
3151#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3152pub fn visit_pat_wild<'ast, V>(v: &mut V, node: &'ast crate::PatWild)
3153where
3154    V: Visit<'ast> + ?Sized,
3155{
3156    for it in &node.attrs {
3157        v.visit_attribute(it);
3158    }
3159    skip!(node.underscore_token);
3160}
3161#[cfg(any(feature = "derive", feature = "full"))]
3162#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3163pub fn visit_path<'ast, V>(v: &mut V, node: &'ast crate::Path)
3164where
3165    V: Visit<'ast> + ?Sized,
3166{
3167    skip!(node.leading_colon);
3168    for el in Punctuated::pairs(&node.segments) {
3169        let it = el.value();
3170        v.visit_path_segment(it);
3171    }
3172}
3173#[cfg(any(feature = "derive", feature = "full"))]
3174#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3175pub fn visit_path_arguments<'ast, V>(v: &mut V, node: &'ast crate::PathArguments)
3176where
3177    V: Visit<'ast> + ?Sized,
3178{
3179    match node {
3180        crate::PathArguments::None => {}
3181        crate::PathArguments::AngleBracketed(_binding_0) => {
3182            v.visit_angle_bracketed_generic_arguments(_binding_0);
3183        }
3184        crate::PathArguments::Parenthesized(_binding_0) => {
3185            v.visit_parenthesized_generic_arguments(_binding_0);
3186        }
3187    }
3188}
3189#[cfg(any(feature = "derive", feature = "full"))]
3190#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3191pub fn visit_path_segment<'ast, V>(v: &mut V, node: &'ast crate::PathSegment)
3192where
3193    V: Visit<'ast> + ?Sized,
3194{
3195    v.visit_ident(&node.ident);
3196    v.visit_path_arguments(&node.arguments);
3197}
3198#[cfg(feature = "full")]
3199#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3200pub fn visit_pointer_mutability<'ast, V>(v: &mut V, node: &'ast crate::PointerMutability)
3201where
3202    V: Visit<'ast> + ?Sized,
3203{
3204    match node {
3205        crate::PointerMutability::Const(_binding_0) => {
3206            skip!(_binding_0);
3207        }
3208        crate::PointerMutability::Mut(_binding_0) => {
3209            skip!(_binding_0);
3210        }
3211    }
3212}
3213#[cfg(feature = "full")]
3214#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3215pub fn visit_precise_capture<'ast, V>(v: &mut V, node: &'ast crate::PreciseCapture)
3216where
3217    V: Visit<'ast> + ?Sized,
3218{
3219    skip!(node.use_token);
3220    skip!(node.lt_token);
3221    for el in Punctuated::pairs(&node.params) {
3222        let it = el.value();
3223        v.visit_captured_param(it);
3224    }
3225    skip!(node.gt_token);
3226}
3227#[cfg(any(feature = "derive", feature = "full"))]
3228#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3229pub fn visit_predicate_lifetime<'ast, V>(v: &mut V, node: &'ast crate::PredicateLifetime)
3230where
3231    V: Visit<'ast> + ?Sized,
3232{
3233    v.visit_lifetime(&node.lifetime);
3234    skip!(node.colon_token);
3235    for el in Punctuated::pairs(&node.bounds) {
3236        let it = el.value();
3237        v.visit_lifetime(it);
3238    }
3239}
3240#[cfg(any(feature = "derive", feature = "full"))]
3241#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3242pub fn visit_predicate_type<'ast, V>(v: &mut V, node: &'ast crate::PredicateType)
3243where
3244    V: Visit<'ast> + ?Sized,
3245{
3246    if let Some(it) = &node.lifetimes {
3247        v.visit_bound_lifetimes(it);
3248    }
3249    v.visit_type(&node.bounded_ty);
3250    skip!(node.colon_token);
3251    for el in Punctuated::pairs(&node.bounds) {
3252        let it = el.value();
3253        v.visit_type_param_bound(it);
3254    }
3255}
3256#[cfg(any(feature = "derive", feature = "full"))]
3257#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3258pub fn visit_qself<'ast, V>(v: &mut V, node: &'ast crate::QSelf)
3259where
3260    V: Visit<'ast> + ?Sized,
3261{
3262    skip!(node.lt_token);
3263    v.visit_type(&*node.ty);
3264    skip!(node.position);
3265    skip!(node.as_token);
3266    skip!(node.gt_token);
3267}
3268#[cfg(feature = "full")]
3269#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3270pub fn visit_range_limits<'ast, V>(v: &mut V, node: &'ast crate::RangeLimits)
3271where
3272    V: Visit<'ast> + ?Sized,
3273{
3274    match node {
3275        crate::RangeLimits::HalfOpen(_binding_0) => {
3276            skip!(_binding_0);
3277        }
3278        crate::RangeLimits::Closed(_binding_0) => {
3279            skip!(_binding_0);
3280        }
3281    }
3282}
3283#[cfg(feature = "full")]
3284#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3285pub fn visit_receiver<'ast, V>(v: &mut V, node: &'ast crate::Receiver)
3286where
3287    V: Visit<'ast> + ?Sized,
3288{
3289    for it in &node.attrs {
3290        v.visit_attribute(it);
3291    }
3292    if let Some(it) = &node.reference {
3293        skip!((it).0);
3294        if let Some(it) = &(it).1 {
3295            v.visit_lifetime(it);
3296        }
3297    }
3298    skip!(node.mutability);
3299    skip!(node.self_token);
3300    skip!(node.colon_token);
3301    v.visit_type(&*node.ty);
3302}
3303#[cfg(any(feature = "derive", feature = "full"))]
3304#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3305pub fn visit_return_type<'ast, V>(v: &mut V, node: &'ast crate::ReturnType)
3306where
3307    V: Visit<'ast> + ?Sized,
3308{
3309    match node {
3310        crate::ReturnType::Default => {}
3311        crate::ReturnType::Type(_binding_0, _binding_1) => {
3312            skip!(_binding_0);
3313            v.visit_type(&**_binding_1);
3314        }
3315    }
3316}
3317#[cfg(feature = "full")]
3318#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3319pub fn visit_signature<'ast, V>(v: &mut V, node: &'ast crate::Signature)
3320where
3321    V: Visit<'ast> + ?Sized,
3322{
3323    skip!(node.constness);
3324    skip!(node.asyncness);
3325    skip!(node.unsafety);
3326    if let Some(it) = &node.abi {
3327        v.visit_abi(it);
3328    }
3329    skip!(node.fn_token);
3330    v.visit_ident(&node.ident);
3331    v.visit_generics(&node.generics);
3332    skip!(node.paren_token);
3333    for el in Punctuated::pairs(&node.inputs) {
3334        let it = el.value();
3335        v.visit_fn_arg(it);
3336    }
3337    if let Some(it) = &node.variadic {
3338        v.visit_variadic(it);
3339    }
3340    v.visit_return_type(&node.output);
3341}
3342pub fn visit_span<'ast, V>(v: &mut V, node: &proc_macro2::Span)
3343where
3344    V: Visit<'ast> + ?Sized,
3345{}
3346#[cfg(feature = "full")]
3347#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3348pub fn visit_static_mutability<'ast, V>(v: &mut V, node: &'ast crate::StaticMutability)
3349where
3350    V: Visit<'ast> + ?Sized,
3351{
3352    match node {
3353        crate::StaticMutability::Mut(_binding_0) => {
3354            skip!(_binding_0);
3355        }
3356        crate::StaticMutability::None => {}
3357    }
3358}
3359#[cfg(feature = "full")]
3360#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3361pub fn visit_stmt<'ast, V>(v: &mut V, node: &'ast crate::Stmt)
3362where
3363    V: Visit<'ast> + ?Sized,
3364{
3365    match node {
3366        crate::Stmt::Local(_binding_0) => {
3367            v.visit_local(_binding_0);
3368        }
3369        crate::Stmt::Item(_binding_0) => {
3370            v.visit_item(_binding_0);
3371        }
3372        crate::Stmt::Expr(_binding_0, _binding_1) => {
3373            v.visit_expr(_binding_0);
3374            skip!(_binding_1);
3375        }
3376        crate::Stmt::Macro(_binding_0) => {
3377            v.visit_stmt_macro(_binding_0);
3378        }
3379    }
3380}
3381#[cfg(feature = "full")]
3382#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3383pub fn visit_stmt_macro<'ast, V>(v: &mut V, node: &'ast crate::StmtMacro)
3384where
3385    V: Visit<'ast> + ?Sized,
3386{
3387    for it in &node.attrs {
3388        v.visit_attribute(it);
3389    }
3390    v.visit_macro(&node.mac);
3391    skip!(node.semi_token);
3392}
3393#[cfg(any(feature = "derive", feature = "full"))]
3394#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3395pub fn visit_trait_bound<'ast, V>(v: &mut V, node: &'ast crate::TraitBound)
3396where
3397    V: Visit<'ast> + ?Sized,
3398{
3399    skip!(node.paren_token);
3400    v.visit_trait_bound_modifier(&node.modifier);
3401    if let Some(it) = &node.lifetimes {
3402        v.visit_bound_lifetimes(it);
3403    }
3404    v.visit_path(&node.path);
3405}
3406#[cfg(any(feature = "derive", feature = "full"))]
3407#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3408pub fn visit_trait_bound_modifier<'ast, V>(
3409    v: &mut V,
3410    node: &'ast crate::TraitBoundModifier,
3411)
3412where
3413    V: Visit<'ast> + ?Sized,
3414{
3415    match node {
3416        crate::TraitBoundModifier::None => {}
3417        crate::TraitBoundModifier::Maybe(_binding_0) => {
3418            skip!(_binding_0);
3419        }
3420    }
3421}
3422#[cfg(feature = "full")]
3423#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3424pub fn visit_trait_item<'ast, V>(v: &mut V, node: &'ast crate::TraitItem)
3425where
3426    V: Visit<'ast> + ?Sized,
3427{
3428    match node {
3429        crate::TraitItem::Const(_binding_0) => {
3430            v.visit_trait_item_const(_binding_0);
3431        }
3432        crate::TraitItem::Fn(_binding_0) => {
3433            v.visit_trait_item_fn(_binding_0);
3434        }
3435        crate::TraitItem::Type(_binding_0) => {
3436            v.visit_trait_item_type(_binding_0);
3437        }
3438        crate::TraitItem::Macro(_binding_0) => {
3439            v.visit_trait_item_macro(_binding_0);
3440        }
3441        crate::TraitItem::Verbatim(_binding_0) => {
3442            v.visit_token_stream(_binding_0);
3443        }
3444    }
3445}
3446#[cfg(feature = "full")]
3447#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3448pub fn visit_trait_item_const<'ast, V>(v: &mut V, node: &'ast crate::TraitItemConst)
3449where
3450    V: Visit<'ast> + ?Sized,
3451{
3452    for it in &node.attrs {
3453        v.visit_attribute(it);
3454    }
3455    skip!(node.const_token);
3456    v.visit_ident(&node.ident);
3457    v.visit_generics(&node.generics);
3458    skip!(node.colon_token);
3459    v.visit_type(&node.ty);
3460    if let Some(it) = &node.default {
3461        skip!((it).0);
3462        v.visit_expr(&(it).1);
3463    }
3464    skip!(node.semi_token);
3465}
3466#[cfg(feature = "full")]
3467#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3468pub fn visit_trait_item_fn<'ast, V>(v: &mut V, node: &'ast crate::TraitItemFn)
3469where
3470    V: Visit<'ast> + ?Sized,
3471{
3472    for it in &node.attrs {
3473        v.visit_attribute(it);
3474    }
3475    v.visit_signature(&node.sig);
3476    if let Some(it) = &node.default {
3477        v.visit_block(it);
3478    }
3479    skip!(node.semi_token);
3480}
3481#[cfg(feature = "full")]
3482#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3483pub fn visit_trait_item_macro<'ast, V>(v: &mut V, node: &'ast crate::TraitItemMacro)
3484where
3485    V: Visit<'ast> + ?Sized,
3486{
3487    for it in &node.attrs {
3488        v.visit_attribute(it);
3489    }
3490    v.visit_macro(&node.mac);
3491    skip!(node.semi_token);
3492}
3493#[cfg(feature = "full")]
3494#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3495pub fn visit_trait_item_type<'ast, V>(v: &mut V, node: &'ast crate::TraitItemType)
3496where
3497    V: Visit<'ast> + ?Sized,
3498{
3499    for it in &node.attrs {
3500        v.visit_attribute(it);
3501    }
3502    skip!(node.type_token);
3503    v.visit_ident(&node.ident);
3504    v.visit_generics(&node.generics);
3505    skip!(node.colon_token);
3506    for el in Punctuated::pairs(&node.bounds) {
3507        let it = el.value();
3508        v.visit_type_param_bound(it);
3509    }
3510    if let Some(it) = &node.default {
3511        skip!((it).0);
3512        v.visit_type(&(it).1);
3513    }
3514    skip!(node.semi_token);
3515}
3516#[cfg(any(feature = "derive", feature = "full"))]
3517#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3518pub fn visit_type<'ast, V>(v: &mut V, node: &'ast crate::Type)
3519where
3520    V: Visit<'ast> + ?Sized,
3521{
3522    match node {
3523        crate::Type::Array(_binding_0) => {
3524            v.visit_type_array(_binding_0);
3525        }
3526        crate::Type::BareFn(_binding_0) => {
3527            v.visit_type_bare_fn(_binding_0);
3528        }
3529        crate::Type::Group(_binding_0) => {
3530            v.visit_type_group(_binding_0);
3531        }
3532        crate::Type::ImplTrait(_binding_0) => {
3533            v.visit_type_impl_trait(_binding_0);
3534        }
3535        crate::Type::Infer(_binding_0) => {
3536            v.visit_type_infer(_binding_0);
3537        }
3538        crate::Type::Macro(_binding_0) => {
3539            v.visit_type_macro(_binding_0);
3540        }
3541        crate::Type::Never(_binding_0) => {
3542            v.visit_type_never(_binding_0);
3543        }
3544        crate::Type::Paren(_binding_0) => {
3545            v.visit_type_paren(_binding_0);
3546        }
3547        crate::Type::Path(_binding_0) => {
3548            v.visit_type_path(_binding_0);
3549        }
3550        crate::Type::Ptr(_binding_0) => {
3551            v.visit_type_ptr(_binding_0);
3552        }
3553        crate::Type::Reference(_binding_0) => {
3554            v.visit_type_reference(_binding_0);
3555        }
3556        crate::Type::Slice(_binding_0) => {
3557            v.visit_type_slice(_binding_0);
3558        }
3559        crate::Type::TraitObject(_binding_0) => {
3560            v.visit_type_trait_object(_binding_0);
3561        }
3562        crate::Type::Tuple(_binding_0) => {
3563            v.visit_type_tuple(_binding_0);
3564        }
3565        crate::Type::Verbatim(_binding_0) => {
3566            v.visit_token_stream(_binding_0);
3567        }
3568    }
3569}
3570#[cfg(any(feature = "derive", feature = "full"))]
3571#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3572pub fn visit_type_array<'ast, V>(v: &mut V, node: &'ast crate::TypeArray)
3573where
3574    V: Visit<'ast> + ?Sized,
3575{
3576    skip!(node.bracket_token);
3577    v.visit_type(&*node.elem);
3578    skip!(node.semi_token);
3579    v.visit_expr(&node.len);
3580}
3581#[cfg(any(feature = "derive", feature = "full"))]
3582#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3583pub fn visit_type_bare_fn<'ast, V>(v: &mut V, node: &'ast crate::TypeBareFn)
3584where
3585    V: Visit<'ast> + ?Sized,
3586{
3587    if let Some(it) = &node.lifetimes {
3588        v.visit_bound_lifetimes(it);
3589    }
3590    skip!(node.unsafety);
3591    if let Some(it) = &node.abi {
3592        v.visit_abi(it);
3593    }
3594    skip!(node.fn_token);
3595    skip!(node.paren_token);
3596    for el in Punctuated::pairs(&node.inputs) {
3597        let it = el.value();
3598        v.visit_bare_fn_arg(it);
3599    }
3600    if let Some(it) = &node.variadic {
3601        v.visit_bare_variadic(it);
3602    }
3603    v.visit_return_type(&node.output);
3604}
3605#[cfg(any(feature = "derive", feature = "full"))]
3606#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3607pub fn visit_type_group<'ast, V>(v: &mut V, node: &'ast crate::TypeGroup)
3608where
3609    V: Visit<'ast> + ?Sized,
3610{
3611    skip!(node.group_token);
3612    v.visit_type(&*node.elem);
3613}
3614#[cfg(any(feature = "derive", feature = "full"))]
3615#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3616pub fn visit_type_impl_trait<'ast, V>(v: &mut V, node: &'ast crate::TypeImplTrait)
3617where
3618    V: Visit<'ast> + ?Sized,
3619{
3620    skip!(node.impl_token);
3621    for el in Punctuated::pairs(&node.bounds) {
3622        let it = el.value();
3623        v.visit_type_param_bound(it);
3624    }
3625}
3626#[cfg(any(feature = "derive", feature = "full"))]
3627#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3628pub fn visit_type_infer<'ast, V>(v: &mut V, node: &'ast crate::TypeInfer)
3629where
3630    V: Visit<'ast> + ?Sized,
3631{
3632    skip!(node.underscore_token);
3633}
3634#[cfg(any(feature = "derive", feature = "full"))]
3635#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3636pub fn visit_type_macro<'ast, V>(v: &mut V, node: &'ast crate::TypeMacro)
3637where
3638    V: Visit<'ast> + ?Sized,
3639{
3640    v.visit_macro(&node.mac);
3641}
3642#[cfg(any(feature = "derive", feature = "full"))]
3643#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3644pub fn visit_type_never<'ast, V>(v: &mut V, node: &'ast crate::TypeNever)
3645where
3646    V: Visit<'ast> + ?Sized,
3647{
3648    skip!(node.bang_token);
3649}
3650#[cfg(any(feature = "derive", feature = "full"))]
3651#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3652pub fn visit_type_param<'ast, V>(v: &mut V, node: &'ast crate::TypeParam)
3653where
3654    V: Visit<'ast> + ?Sized,
3655{
3656    for it in &node.attrs {
3657        v.visit_attribute(it);
3658    }
3659    v.visit_ident(&node.ident);
3660    skip!(node.colon_token);
3661    for el in Punctuated::pairs(&node.bounds) {
3662        let it = el.value();
3663        v.visit_type_param_bound(it);
3664    }
3665    skip!(node.eq_token);
3666    if let Some(it) = &node.default {
3667        v.visit_type(it);
3668    }
3669}
3670#[cfg(any(feature = "derive", feature = "full"))]
3671#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3672pub fn visit_type_param_bound<'ast, V>(v: &mut V, node: &'ast crate::TypeParamBound)
3673where
3674    V: Visit<'ast> + ?Sized,
3675{
3676    match node {
3677        crate::TypeParamBound::Trait(_binding_0) => {
3678            v.visit_trait_bound(_binding_0);
3679        }
3680        crate::TypeParamBound::Lifetime(_binding_0) => {
3681            v.visit_lifetime(_binding_0);
3682        }
3683        crate::TypeParamBound::PreciseCapture(_binding_0) => {
3684            full!(v.visit_precise_capture(_binding_0));
3685        }
3686        crate::TypeParamBound::Verbatim(_binding_0) => {
3687            v.visit_token_stream(_binding_0);
3688        }
3689    }
3690}
3691#[cfg(any(feature = "derive", feature = "full"))]
3692#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3693pub fn visit_type_paren<'ast, V>(v: &mut V, node: &'ast crate::TypeParen)
3694where
3695    V: Visit<'ast> + ?Sized,
3696{
3697    skip!(node.paren_token);
3698    v.visit_type(&*node.elem);
3699}
3700#[cfg(any(feature = "derive", feature = "full"))]
3701#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3702pub fn visit_type_path<'ast, V>(v: &mut V, node: &'ast crate::TypePath)
3703where
3704    V: Visit<'ast> + ?Sized,
3705{
3706    if let Some(it) = &node.qself {
3707        v.visit_qself(it);
3708    }
3709    v.visit_path(&node.path);
3710}
3711#[cfg(any(feature = "derive", feature = "full"))]
3712#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3713pub fn visit_type_ptr<'ast, V>(v: &mut V, node: &'ast crate::TypePtr)
3714where
3715    V: Visit<'ast> + ?Sized,
3716{
3717    skip!(node.star_token);
3718    skip!(node.const_token);
3719    skip!(node.mutability);
3720    v.visit_type(&*node.elem);
3721}
3722#[cfg(any(feature = "derive", feature = "full"))]
3723#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3724pub fn visit_type_reference<'ast, V>(v: &mut V, node: &'ast crate::TypeReference)
3725where
3726    V: Visit<'ast> + ?Sized,
3727{
3728    skip!(node.and_token);
3729    if let Some(it) = &node.lifetime {
3730        v.visit_lifetime(it);
3731    }
3732    skip!(node.mutability);
3733    v.visit_type(&*node.elem);
3734}
3735#[cfg(any(feature = "derive", feature = "full"))]
3736#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3737pub fn visit_type_slice<'ast, V>(v: &mut V, node: &'ast crate::TypeSlice)
3738where
3739    V: Visit<'ast> + ?Sized,
3740{
3741    skip!(node.bracket_token);
3742    v.visit_type(&*node.elem);
3743}
3744#[cfg(any(feature = "derive", feature = "full"))]
3745#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3746pub fn visit_type_trait_object<'ast, V>(v: &mut V, node: &'ast crate::TypeTraitObject)
3747where
3748    V: Visit<'ast> + ?Sized,
3749{
3750    skip!(node.dyn_token);
3751    for el in Punctuated::pairs(&node.bounds) {
3752        let it = el.value();
3753        v.visit_type_param_bound(it);
3754    }
3755}
3756#[cfg(any(feature = "derive", feature = "full"))]
3757#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3758pub fn visit_type_tuple<'ast, V>(v: &mut V, node: &'ast crate::TypeTuple)
3759where
3760    V: Visit<'ast> + ?Sized,
3761{
3762    skip!(node.paren_token);
3763    for el in Punctuated::pairs(&node.elems) {
3764        let it = el.value();
3765        v.visit_type(it);
3766    }
3767}
3768#[cfg(any(feature = "derive", feature = "full"))]
3769#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3770pub fn visit_un_op<'ast, V>(v: &mut V, node: &'ast crate::UnOp)
3771where
3772    V: Visit<'ast> + ?Sized,
3773{
3774    match node {
3775        crate::UnOp::Deref(_binding_0) => {
3776            skip!(_binding_0);
3777        }
3778        crate::UnOp::Not(_binding_0) => {
3779            skip!(_binding_0);
3780        }
3781        crate::UnOp::Neg(_binding_0) => {
3782            skip!(_binding_0);
3783        }
3784    }
3785}
3786#[cfg(feature = "full")]
3787#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3788pub fn visit_use_glob<'ast, V>(v: &mut V, node: &'ast crate::UseGlob)
3789where
3790    V: Visit<'ast> + ?Sized,
3791{
3792    skip!(node.star_token);
3793}
3794#[cfg(feature = "full")]
3795#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3796pub fn visit_use_group<'ast, V>(v: &mut V, node: &'ast crate::UseGroup)
3797where
3798    V: Visit<'ast> + ?Sized,
3799{
3800    skip!(node.brace_token);
3801    for el in Punctuated::pairs(&node.items) {
3802        let it = el.value();
3803        v.visit_use_tree(it);
3804    }
3805}
3806#[cfg(feature = "full")]
3807#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3808pub fn visit_use_name<'ast, V>(v: &mut V, node: &'ast crate::UseName)
3809where
3810    V: Visit<'ast> + ?Sized,
3811{
3812    v.visit_ident(&node.ident);
3813}
3814#[cfg(feature = "full")]
3815#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3816pub fn visit_use_path<'ast, V>(v: &mut V, node: &'ast crate::UsePath)
3817where
3818    V: Visit<'ast> + ?Sized,
3819{
3820    v.visit_ident(&node.ident);
3821    skip!(node.colon2_token);
3822    v.visit_use_tree(&*node.tree);
3823}
3824#[cfg(feature = "full")]
3825#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3826pub fn visit_use_rename<'ast, V>(v: &mut V, node: &'ast crate::UseRename)
3827where
3828    V: Visit<'ast> + ?Sized,
3829{
3830    v.visit_ident(&node.ident);
3831    skip!(node.as_token);
3832    v.visit_ident(&node.rename);
3833}
3834#[cfg(feature = "full")]
3835#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3836pub fn visit_use_tree<'ast, V>(v: &mut V, node: &'ast crate::UseTree)
3837where
3838    V: Visit<'ast> + ?Sized,
3839{
3840    match node {
3841        crate::UseTree::Path(_binding_0) => {
3842            v.visit_use_path(_binding_0);
3843        }
3844        crate::UseTree::Name(_binding_0) => {
3845            v.visit_use_name(_binding_0);
3846        }
3847        crate::UseTree::Rename(_binding_0) => {
3848            v.visit_use_rename(_binding_0);
3849        }
3850        crate::UseTree::Glob(_binding_0) => {
3851            v.visit_use_glob(_binding_0);
3852        }
3853        crate::UseTree::Group(_binding_0) => {
3854            v.visit_use_group(_binding_0);
3855        }
3856    }
3857}
3858#[cfg(feature = "full")]
3859#[cfg_attr(docsrs, doc(cfg(feature = "full")))]
3860pub fn visit_variadic<'ast, V>(v: &mut V, node: &'ast crate::Variadic)
3861where
3862    V: Visit<'ast> + ?Sized,
3863{
3864    for it in &node.attrs {
3865        v.visit_attribute(it);
3866    }
3867    if let Some(it) = &node.pat {
3868        v.visit_pat(&*(it).0);
3869        skip!((it).1);
3870    }
3871    skip!(node.dots);
3872    skip!(node.comma);
3873}
3874#[cfg(any(feature = "derive", feature = "full"))]
3875#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3876pub fn visit_variant<'ast, V>(v: &mut V, node: &'ast crate::Variant)
3877where
3878    V: Visit<'ast> + ?Sized,
3879{
3880    for it in &node.attrs {
3881        v.visit_attribute(it);
3882    }
3883    v.visit_ident(&node.ident);
3884    v.visit_fields(&node.fields);
3885    if let Some(it) = &node.discriminant {
3886        skip!((it).0);
3887        v.visit_expr(&(it).1);
3888    }
3889}
3890#[cfg(any(feature = "derive", feature = "full"))]
3891#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3892pub fn visit_vis_restricted<'ast, V>(v: &mut V, node: &'ast crate::VisRestricted)
3893where
3894    V: Visit<'ast> + ?Sized,
3895{
3896    skip!(node.pub_token);
3897    skip!(node.paren_token);
3898    skip!(node.in_token);
3899    v.visit_path(&*node.path);
3900}
3901#[cfg(any(feature = "derive", feature = "full"))]
3902#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3903pub fn visit_visibility<'ast, V>(v: &mut V, node: &'ast crate::Visibility)
3904where
3905    V: Visit<'ast> + ?Sized,
3906{
3907    match node {
3908        crate::Visibility::Public(_binding_0) => {
3909            skip!(_binding_0);
3910        }
3911        crate::Visibility::Restricted(_binding_0) => {
3912            v.visit_vis_restricted(_binding_0);
3913        }
3914        crate::Visibility::Inherited => {}
3915    }
3916}
3917#[cfg(any(feature = "derive", feature = "full"))]
3918#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3919pub fn visit_where_clause<'ast, V>(v: &mut V, node: &'ast crate::WhereClause)
3920where
3921    V: Visit<'ast> + ?Sized,
3922{
3923    skip!(node.where_token);
3924    for el in Punctuated::pairs(&node.predicates) {
3925        let it = el.value();
3926        v.visit_where_predicate(it);
3927    }
3928}
3929#[cfg(any(feature = "derive", feature = "full"))]
3930#[cfg_attr(docsrs, doc(cfg(any(feature = "derive", feature = "full"))))]
3931pub fn visit_where_predicate<'ast, V>(v: &mut V, node: &'ast crate::WherePredicate)
3932where
3933    V: Visit<'ast> + ?Sized,
3934{
3935    match node {
3936        crate::WherePredicate::Lifetime(_binding_0) => {
3937            v.visit_predicate_lifetime(_binding_0);
3938        }
3939        crate::WherePredicate::Type(_binding_0) => {
3940            v.visit_predicate_type(_binding_0);
3941        }
3942    }
3943}