fuzzy_pickles/
visit.rs

1//! Visitors of the AST
2
3use crate::ast::*;
4use crate::Extent;
5
6/// An AST node that can be visited
7pub trait Visit {
8    fn visit<'ast, V>(&'ast self, _: &mut V)
9    where
10        V: Visitor<'ast>;
11
12    fn visit_mut<V>(&mut self, _: &mut V)
13    where
14        V: VisitorMut;
15}
16
17impl<T> Visit for Box<T>
18where
19    T: Visit,
20{
21    fn visit<'ast, V>(&'ast self, v: &mut V)
22    where
23        V: Visitor<'ast>,
24    {
25        (**self).visit(v)
26    }
27
28    fn visit_mut<V>(&mut self, v: &mut V)
29    where
30        V: VisitorMut,
31    {
32        (**self).visit_mut(v)
33    }
34}
35
36impl<T> Visit for Option<T>
37where
38    T: Visit,
39{
40    fn visit<'ast, V>(&'ast self, v: &mut V)
41    where
42        V: Visitor<'ast>,
43    {
44        for i in self {
45            i.visit(v)
46        }
47    }
48
49    fn visit_mut<V>(&mut self, v: &mut V)
50    where
51        V: VisitorMut,
52    {
53        for i in self {
54            i.visit_mut(v)
55        }
56    }
57}
58
59impl<T> Visit for Vec<T>
60where
61    T: Visit,
62{
63    fn visit<'ast, V>(&'ast self, v: &mut V)
64    where
65        V: Visitor<'ast>
66    {
67        for i in self {
68            i.visit(v)
69        }
70    }
71
72    fn visit_mut<V>(&mut self, v: &mut V)
73    where
74        V: VisitorMut
75    {
76        for i in self {
77            i.visit_mut(v)
78        }
79    }
80}
81
82// Cheap hack to avoid having to annotate every terminal `Extent`;
83// just visit them and don't do anything. An extent without any
84// context is pretty useless.
85impl Visit for Extent {
86    fn visit<'ast, V>(&'ast self, _v: &mut V)
87    where
88        V: Visitor<'ast>
89    {}
90
91    fn visit_mut<V>(&mut self, _v: &mut V)
92    where
93        V: VisitorMut
94    {}
95}
96
97/// Directs the visitor to continue processing the children of the
98/// current code or not.
99#[derive(Debug, PartialEq)]
100pub enum Control {
101    Continue,
102    Break
103}
104
105/// A visitor of AST nodes
106///
107/// On entry of a node, the corresponding `visit_*` method will be
108/// called. This method may return a [`Control`] to avoid descending
109/// into child nodes.
110///
111/// After visiting all the children of a node, the corresponding
112/// `exit_*` method will be called.
113///
114/// For ease-of-use, all methods in this trait have a default
115/// implementation. Consumers of the trait only need to implement
116/// methods for the nodes they are interested in. The default
117/// implementations for the `visit_*` methods continues processing on
118/// every node.
119// TODO: rename `visit_*` to `entry_*`?
120pub trait Visitor<'ast> {
121    fn visit_argument(&mut self, _: &'ast Argument) -> Control { Control::Continue }
122    fn visit_array(&mut self, _: &'ast Array) -> Control { Control::Continue }
123    fn visit_array_explicit(&mut self, _: &'ast ArrayExplicit) -> Control { Control::Continue }
124    fn visit_array_repeated(&mut self, _: &'ast ArrayRepeated) -> Control { Control::Continue }
125    fn visit_as_type(&mut self, _: &'ast AsType) -> Control { Control::Continue }
126    fn visit_ascription(&mut self, _: &'ast Ascription) -> Control { Control::Continue }
127    fn visit_associated_type(&mut self, _: &'ast AssociatedType) -> Control { Control::Continue }
128    fn visit_associated_type_value(&mut self, _: &'ast AssociatedTypeValue) -> Control { Control::Continue }
129    fn visit_associated_type_value_equal(&mut self, _: &'ast AssociatedTypeValueEqual) -> Control { Control::Continue }
130    fn visit_associated_type_value_bound(&mut self, _: &'ast AssociatedTypeValueBound) -> Control { Control::Continue }
131    fn visit_async_block(&mut self, _: &'ast AsyncBlock) -> Control { Control::Continue }
132    fn visit_attribute(&mut self, _: &'ast Attribute) -> Control { Control::Continue }
133    fn visit_attribute_literal(&mut self, _: &'ast AttributeLiteral) -> Control { Control::Continue }
134    fn visit_attribute_containing(&mut self, _: &'ast AttributeContaining) -> Control { Control::Continue }
135    fn visit_attribute_containing_literal(&mut self, _: &'ast AttributeContainingLiteral) -> Control { Control::Continue }
136    fn visit_attributed_enum_variant(&mut self, _: &'ast Attributed<EnumVariant>) -> Control { Control::Continue }
137    fn visit_attributed_expression(&mut self, _: &'ast Attributed<Expression>) -> Control { Control::Continue }
138    fn visit_attributed_extern_block_member(&mut self, _: &'ast Attributed<ExternBlockMember>) -> Control { Control::Continue }
139    fn visit_attributed_generic_declaration_const(&mut self, _: &'ast Attributed<GenericDeclarationConst>) -> Control { Control::Continue }
140    fn visit_attributed_generic_declaration_lifetime(&mut self, _: &'ast Attributed<GenericDeclarationLifetime>) -> Control { Control::Continue }
141    fn visit_attributed_generic_declaration_type(&mut self, _: &'ast Attributed<GenericDeclarationType>) -> Control { Control::Continue }
142    fn visit_attributed_impl_member(&mut self, _: &'ast Attributed<ImplMember>) -> Control { Control::Continue }
143    fn visit_attributed_item(&mut self, _: &'ast Attributed<Item>) -> Control { Control::Continue }
144    fn visit_attributed_struct_definition_field_named(&mut self, _: &'ast Attributed<StructDefinitionFieldNamed>) -> Control { Control::Continue }
145    fn visit_attributed_struct_definition_field_unnamed(&mut self, _: &'ast Attributed<StructDefinitionFieldUnnamed>) -> Control { Control::Continue }
146    fn visit_attributed_trait_member(&mut self, _: &'ast Attributed<TraitMember>) -> Control { Control::Continue }
147    fn visit_binary(&mut self, _: &'ast Binary) -> Control { Control::Continue }
148    fn visit_block(&mut self, _: &'ast Block) -> Control { Control::Continue }
149    fn visit_break(&mut self, _: &'ast Break) -> Control { Control::Continue }
150    fn visit_byte(&mut self, _: &'ast Byte) -> Control { Control::Continue }
151    fn visit_byte_string(&mut self, _: &'ast ByteString) -> Control { Control::Continue }
152    fn visit_call(&mut self, _: &'ast Call) -> Control { Control::Continue }
153    fn visit_character(&mut self, _: &'ast Character) -> Control { Control::Continue }
154    fn visit_closure(&mut self, _: &'ast Closure) -> Control { Control::Continue }
155    fn visit_closure_arg(&mut self, _: &'ast ClosureArg) -> Control { Control::Continue }
156    fn visit_comment(&mut self, _: &'ast Comment) -> Control { Control::Continue }
157    fn visit_const(&mut self, _: &'ast Const) -> Control { Control::Continue }
158    fn visit_continue(&mut self, _: &'ast Continue) -> Control { Control::Continue }
159    fn visit_crate(&mut self, _: &'ast Crate) -> Control { Control::Continue }
160    fn visit_dereference(&mut self, _: &'ast Dereference) -> Control { Control::Continue }
161    fn visit_disambiguation(&mut self, _: &'ast Disambiguation) -> Control { Control::Continue }
162    fn visit_enum(&mut self, _: &'ast Enum) -> Control { Control::Continue }
163    fn visit_enum_variant(&mut self, _: &'ast EnumVariant) -> Control { Control::Continue }
164    fn visit_enum_variant_body(&mut self, _: &'ast EnumVariantBody) -> Control { Control::Continue }
165    fn visit_expression(&mut self, _: &'ast Expression) -> Control { Control::Continue }
166    fn visit_expression_box(&mut self, _: &'ast ExpressionBox) -> Control { Control::Continue }
167    fn visit_extern_block(&mut self, _: &'ast ExternBlock) -> Control { Control::Continue }
168    fn visit_extern_block_member(&mut self, _: &'ast ExternBlockMember) -> Control { Control::Continue }
169    fn visit_extern_block_member_function(&mut self, _: &'ast ExternBlockMemberFunction) -> Control { Control::Continue }
170    fn visit_extern_block_member_function_argument(&mut self, _: &'ast ExternBlockMemberFunctionArgument) -> Control { Control::Continue }
171    fn visit_extern_block_member_function_argument_named(&mut self, _: &'ast ExternBlockMemberFunctionArgumentNamed) -> Control { Control::Continue }
172    fn visit_extern_block_member_function_argument_variadic(&mut self, _: &'ast ExternBlockMemberFunctionArgumentVariadic) -> Control { Control::Continue }
173    fn visit_extern_block_member_static(&mut self, _: &'ast ExternBlockMemberStatic) -> Control { Control::Continue }
174    fn visit_extern_block_member_type(&mut self, _: &'ast ExternBlockMemberType) -> Control { Control::Continue }
175    fn visit_field_access(&mut self, _: &'ast FieldAccess) -> Control { Control::Continue }
176    fn visit_field_name(&mut self, _: &'ast FieldName) -> Control { Control::Continue }
177    fn visit_file(&mut self, _: &'ast File) -> Control { Control::Continue }
178    fn visit_for_loop(&mut self, _: &'ast ForLoop) -> Control { Control::Continue }
179    fn visit_function(&mut self, _: &'ast Function) -> Control { Control::Continue }
180    fn visit_function_header(&mut self, _: &'ast FunctionHeader) -> Control { Control::Continue }
181    fn visit_function_qualifiers(&mut self, _: &'ast FunctionQualifiers) -> Control { Control::Continue }
182    fn visit_generic_declaration_const(&mut self, _: &'ast GenericDeclarationConst) -> Control { Control::Continue }
183    fn visit_generic_declaration_lifetime(&mut self, _: &'ast GenericDeclarationLifetime) -> Control { Control::Continue }
184    fn visit_generic_declaration_type(&mut self, _: &'ast GenericDeclarationType) -> Control { Control::Continue }
185    fn visit_generic_declarations(&mut self, _: &'ast GenericDeclarations) -> Control { Control::Continue }
186    fn visit_ident(&mut self, _: &'ast Ident) -> Control { Control::Continue }
187    fn visit_if(&mut self, _: &'ast If) -> Control { Control::Continue }
188    fn visit_if_let(&mut self, _: &'ast IfLet) -> Control { Control::Continue }
189    fn visit_impl(&mut self, _: &'ast Impl) -> Control { Control::Continue }
190    fn visit_impl_const(&mut self, _: &'ast ImplConst) -> Control { Control::Continue }
191    fn visit_impl_function(&mut self, _: &'ast ImplFunction) -> Control { Control::Continue }
192    fn visit_impl_kind(&mut self, _: &'ast ImplKind) -> Control { Control::Continue }
193    fn visit_impl_member(&mut self, _: &'ast ImplMember) -> Control { Control::Continue }
194    fn visit_impl_of_inherent(&mut self, _: &'ast ImplOfInherent) -> Control { Control::Continue }
195    fn visit_impl_of_trait(&mut self, _: &'ast ImplOfTrait) -> Control { Control::Continue }
196    fn visit_impl_of_trait_type(&mut self, _: &'ast ImplOfTraitType) -> Control { Control::Continue }
197    fn visit_impl_type(&mut self, _: &'ast ImplType) -> Control { Control::Continue }
198    fn visit_item(&mut self, _: &'ast Item) -> Control { Control::Continue }
199    fn visit_let(&mut self, _: &'ast Let) -> Control { Control::Continue }
200    fn visit_lifetime(&mut self, _: &'ast Lifetime) -> Control { Control::Continue }
201    fn visit_loop(&mut self, _: &'ast Loop) -> Control { Control::Continue }
202    fn visit_macro_call(&mut self, _: &'ast MacroCall) -> Control { Control::Continue }
203    fn visit_macro_call_args(&mut self, _: &'ast MacroCallArgs) -> Control { Control::Continue }
204    fn visit_match(&mut self, _: &'ast Match) -> Control { Control::Continue }
205    fn visit_match_arm(&mut self, _: &'ast MatchArm) -> Control { Control::Continue }
206    fn visit_match_hand(&mut self, _: &'ast MatchHand) -> Control { Control::Continue }
207    fn visit_module(&mut self, _: &'ast Module) -> Control { Control::Continue }
208    fn visit_named_argument(&mut self, _: &'ast NamedArgument) -> Control { Control::Continue }
209    fn visit_number(&mut self, _: &'ast Number) -> Control { Control::Continue }
210    fn visit_number_value(&mut self, _: &'ast NumberValue) -> Control { Control::Continue }
211    fn visit_number_binary(&mut self, _: &'ast NumberBinary) -> Control { Control::Continue }
212    fn visit_number_decimal(&mut self, _: &'ast NumberDecimal) -> Control { Control::Continue }
213    fn visit_number_hexadecimal(&mut self, _: &'ast NumberHexadecimal) -> Control { Control::Continue }
214    fn visit_number_octal(&mut self, _: &'ast NumberOctal) -> Control { Control::Continue }
215    fn visit_parenthetical(&mut self, _: &'ast Parenthetical) -> Control { Control::Continue }
216    fn visit_path(&mut self, _: &'ast Path) -> Control { Control::Continue }
217    fn visit_path_component(&mut self, _: &'ast PathComponent) -> Control { Control::Continue }
218    fn visit_pathed_ident(&mut self, _: &'ast PathedIdent) -> Control { Control::Continue }
219    fn visit_pattern(&mut self, _: &'ast Pattern) -> Control { Control::Continue }
220    fn visit_pattern_box(&mut self, _: &'ast PatternBox) -> Control { Control::Continue }
221    fn visit_pattern_byte(&mut self, _: &'ast PatternByte) -> Control { Control::Continue }
222    fn visit_pattern_byte_string(&mut self, _: &'ast PatternByteString) -> Control { Control::Continue }
223    fn visit_pattern_character(&mut self, _: &'ast PatternCharacter) -> Control { Control::Continue }
224    fn visit_pattern_ident(&mut self, _: &'ast PatternIdent) -> Control { Control::Continue }
225    fn visit_pattern_kind(&mut self, _: &'ast PatternKind) -> Control { Control::Continue }
226    fn visit_pattern_macro_call(&mut self, _: &'ast PatternMacroCall) -> Control { Control::Continue }
227    fn visit_pattern_name(&mut self, _: &'ast PatternName) -> Control { Control::Continue }
228    fn visit_pattern_number(&mut self, _: &'ast PatternNumber) -> Control { Control::Continue }
229    fn visit_pattern_range_component(&mut self, _: &'ast PatternRangeComponent) -> Control { Control::Continue }
230    fn visit_pattern_range_exclusive(&mut self, _: &'ast PatternRangeExclusive) -> Control { Control::Continue }
231    fn visit_pattern_range_inclusive(&mut self, _: &'ast PatternRangeInclusive) -> Control { Control::Continue }
232    fn visit_pattern_reference(&mut self, _: &'ast PatternReference) -> Control { Control::Continue }
233    fn visit_pattern_slice(&mut self, _: &'ast PatternSlice) -> Control { Control::Continue }
234    fn visit_pattern_slice_member(&mut self, _: &'ast PatternSliceMember) -> Control { Control::Continue }
235    fn visit_pattern_slice_subslice(&mut self, _: &'ast PatternSliceSubslice) -> Control { Control::Continue }
236    fn visit_pattern_string(&mut self, _: &'ast PatternString) -> Control { Control::Continue }
237    fn visit_pattern_struct(&mut self, _: &'ast PatternStruct) -> Control { Control::Continue }
238    fn visit_pattern_struct_field(&mut self, _: &'ast PatternStructField) -> Control { Control::Continue }
239    fn visit_pattern_struct_field_long(&mut self, _: &'ast PatternStructFieldLong) -> Control { Control::Continue }
240    fn visit_pattern_struct_field_short(&mut self, _: &'ast PatternStructFieldShort) -> Control { Control::Continue }
241    fn visit_pattern_tuple(&mut self, _: &'ast PatternTuple) -> Control { Control::Continue }
242    fn visit_pattern_tuple_member(&mut self, _: &'ast PatternTupleMember) -> Control { Control::Continue }
243    fn visit_range(&mut self, _: &'ast Range) -> Control { Control::Continue }
244    fn visit_range_inclusive(&mut self, _: &'ast RangeInclusive) -> Control { Control::Continue }
245    fn visit_reference(&mut self, _: &'ast Reference) -> Control { Control::Continue }
246    fn visit_return(&mut self, _: &'ast Return) -> Control { Control::Continue }
247    fn visit_self_argument(&mut self, _: &'ast SelfArgument) -> Control { Control::Continue }
248    fn visit_self_argument_longhand(&mut self, _: &'ast SelfArgumentLonghand) -> Control { Control::Continue }
249    fn visit_self_argument_shorthand(&mut self, _: &'ast SelfArgumentShorthand) -> Control { Control::Continue }
250    fn visit_self_argument_shorthand_qualifier(&mut self, _: &'ast SelfArgumentShorthandQualifier) -> Control { Control::Continue }
251    fn visit_slice(&mut self, _: &'ast Slice) -> Control { Control::Continue }
252    fn visit_statement(&mut self, _: &'ast Statement) -> Control { Control::Continue }
253    fn visit_static(&mut self, _: &'ast Static) -> Control { Control::Continue }
254    fn visit_string(&mut self, _: &'ast String) -> Control { Control::Continue }
255    fn visit_struct(&mut self, _: &'ast Struct) -> Control { Control::Continue }
256    fn visit_struct_definition_body(&mut self, _: &'ast StructDefinitionBody) -> Control { Control::Continue }
257    fn visit_struct_definition_body_brace(&mut self, _: &'ast StructDefinitionBodyBrace) -> Control { Control::Continue }
258    fn visit_struct_definition_body_tuple(&mut self, _: &'ast StructDefinitionBodyTuple) -> Control { Control::Continue }
259    fn visit_struct_definition_field_named(&mut self, _: &'ast StructDefinitionFieldNamed) -> Control { Control::Continue }
260    fn visit_struct_definition_field_unnamed(&mut self, _: &'ast StructDefinitionFieldUnnamed) -> Control { Control::Continue }
261    fn visit_struct_literal(&mut self, _: &'ast StructLiteral) -> Control { Control::Continue }
262    fn visit_struct_literal_field(&mut self, _: &'ast StructLiteralField) -> Control { Control::Continue }
263    fn visit_trait(&mut self, _: &'ast Trait) -> Control { Control::Continue }
264    fn visit_trait_bound(&mut self, _: &'ast TraitBound) -> Control { Control::Continue }
265    fn visit_trait_bound_lifetime(&mut self, _: &'ast TraitBoundLifetime) -> Control { Control::Continue }
266    fn visit_trait_bound_normal(&mut self, _: &'ast TraitBoundNormal) -> Control { Control::Continue }
267    fn visit_trait_bound_relaxed(&mut self, _: &'ast TraitBoundRelaxed) -> Control { Control::Continue }
268    fn visit_trait_bound_type(&mut self, _: &'ast TraitBoundType) -> Control { Control::Continue }
269    fn visit_trait_bounds(&mut self, _: &'ast TraitBounds) -> Control { Control::Continue }
270    fn visit_trait_impl_argument(&mut self, _: &'ast TraitImplArgument) -> Control { Control::Continue }
271    fn visit_trait_impl_argument_named(&mut self, _: &'ast TraitImplArgumentNamed) -> Control { Control::Continue }
272    fn visit_trait_impl_function_header(&mut self, _: &'ast TraitImplFunctionHeader) -> Control { Control::Continue }
273    fn visit_trait_member(&mut self, _: &'ast TraitMember) -> Control { Control::Continue }
274    fn visit_trait_member_const(&mut self, _: &'ast TraitMemberConst) -> Control { Control::Continue }
275    fn visit_trait_member_function(&mut self, _: &'ast TraitMemberFunction) -> Control { Control::Continue }
276    fn visit_trait_member_type(&mut self, _: &'ast TraitMemberType) -> Control { Control::Continue }
277    fn visit_try_operator(&mut self, _: &'ast TryOperator) -> Control { Control::Continue }
278    fn visit_tuple(&mut self, _: &'ast Tuple) -> Control { Control::Continue }
279    fn visit_turbofish(&mut self, _: &'ast Turbofish) -> Control { Control::Continue }
280    fn visit_type(&mut self, _: &'ast Type) -> Control { Control::Continue }
281    fn visit_type_additional(&mut self, _: &'ast TypeAdditional) -> Control { Control::Continue }
282    fn visit_type_alias(&mut self, _: &'ast TypeAlias) -> Control { Control::Continue }
283    fn visit_type_array(&mut self, _: &'ast TypeArray) -> Control { Control::Continue }
284    fn visit_type_disambiguation(&mut self, _: &'ast TypeDisambiguation) -> Control { Control::Continue }
285    fn visit_type_dyn_trait(&mut self, _: &'ast TypeDynTrait) -> Control { Control::Continue }
286    fn visit_type_function(&mut self, _: &'ast TypeFunction) -> Control { Control::Continue }
287    fn visit_type_function_argument(&mut self, _: &'ast TypeFunctionArgument) -> Control { Control::Continue }
288    fn visit_type_function_argument_named(&mut self, _: &'ast TypeFunctionArgumentNamed) -> Control { Control::Continue }
289    fn visit_type_generics(&mut self, _: &'ast TypeGenerics) -> Control { Control::Continue }
290    fn visit_type_generics_angle(&mut self, _: &'ast TypeGenericsAngle) -> Control { Control::Continue }
291    fn visit_type_generics_angle_member(&mut self, _: &'ast TypeGenericsAngleMember) -> Control { Control::Continue }
292    fn visit_type_generics_function(&mut self, _: &'ast TypeGenericsFunction) -> Control { Control::Continue }
293    fn visit_type_higher_ranked_trait_bounds(&mut self, _: &'ast TypeHigherRankedTraitBounds) -> Control { Control::Continue }
294    fn visit_type_higher_ranked_trait_bounds_child(&mut self, _: &'ast TypeHigherRankedTraitBoundsChild) -> Control { Control::Continue }
295    fn visit_type_impl_trait(&mut self, _: &'ast TypeImplTrait) -> Control { Control::Continue }
296    fn visit_type_kind(&mut self, _: &'ast TypeKind) -> Control { Control::Continue }
297    fn visit_type_named(&mut self, _: &'ast TypeNamed) -> Control { Control::Continue }
298    fn visit_type_named_component(&mut self, _: &'ast TypeNamedComponent) -> Control { Control::Continue }
299    fn visit_type_pointer(&mut self, _: &'ast TypePointer) -> Control { Control::Continue }
300    fn visit_type_reference(&mut self, _: &'ast TypeReference) -> Control { Control::Continue }
301    fn visit_type_reference_kind(&mut self, _: &'ast TypeReferenceKind) -> Control { Control::Continue }
302    fn visit_type_slice(&mut self, _: &'ast TypeSlice) -> Control { Control::Continue }
303    fn visit_type_tuple(&mut self, _: &'ast TypeTuple) -> Control { Control::Continue }
304    fn visit_unary(&mut self, _: &'ast Unary) -> Control { Control::Continue }
305    fn visit_union(&mut self, _: &'ast Union) -> Control { Control::Continue }
306    fn visit_unsafe_block(&mut self, _: &'ast UnsafeBlock) -> Control { Control::Continue }
307    fn visit_use(&mut self, _: &'ast Use) -> Control { Control::Continue }
308    fn visit_use_path(&mut self, _: &'ast UsePath) -> Control { Control::Continue }
309    fn visit_use_tail(&mut self, _: &'ast UseTail) -> Control { Control::Continue }
310    fn visit_use_tail_glob(&mut self, _: &'ast UseTailGlob) -> Control { Control::Continue }
311    fn visit_use_tail_ident(&mut self, _: &'ast UseTailIdent) -> Control { Control::Continue }
312    fn visit_use_tail_multi(&mut self, _: &'ast UseTailMulti) -> Control { Control::Continue }
313    fn visit_value(&mut self, _: &'ast Value) -> Control { Control::Continue }
314    fn visit_visibility(&mut self, _: &'ast Visibility) -> Control { Control::Continue }
315    fn visit_visibility_public(&mut self, _: &'ast VisibilityPublic) -> Control { Control::Continue }
316    fn visit_where(&mut self, _: &'ast Where) -> Control { Control::Continue }
317    fn visit_where_kind(&mut self, _: &'ast WhereKind) -> Control { Control::Continue }
318    fn visit_where_lifetime(&mut self, _: &'ast WhereLifetime) -> Control { Control::Continue }
319    fn visit_where_type(&mut self, _: &'ast WhereType) -> Control { Control::Continue }
320    fn visit_while(&mut self, _: &'ast While) -> Control { Control::Continue }
321    fn visit_while_let(&mut self, _: &'ast WhileLet) -> Control { Control::Continue }
322    fn visit_whitespace(&mut self, _: &'ast Whitespace) -> Control { Control::Continue }
323
324    fn exit_argument(&mut self, _: &'ast Argument) {}
325    fn exit_array(&mut self, _: &'ast Array) {}
326    fn exit_array_explicit(&mut self, _: &'ast ArrayExplicit) {}
327    fn exit_array_repeated(&mut self, _: &'ast ArrayRepeated) {}
328    fn exit_as_type(&mut self, _: &'ast AsType) {}
329    fn exit_ascription(&mut self, _: &'ast Ascription) {}
330    fn exit_associated_type(&mut self, _: &'ast AssociatedType) {}
331    fn exit_associated_type_value(&mut self, _: &'ast AssociatedTypeValue) {}
332    fn exit_associated_type_value_equal(&mut self, _: &'ast AssociatedTypeValueEqual) {}
333    fn exit_associated_type_value_bound(&mut self, _: &'ast AssociatedTypeValueBound) {}
334    fn exit_async_block(&mut self, _: &'ast AsyncBlock) {}
335    fn exit_attribute(&mut self, _: &'ast Attribute) {}
336    fn exit_attribute_literal(&mut self, _: &'ast AttributeLiteral) {}
337    fn exit_attribute_containing(&mut self, _: &'ast AttributeContaining) {}
338    fn exit_attribute_containing_literal(&mut self, _: &'ast AttributeContainingLiteral) {}
339    fn exit_attributed_enum_variant(&mut self, _: &'ast Attributed<EnumVariant>) {}
340    fn exit_attributed_expression(&mut self, _: &'ast Attributed<Expression>) {}
341    fn exit_attributed_extern_block_member(&mut self, _: &'ast Attributed<ExternBlockMember>) {}
342    fn exit_attributed_generic_declaration_const(&mut self, _: &'ast Attributed<GenericDeclarationConst>) {}
343    fn exit_attributed_generic_declaration_lifetime(&mut self, _: &'ast Attributed<GenericDeclarationLifetime>) {}
344    fn exit_attributed_generic_declaration_type(&mut self, _: &'ast Attributed<GenericDeclarationType>) {}
345    fn exit_attributed_impl_member(&mut self, _: &'ast Attributed<ImplMember>) {}
346    fn exit_attributed_item(&mut self, _: &'ast Attributed<Item>) {}
347    fn exit_attributed_struct_definition_field_named(&mut self, _: &'ast Attributed<StructDefinitionFieldNamed>) {}
348    fn exit_attributed_struct_definition_field_unnamed(&mut self, _: &'ast Attributed<StructDefinitionFieldUnnamed>) {}
349    fn exit_attributed_trait_member(&mut self, _: &'ast Attributed<TraitMember>) {}
350    fn exit_binary(&mut self, _: &'ast Binary) {}
351    fn exit_block(&mut self, _: &'ast Block) {}
352    fn exit_break(&mut self, _: &'ast Break) {}
353    fn exit_byte(&mut self, _: &'ast Byte) {}
354    fn exit_byte_string(&mut self, _: &'ast ByteString) {}
355    fn exit_call(&mut self, _: &'ast Call) {}
356    fn exit_character(&mut self, _: &'ast Character) {}
357    fn exit_closure(&mut self, _: &'ast Closure) {}
358    fn exit_closure_arg(&mut self, _: &'ast ClosureArg) {}
359    fn exit_comment(&mut self, _: &'ast Comment) {}
360    fn exit_const(&mut self, _: &'ast Const) {}
361    fn exit_continue(&mut self, _: &'ast Continue) {}
362    fn exit_crate(&mut self, _: &'ast Crate) {}
363    fn exit_dereference(&mut self, _: &'ast Dereference) {}
364    fn exit_disambiguation(&mut self, _: &'ast Disambiguation) {}
365    fn exit_enum(&mut self, _: &'ast Enum) {}
366    fn exit_enum_variant(&mut self, _: &'ast EnumVariant) {}
367    fn exit_enum_variant_body(&mut self, _: &'ast EnumVariantBody) {}
368    fn exit_expression(&mut self, _: &'ast Expression) {}
369    fn exit_expression_box(&mut self, _: &'ast ExpressionBox) {}
370    fn exit_extern_block(&mut self, _: &'ast ExternBlock) {}
371    fn exit_extern_block_member(&mut self, _: &'ast ExternBlockMember) {}
372    fn exit_extern_block_member_function(&mut self, _: &'ast ExternBlockMemberFunction) {}
373    fn exit_extern_block_member_function_argument(&mut self, _: &'ast ExternBlockMemberFunctionArgument) {}
374    fn exit_extern_block_member_function_argument_named(&mut self, _: &'ast ExternBlockMemberFunctionArgumentNamed) {}
375    fn exit_extern_block_member_function_argument_variadic(&mut self, _: &'ast ExternBlockMemberFunctionArgumentVariadic) {}
376    fn exit_extern_block_member_static(&mut self, _: &'ast ExternBlockMemberStatic) {}
377    fn exit_extern_block_member_type(&mut self, _: &'ast ExternBlockMemberType) {}
378    fn exit_field_access(&mut self, _: &'ast FieldAccess) {}
379    fn exit_field_name(&mut self, _: &'ast FieldName) {}
380    fn exit_file(&mut self, _: &'ast File) {}
381    fn exit_for_loop(&mut self, _: &'ast ForLoop) {}
382    fn exit_function(&mut self, _: &'ast Function) {}
383    fn exit_function_header(&mut self, _: &'ast FunctionHeader) {}
384    fn exit_function_qualifiers(&mut self, _: &'ast FunctionQualifiers) {}
385    fn exit_generic_declaration_const(&mut self, _: &'ast GenericDeclarationConst) {}
386    fn exit_generic_declaration_lifetime(&mut self, _: &'ast GenericDeclarationLifetime) {}
387    fn exit_generic_declaration_type(&mut self, _: &'ast GenericDeclarationType) {}
388    fn exit_generic_declarations(&mut self, _: &'ast GenericDeclarations) {}
389    fn exit_ident(&mut self, _: &'ast Ident) {}
390    fn exit_if(&mut self, _: &'ast If) {}
391    fn exit_if_let(&mut self, _: &'ast IfLet) {}
392    fn exit_impl(&mut self, _: &'ast Impl) {}
393    fn exit_impl_const(&mut self, _: &'ast ImplConst) {}
394    fn exit_impl_function(&mut self, _: &'ast ImplFunction) {}
395    fn exit_impl_kind(&mut self, _: &'ast ImplKind) {}
396    fn exit_impl_member(&mut self, _: &'ast ImplMember) {}
397    fn exit_impl_of_inherent(&mut self, _: &'ast ImplOfInherent) {}
398    fn exit_impl_of_trait(&mut self, _: &'ast ImplOfTrait) {}
399    fn exit_impl_of_trait_type(&mut self, _: &'ast ImplOfTraitType) {}
400    fn exit_impl_type(&mut self, _: &'ast ImplType) {}
401    fn exit_item(&mut self, _: &'ast Item) {}
402    fn exit_let(&mut self, _: &'ast Let) {}
403    fn exit_lifetime(&mut self, _: &'ast Lifetime) {}
404    fn exit_loop(&mut self, _: &'ast Loop) {}
405    fn exit_macro_call(&mut self, _: &'ast MacroCall) {}
406    fn exit_macro_call_args(&mut self, _: &'ast MacroCallArgs) {}
407    fn exit_match(&mut self, _: &'ast Match) {}
408    fn exit_match_arm(&mut self, _: &'ast MatchArm) {}
409    fn exit_match_hand(&mut self, _: &'ast MatchHand) {}
410    fn exit_module(&mut self, _: &'ast Module) {}
411    fn exit_named_argument(&mut self, _: &'ast NamedArgument) {}
412    fn exit_number(&mut self, _: &'ast Number) {}
413    fn exit_number_value(&mut self, _: &'ast NumberValue) {}
414    fn exit_number_binary(&mut self, _: &'ast NumberBinary) {}
415    fn exit_number_decimal(&mut self, _: &'ast NumberDecimal) {}
416    fn exit_number_hexadecimal(&mut self, _: &'ast NumberHexadecimal) {}
417    fn exit_number_octal(&mut self, _: &'ast NumberOctal) {}
418    fn exit_parenthetical(&mut self, _: &'ast Parenthetical) {}
419    fn exit_path(&mut self, _: &'ast Path) {}
420    fn exit_path_component(&mut self, _: &'ast PathComponent) {}
421    fn exit_pathed_ident(&mut self, _: &'ast PathedIdent) {}
422    fn exit_pattern(&mut self, _: &'ast Pattern) {}
423    fn exit_pattern_box(&mut self, _: &'ast PatternBox) {}
424    fn exit_pattern_byte(&mut self, _: &'ast PatternByte) {}
425    fn exit_pattern_byte_string(&mut self, _: &'ast PatternByteString) {}
426    fn exit_pattern_character(&mut self, _: &'ast PatternCharacter) {}
427    fn exit_pattern_ident(&mut self, _: &'ast PatternIdent) {}
428    fn exit_pattern_kind(&mut self, _: &'ast PatternKind) {}
429    fn exit_pattern_macro_call(&mut self, _: &'ast PatternMacroCall) {}
430    fn exit_pattern_name(&mut self, _: &'ast PatternName) {}
431    fn exit_pattern_number(&mut self, _: &'ast PatternNumber) {}
432    fn exit_pattern_range_component(&mut self, _: &'ast PatternRangeComponent) {}
433    fn exit_pattern_range_exclusive(&mut self, _: &'ast PatternRangeExclusive) {}
434    fn exit_pattern_range_inclusive(&mut self, _: &'ast PatternRangeInclusive) {}
435    fn exit_pattern_reference(&mut self, _: &'ast PatternReference) {}
436    fn exit_pattern_slice(&mut self, _: &'ast PatternSlice) {}
437    fn exit_pattern_slice_member(&mut self, _: &'ast PatternSliceMember) {}
438    fn exit_pattern_slice_subslice(&mut self, _: &'ast PatternSliceSubslice) {}
439    fn exit_pattern_string(&mut self, _: &'ast PatternString) {}
440    fn exit_pattern_struct(&mut self, _: &'ast PatternStruct) {}
441    fn exit_pattern_struct_field(&mut self, _: &'ast PatternStructField) {}
442    fn exit_pattern_struct_field_long(&mut self, _: &'ast PatternStructFieldLong) {}
443    fn exit_pattern_struct_field_short(&mut self, _: &'ast PatternStructFieldShort) {}
444    fn exit_pattern_tuple(&mut self, _: &'ast PatternTuple) {}
445    fn exit_pattern_tuple_member(&mut self, _: &'ast PatternTupleMember) {}
446    fn exit_range(&mut self, _: &'ast Range) {}
447    fn exit_range_inclusive(&mut self, _: &'ast RangeInclusive) {}
448    fn exit_reference(&mut self, _: &'ast Reference) {}
449    fn exit_return(&mut self, _: &'ast Return) {}
450    fn exit_self_argument(&mut self, _: &'ast SelfArgument) {}
451    fn exit_self_argument_longhand(&mut self, _: &'ast SelfArgumentLonghand) {}
452    fn exit_self_argument_shorthand(&mut self, _: &'ast SelfArgumentShorthand) {}
453    fn exit_self_argument_shorthand_qualifier(&mut self, _: &'ast SelfArgumentShorthandQualifier) {}
454    fn exit_slice(&mut self, _: &'ast Slice) {}
455    fn exit_statement(&mut self, _: &'ast Statement) {}
456    fn exit_static(&mut self, _: &'ast Static) {}
457    fn exit_string(&mut self, _: &'ast String) {}
458    fn exit_struct(&mut self, _: &'ast Struct) {}
459    fn exit_struct_definition_body(&mut self, _: &'ast StructDefinitionBody) {}
460    fn exit_struct_definition_body_brace(&mut self, _: &'ast StructDefinitionBodyBrace) {}
461    fn exit_struct_definition_body_tuple(&mut self, _: &'ast StructDefinitionBodyTuple) {}
462    fn exit_struct_definition_field_named(&mut self, _: &'ast StructDefinitionFieldNamed) {}
463    fn exit_struct_definition_field_unnamed(&mut self, _: &'ast StructDefinitionFieldUnnamed) {}
464    fn exit_struct_literal(&mut self, _: &'ast StructLiteral) {}
465    fn exit_struct_literal_field(&mut self, _: &'ast StructLiteralField) {}
466    fn exit_trait(&mut self, _: &'ast Trait) {}
467    fn exit_trait_bound(&mut self, _: &'ast TraitBound) {}
468    fn exit_trait_bound_lifetime(&mut self, _: &'ast TraitBoundLifetime) {}
469    fn exit_trait_bound_normal(&mut self, _: &'ast TraitBoundNormal) {}
470    fn exit_trait_bound_relaxed(&mut self, _: &'ast TraitBoundRelaxed) {}
471    fn exit_trait_bound_type(&mut self, _: &'ast TraitBoundType) {}
472    fn exit_trait_bounds(&mut self, _: &'ast TraitBounds) {}
473    fn exit_trait_impl_argument(&mut self, _: &'ast TraitImplArgument) {}
474    fn exit_trait_impl_argument_named(&mut self, _: &'ast TraitImplArgumentNamed) {}
475    fn exit_trait_impl_function_header(&mut self, _: &'ast TraitImplFunctionHeader) {}
476    fn exit_trait_member(&mut self, _: &'ast TraitMember) {}
477    fn exit_trait_member_const(&mut self, _: &'ast TraitMemberConst) {}
478    fn exit_trait_member_function(&mut self, _: &'ast TraitMemberFunction) {}
479    fn exit_trait_member_type(&mut self, _: &'ast TraitMemberType) {}
480    fn exit_try_operator(&mut self, _: &'ast TryOperator) {}
481    fn exit_tuple(&mut self, _: &'ast Tuple) {}
482    fn exit_turbofish(&mut self, _: &'ast Turbofish) {}
483    fn exit_type(&mut self, _: &'ast Type) {}
484    fn exit_type_additional(&mut self, _: &'ast TypeAdditional) {}
485    fn exit_type_alias(&mut self, _: &'ast TypeAlias) {}
486    fn exit_type_array(&mut self, _: &'ast TypeArray) {}
487    fn exit_type_disambiguation(&mut self, _: &'ast TypeDisambiguation) {}
488    fn exit_type_dyn_trait(&mut self, _: &'ast TypeDynTrait) {}
489    fn exit_type_function(&mut self, _: &'ast TypeFunction) {}
490    fn exit_type_function_argument(&mut self, _: &'ast TypeFunctionArgument) {}
491    fn exit_type_function_argument_named(&mut self, _: &'ast TypeFunctionArgumentNamed) {}
492    fn exit_type_generics(&mut self, _: &'ast TypeGenerics) {}
493    fn exit_type_generics_angle(&mut self, _: &'ast TypeGenericsAngle) {}
494    fn exit_type_generics_angle_member(&mut self, _: &'ast TypeGenericsAngleMember) {}
495    fn exit_type_generics_function(&mut self, _: &'ast TypeGenericsFunction) {}
496    fn exit_type_higher_ranked_trait_bounds(&mut self, _: &'ast TypeHigherRankedTraitBounds) {}
497    fn exit_type_higher_ranked_trait_bounds_child(&mut self, _: &'ast TypeHigherRankedTraitBoundsChild) {}
498    fn exit_type_impl_trait(&mut self, _: &'ast TypeImplTrait) {}
499    fn exit_type_kind(&mut self, _: &'ast TypeKind) {}
500    fn exit_type_named(&mut self, _: &'ast TypeNamed) {}
501    fn exit_type_named_component(&mut self, _: &'ast TypeNamedComponent) {}
502    fn exit_type_pointer(&mut self, _: &'ast TypePointer) {}
503    fn exit_type_reference(&mut self, _: &'ast TypeReference) {}
504    fn exit_type_reference_kind(&mut self, _: &'ast TypeReferenceKind) {}
505    fn exit_type_slice(&mut self, _: &'ast TypeSlice) {}
506    fn exit_type_tuple(&mut self, _: &'ast TypeTuple) {}
507    fn exit_unary(&mut self, _: &'ast Unary) {}
508    fn exit_union(&mut self, _: &'ast Union) {}
509    fn exit_unsafe_block(&mut self, _: &'ast UnsafeBlock) {}
510    fn exit_use(&mut self, _: &'ast Use) {}
511    fn exit_use_path(&mut self, _: &'ast UsePath) {}
512    fn exit_use_tail(&mut self, _: &'ast UseTail) {}
513    fn exit_use_tail_glob(&mut self, _: &'ast UseTailGlob) {}
514    fn exit_use_tail_ident(&mut self, _: &'ast UseTailIdent) {}
515    fn exit_use_tail_multi(&mut self, _: &'ast UseTailMulti) {}
516    fn exit_value(&mut self, _: &'ast Value) {}
517    fn exit_visibility(&mut self, _: &'ast Visibility) {}
518    fn exit_visibility_public(&mut self, _: &'ast VisibilityPublic) {}
519    fn exit_where(&mut self, _: &'ast Where) {}
520    fn exit_where_kind(&mut self, _: &'ast WhereKind) {}
521    fn exit_where_lifetime(&mut self, _: &'ast WhereLifetime) {}
522    fn exit_where_type(&mut self, _: &'ast WhereType) {}
523    fn exit_while(&mut self, _: &'ast While) {}
524    fn exit_while_let(&mut self, _: &'ast WhileLet) {}
525    fn exit_whitespace(&mut self, _: &'ast Whitespace) {}
526}
527
528/// A visitor of mutable AST nodes
529///
530/// See [`Visitor`] for general visitor information. Unlike an
531/// immutable visitor, a mutable visitor makes no attempt to allow
532/// saving references to the AST nodes as aliasing would interfere
533/// with the implementation. Since you could use this visitor to add
534/// or remove AST nodes, saving a reference is of little use.
535pub trait VisitorMut {
536    fn visit_argument(&mut self, _: &mut Argument) -> Control { Control::Continue }
537    fn visit_array(&mut self, _: &mut Array) -> Control { Control::Continue }
538    fn visit_array_explicit(&mut self, _: &mut ArrayExplicit) -> Control { Control::Continue }
539    fn visit_array_repeated(&mut self, _: &mut ArrayRepeated) -> Control { Control::Continue }
540    fn visit_as_type(&mut self, _: &mut AsType) -> Control { Control::Continue }
541    fn visit_ascription(&mut self, _: &mut Ascription) -> Control { Control::Continue }
542    fn visit_associated_type(&mut self, _: &mut AssociatedType) -> Control { Control::Continue }
543    fn visit_associated_type_value(&mut self, _: &mut AssociatedTypeValue) -> Control { Control::Continue }
544    fn visit_associated_type_value_equal(&mut self, _: &mut AssociatedTypeValueEqual) -> Control { Control::Continue }
545    fn visit_associated_type_value_bound(&mut self, _: &mut AssociatedTypeValueBound) -> Control { Control::Continue }
546    fn visit_async_block(&mut self, _: &mut AsyncBlock) -> Control { Control::Continue }
547    fn visit_attribute(&mut self, _: &mut Attribute) -> Control { Control::Continue }
548    fn visit_attribute_literal(&mut self, _: &mut AttributeLiteral) -> Control { Control::Continue }
549    fn visit_attribute_containing(&mut self, _: &mut AttributeContaining) -> Control { Control::Continue }
550    fn visit_attribute_containing_literal(&mut self, _: &mut AttributeContainingLiteral) -> Control { Control::Continue }
551    fn visit_attributed_enum_variant(&mut self, _: &mut Attributed<EnumVariant>) -> Control { Control::Continue }
552    fn visit_attributed_expression(&mut self, _: &mut Attributed<Expression>) -> Control { Control::Continue }
553    fn visit_attributed_extern_block_member(&mut self, _: &mut Attributed<ExternBlockMember>) -> Control { Control::Continue }
554    fn visit_attributed_generic_declaration_const(&mut self, _: &mut Attributed<GenericDeclarationConst>) -> Control { Control::Continue }
555    fn visit_attributed_generic_declaration_lifetime(&mut self, _: &mut Attributed<GenericDeclarationLifetime>) -> Control { Control::Continue }
556    fn visit_attributed_generic_declaration_type(&mut self, _: &mut Attributed<GenericDeclarationType>) -> Control { Control::Continue }
557    fn visit_attributed_impl_member(&mut self, _: &mut Attributed<ImplMember>) -> Control { Control::Continue }
558    fn visit_attributed_item(&mut self, _: &mut Attributed<Item>) -> Control { Control::Continue }
559    fn visit_attributed_struct_definition_field_named(&mut self, _: &mut Attributed<StructDefinitionFieldNamed>) -> Control { Control::Continue }
560    fn visit_attributed_struct_definition_field_unnamed(&mut self, _: &mut Attributed<StructDefinitionFieldUnnamed>) -> Control { Control::Continue }
561    fn visit_attributed_trait_member(&mut self, _: &mut Attributed<TraitMember>) -> Control { Control::Continue }
562    fn visit_binary(&mut self, _: &mut Binary) -> Control { Control::Continue }
563    fn visit_block(&mut self, _: &mut Block) -> Control { Control::Continue }
564    fn visit_break(&mut self, _: &mut Break) -> Control { Control::Continue }
565    fn visit_byte(&mut self, _: &mut Byte) -> Control { Control::Continue }
566    fn visit_byte_string(&mut self, _: &mut ByteString) -> Control { Control::Continue }
567    fn visit_call(&mut self, _: &mut Call) -> Control { Control::Continue }
568    fn visit_character(&mut self, _: &mut Character) -> Control { Control::Continue }
569    fn visit_closure(&mut self, _: &mut Closure) -> Control { Control::Continue }
570    fn visit_closure_arg(&mut self, _: &mut ClosureArg) -> Control { Control::Continue }
571    fn visit_comment(&mut self, _: &mut Comment) -> Control { Control::Continue }
572    fn visit_const(&mut self, _: &mut Const) -> Control { Control::Continue }
573    fn visit_continue(&mut self, _: &mut Continue) -> Control { Control::Continue }
574    fn visit_crate(&mut self, _: &mut Crate) -> Control { Control::Continue }
575    fn visit_dereference(&mut self, _: &mut Dereference) -> Control { Control::Continue }
576    fn visit_disambiguation(&mut self, _: &mut Disambiguation) -> Control { Control::Continue }
577    fn visit_enum(&mut self, _: &mut Enum) -> Control { Control::Continue }
578    fn visit_enum_variant(&mut self, _: &mut EnumVariant) -> Control { Control::Continue }
579    fn visit_enum_variant_body(&mut self, _: &mut EnumVariantBody) -> Control { Control::Continue }
580    fn visit_expression(&mut self, _: &mut Expression) -> Control { Control::Continue }
581    fn visit_expression_box(&mut self, _: &mut ExpressionBox) -> Control { Control::Continue }
582    fn visit_extern_block(&mut self, _: &mut ExternBlock) -> Control { Control::Continue }
583    fn visit_extern_block_member(&mut self, _: &mut ExternBlockMember) -> Control { Control::Continue }
584    fn visit_extern_block_member_function(&mut self, _: &mut ExternBlockMemberFunction) -> Control { Control::Continue }
585    fn visit_extern_block_member_function_argument(&mut self, _: &mut ExternBlockMemberFunctionArgument) -> Control { Control::Continue }
586    fn visit_extern_block_member_function_argument_named(&mut self, _: &mut ExternBlockMemberFunctionArgumentNamed) -> Control { Control::Continue }
587    fn visit_extern_block_member_function_argument_variadic(&mut self, _: &mut ExternBlockMemberFunctionArgumentVariadic) -> Control { Control::Continue }
588    fn visit_extern_block_member_static(&mut self, _: &mut ExternBlockMemberStatic) -> Control { Control::Continue }
589    fn visit_extern_block_member_type(&mut self, _: &mut ExternBlockMemberType) -> Control { Control::Continue }
590    fn visit_field_access(&mut self, _: &mut FieldAccess) -> Control { Control::Continue }
591    fn visit_field_name(&mut self, _: &mut FieldName) -> Control { Control::Continue }
592    fn visit_file(&mut self, _: &mut File) -> Control { Control::Continue }
593    fn visit_for_loop(&mut self, _: &mut ForLoop) -> Control { Control::Continue }
594    fn visit_function(&mut self, _: &mut Function) -> Control { Control::Continue }
595    fn visit_function_header(&mut self, _: &mut FunctionHeader) -> Control { Control::Continue }
596    fn visit_function_qualifiers(&mut self, _: &mut FunctionQualifiers) -> Control { Control::Continue }
597    fn visit_generic_declaration_const(&mut self, _: &mut GenericDeclarationConst) -> Control { Control::Continue }
598    fn visit_generic_declaration_lifetime(&mut self, _: &mut GenericDeclarationLifetime) -> Control { Control::Continue }
599    fn visit_generic_declaration_type(&mut self, _: &mut GenericDeclarationType) -> Control { Control::Continue }
600    fn visit_generic_declarations(&mut self, _: &mut GenericDeclarations) -> Control { Control::Continue }
601    fn visit_ident(&mut self, _: &mut Ident) -> Control { Control::Continue }
602    fn visit_if(&mut self, _: &mut If) -> Control { Control::Continue }
603    fn visit_if_let(&mut self, _: &mut IfLet) -> Control { Control::Continue }
604    fn visit_impl(&mut self, _: &mut Impl) -> Control { Control::Continue }
605    fn visit_impl_const(&mut self, _: &mut ImplConst) -> Control { Control::Continue }
606    fn visit_impl_function(&mut self, _: &mut ImplFunction) -> Control { Control::Continue }
607    fn visit_impl_kind(&mut self, _: &mut ImplKind) -> Control { Control::Continue }
608    fn visit_impl_member(&mut self, _: &mut ImplMember) -> Control { Control::Continue }
609    fn visit_impl_of_inherent(&mut self, _: &mut ImplOfInherent) -> Control { Control::Continue }
610    fn visit_impl_of_trait(&mut self, _: &mut ImplOfTrait) -> Control { Control::Continue }
611    fn visit_impl_of_trait_type(&mut self, _: &mut ImplOfTraitType) -> Control { Control::Continue }
612    fn visit_impl_type(&mut self, _: &mut ImplType) -> Control { Control::Continue }
613    fn visit_item(&mut self, _: &mut Item) -> Control { Control::Continue }
614    fn visit_let(&mut self, _: &mut Let) -> Control { Control::Continue }
615    fn visit_lifetime(&mut self, _: &mut Lifetime) -> Control { Control::Continue }
616    fn visit_loop(&mut self, _: &mut Loop) -> Control { Control::Continue }
617    fn visit_macro_call(&mut self, _: &mut MacroCall) -> Control { Control::Continue }
618    fn visit_macro_call_args(&mut self, _: &mut MacroCallArgs) -> Control { Control::Continue }
619    fn visit_match(&mut self, _: &mut Match) -> Control { Control::Continue }
620    fn visit_match_arm(&mut self, _: &mut MatchArm) -> Control { Control::Continue }
621    fn visit_match_hand(&mut self, _: &mut MatchHand) -> Control { Control::Continue }
622    fn visit_module(&mut self, _: &mut Module) -> Control { Control::Continue }
623    fn visit_named_argument(&mut self, _: &mut NamedArgument) -> Control { Control::Continue }
624    fn visit_number(&mut self, _: &mut Number) -> Control { Control::Continue }
625    fn visit_number_value(&mut self, _: &mut NumberValue) -> Control { Control::Continue }
626    fn visit_number_binary(&mut self, _: &mut NumberBinary) -> Control { Control::Continue }
627    fn visit_number_decimal(&mut self, _: &mut NumberDecimal) -> Control { Control::Continue }
628    fn visit_number_hexadecimal(&mut self, _: &mut NumberHexadecimal) -> Control { Control::Continue }
629    fn visit_number_octal(&mut self, _: &mut NumberOctal) -> Control { Control::Continue }
630    fn visit_parenthetical(&mut self, _: &mut Parenthetical) -> Control { Control::Continue }
631    fn visit_path(&mut self, _: &mut Path) -> Control { Control::Continue }
632    fn visit_path_component(&mut self, _: &mut PathComponent) -> Control { Control::Continue }
633    fn visit_pathed_ident(&mut self, _: &mut PathedIdent) -> Control { Control::Continue }
634    fn visit_pattern(&mut self, _: &mut Pattern) -> Control { Control::Continue }
635    fn visit_pattern_box(&mut self, _: &mut PatternBox) -> Control { Control::Continue }
636    fn visit_pattern_byte(&mut self, _: &mut PatternByte) -> Control { Control::Continue }
637    fn visit_pattern_byte_string(&mut self, _: &mut PatternByteString) -> Control { Control::Continue }
638    fn visit_pattern_character(&mut self, _: &mut PatternCharacter) -> Control { Control::Continue }
639    fn visit_pattern_ident(&mut self, _: &mut PatternIdent) -> Control { Control::Continue }
640    fn visit_pattern_kind(&mut self, _: &mut PatternKind) -> Control { Control::Continue }
641    fn visit_pattern_macro_call(&mut self, _: &mut PatternMacroCall) -> Control { Control::Continue }
642    fn visit_pattern_name(&mut self, _: &mut PatternName) -> Control { Control::Continue }
643    fn visit_pattern_number(&mut self, _: &mut PatternNumber) -> Control { Control::Continue }
644    fn visit_pattern_range_component(&mut self, _: &mut PatternRangeComponent) -> Control { Control::Continue }
645    fn visit_pattern_range_exclusive(&mut self, _: &mut PatternRangeExclusive) -> Control { Control::Continue }
646    fn visit_pattern_range_inclusive(&mut self, _: &mut PatternRangeInclusive) -> Control { Control::Continue }
647    fn visit_pattern_reference(&mut self, _: &mut PatternReference) -> Control { Control::Continue }
648    fn visit_pattern_slice(&mut self, _: &mut PatternSlice) -> Control { Control::Continue }
649    fn visit_pattern_slice_member(&mut self, _: &mut PatternSliceMember) -> Control { Control::Continue }
650    fn visit_pattern_slice_subslice(&mut self, _: &mut PatternSliceSubslice) -> Control { Control::Continue }
651    fn visit_pattern_string(&mut self, _: &mut PatternString) -> Control { Control::Continue }
652    fn visit_pattern_struct(&mut self, _: &mut PatternStruct) -> Control { Control::Continue }
653    fn visit_pattern_struct_field(&mut self, _: &mut PatternStructField) -> Control { Control::Continue }
654    fn visit_pattern_struct_field_long(&mut self, _: &mut PatternStructFieldLong) -> Control { Control::Continue }
655    fn visit_pattern_struct_field_short(&mut self, _: &mut PatternStructFieldShort) -> Control { Control::Continue }
656    fn visit_pattern_tuple(&mut self, _: &mut PatternTuple) -> Control { Control::Continue }
657    fn visit_pattern_tuple_member(&mut self, _: &mut PatternTupleMember) -> Control { Control::Continue }
658    fn visit_range(&mut self, _: &mut Range) -> Control { Control::Continue }
659    fn visit_range_inclusive(&mut self, _: &mut RangeInclusive) -> Control { Control::Continue }
660    fn visit_reference(&mut self, _: &mut Reference) -> Control { Control::Continue }
661    fn visit_return(&mut self, _: &mut Return) -> Control { Control::Continue }
662    fn visit_self_argument(&mut self, _: &mut SelfArgument) -> Control { Control::Continue }
663    fn visit_self_argument_longhand(&mut self, _: &mut SelfArgumentLonghand) -> Control { Control::Continue }
664    fn visit_self_argument_shorthand(&mut self, _: &mut SelfArgumentShorthand) -> Control { Control::Continue }
665    fn visit_self_argument_shorthand_qualifier(&mut self, _: &mut SelfArgumentShorthandQualifier) -> Control { Control::Continue }
666    fn visit_slice(&mut self, _: &mut Slice) -> Control { Control::Continue }
667    fn visit_statement(&mut self, _: &mut Statement) -> Control { Control::Continue }
668    fn visit_static(&mut self, _: &mut Static) -> Control { Control::Continue }
669    fn visit_string(&mut self, _: &mut String) -> Control { Control::Continue }
670    fn visit_struct(&mut self, _: &mut Struct) -> Control { Control::Continue }
671    fn visit_struct_definition_body(&mut self, _: &mut StructDefinitionBody) -> Control { Control::Continue }
672    fn visit_struct_definition_body_brace(&mut self, _: &mut StructDefinitionBodyBrace) -> Control { Control::Continue }
673    fn visit_struct_definition_body_tuple(&mut self, _: &mut StructDefinitionBodyTuple) -> Control { Control::Continue }
674    fn visit_struct_definition_field_named(&mut self, _: &mut StructDefinitionFieldNamed) -> Control { Control::Continue }
675    fn visit_struct_definition_field_unnamed(&mut self, _: &mut StructDefinitionFieldUnnamed) -> Control { Control::Continue }
676    fn visit_struct_literal(&mut self, _: &mut StructLiteral) -> Control { Control::Continue }
677    fn visit_struct_literal_field(&mut self, _: &mut StructLiteralField) -> Control { Control::Continue }
678    fn visit_trait(&mut self, _: &mut Trait) -> Control { Control::Continue }
679    fn visit_trait_bound(&mut self, _: &mut TraitBound) -> Control { Control::Continue }
680    fn visit_trait_bound_lifetime(&mut self, _: &mut TraitBoundLifetime) -> Control { Control::Continue }
681    fn visit_trait_bound_normal(&mut self, _: &mut TraitBoundNormal) -> Control { Control::Continue }
682    fn visit_trait_bound_relaxed(&mut self, _: &mut TraitBoundRelaxed) -> Control { Control::Continue }
683    fn visit_trait_bound_type(&mut self, _: &mut TraitBoundType) -> Control { Control::Continue }
684    fn visit_trait_bounds(&mut self, _: &mut TraitBounds) -> Control { Control::Continue }
685    fn visit_trait_impl_argument(&mut self, _: &mut TraitImplArgument) -> Control { Control::Continue }
686    fn visit_trait_impl_argument_named(&mut self, _: &mut TraitImplArgumentNamed) -> Control { Control::Continue }
687    fn visit_trait_impl_function_header(&mut self, _: &mut TraitImplFunctionHeader) -> Control { Control::Continue }
688    fn visit_trait_member(&mut self, _: &mut TraitMember) -> Control { Control::Continue }
689    fn visit_trait_member_const(&mut self, _: &mut TraitMemberConst) -> Control { Control::Continue }
690    fn visit_trait_member_function(&mut self, _: &mut TraitMemberFunction) -> Control { Control::Continue }
691    fn visit_trait_member_type(&mut self, _: &mut TraitMemberType) -> Control { Control::Continue }
692    fn visit_try_operator(&mut self, _: &mut TryOperator) -> Control { Control::Continue }
693    fn visit_tuple(&mut self, _: &mut Tuple) -> Control { Control::Continue }
694    fn visit_turbofish(&mut self, _: &mut Turbofish) -> Control { Control::Continue }
695    fn visit_type(&mut self, _: &mut Type) -> Control { Control::Continue }
696    fn visit_type_additional(&mut self, _: &mut TypeAdditional) -> Control { Control::Continue }
697    fn visit_type_alias(&mut self, _: &mut TypeAlias) -> Control { Control::Continue }
698    fn visit_type_array(&mut self, _: &mut TypeArray) -> Control { Control::Continue }
699    fn visit_type_disambiguation(&mut self, _: &mut TypeDisambiguation) -> Control { Control::Continue }
700    fn visit_type_dyn_trait(&mut self, _: &mut TypeDynTrait) -> Control { Control::Continue }
701    fn visit_type_function(&mut self, _: &mut TypeFunction) -> Control { Control::Continue }
702    fn visit_type_function_argument(&mut self, _: &mut TypeFunctionArgument) -> Control { Control::Continue }
703    fn visit_type_function_argument_named(&mut self, _: &mut TypeFunctionArgumentNamed) -> Control { Control::Continue }
704    fn visit_type_generics(&mut self, _: &mut TypeGenerics) -> Control { Control::Continue }
705    fn visit_type_generics_angle(&mut self, _: &mut TypeGenericsAngle) -> Control { Control::Continue }
706    fn visit_type_generics_angle_member(&mut self, _: &mut TypeGenericsAngleMember) -> Control { Control::Continue }
707    fn visit_type_generics_function(&mut self, _: &mut TypeGenericsFunction) -> Control { Control::Continue }
708    fn visit_type_higher_ranked_trait_bounds(&mut self, _: &mut TypeHigherRankedTraitBounds) -> Control { Control::Continue }
709    fn visit_type_higher_ranked_trait_bounds_child(&mut self, _: &mut TypeHigherRankedTraitBoundsChild) -> Control { Control::Continue }
710    fn visit_type_impl_trait(&mut self, _: &mut TypeImplTrait) -> Control { Control::Continue }
711    fn visit_type_kind(&mut self, _: &mut TypeKind) -> Control { Control::Continue }
712    fn visit_type_named(&mut self, _: &mut TypeNamed) -> Control { Control::Continue }
713    fn visit_type_named_component(&mut self, _: &mut TypeNamedComponent) -> Control { Control::Continue }
714    fn visit_type_pointer(&mut self, _: &mut TypePointer) -> Control { Control::Continue }
715    fn visit_type_reference(&mut self, _: &mut TypeReference) -> Control { Control::Continue }
716    fn visit_type_reference_kind(&mut self, _: &mut TypeReferenceKind) -> Control { Control::Continue }
717    fn visit_type_slice(&mut self, _: &mut TypeSlice) -> Control { Control::Continue }
718    fn visit_type_tuple(&mut self, _: &mut TypeTuple) -> Control { Control::Continue }
719    fn visit_unary(&mut self, _: &mut Unary) -> Control { Control::Continue }
720    fn visit_union(&mut self, _: &mut Union) -> Control { Control::Continue }
721    fn visit_unsafe_block(&mut self, _: &mut UnsafeBlock) -> Control { Control::Continue }
722    fn visit_use(&mut self, _: &mut Use) -> Control { Control::Continue }
723    fn visit_use_path(&mut self, _: &mut UsePath) -> Control { Control::Continue }
724    fn visit_use_tail(&mut self, _: &mut UseTail) -> Control { Control::Continue }
725    fn visit_use_tail_glob(&mut self, _: &mut UseTailGlob) -> Control { Control::Continue }
726    fn visit_use_tail_ident(&mut self, _: &mut UseTailIdent) -> Control { Control::Continue }
727    fn visit_use_tail_multi(&mut self, _: &mut UseTailMulti) -> Control { Control::Continue }
728    fn visit_value(&mut self, _: &mut Value) -> Control { Control::Continue }
729    fn visit_visibility(&mut self, _: &mut Visibility) -> Control { Control::Continue }
730    fn visit_visibility_public(&mut self, _: &mut VisibilityPublic) -> Control { Control::Continue }
731    fn visit_where(&mut self, _: &mut Where) -> Control { Control::Continue }
732    fn visit_where_kind(&mut self, _: &mut WhereKind) -> Control { Control::Continue }
733    fn visit_where_lifetime(&mut self, _: &mut WhereLifetime) -> Control { Control::Continue }
734    fn visit_where_type(&mut self, _: &mut WhereType) -> Control { Control::Continue }
735    fn visit_while(&mut self, _: &mut While) -> Control { Control::Continue }
736    fn visit_while_let(&mut self, _: &mut WhileLet) -> Control { Control::Continue }
737    fn visit_whitespace(&mut self, _: &mut Whitespace) -> Control { Control::Continue }
738
739    fn exit_argument(&mut self, _: &mut Argument) {}
740    fn exit_array(&mut self, _: &mut Array) {}
741    fn exit_array_explicit(&mut self, _: &mut ArrayExplicit) {}
742    fn exit_array_repeated(&mut self, _: &mut ArrayRepeated) {}
743    fn exit_as_type(&mut self, _: &mut AsType) {}
744    fn exit_ascription(&mut self, _: &mut Ascription) {}
745    fn exit_associated_type(&mut self, _: &mut AssociatedType) {}
746    fn exit_associated_type_value(&mut self, _: &mut AssociatedTypeValue) {}
747    fn exit_associated_type_value_equal(&mut self, _: &mut AssociatedTypeValueEqual) {}
748    fn exit_associated_type_value_bound(&mut self, _: &mut AssociatedTypeValueBound) {}
749    fn exit_async_block(&mut self, _: &mut AsyncBlock) {}
750    fn exit_attribute(&mut self, _: &mut Attribute) {}
751    fn exit_attribute_literal(&mut self, _: &mut AttributeLiteral) {}
752    fn exit_attribute_containing(&mut self, _: &mut AttributeContaining) {}
753    fn exit_attribute_containing_literal(&mut self, _: &mut AttributeContainingLiteral) {}
754    fn exit_attributed_enum_variant(&mut self, _: &mut Attributed<EnumVariant>) {}
755    fn exit_attributed_expression(&mut self, _: &mut Attributed<Expression>) {}
756    fn exit_attributed_extern_block_member(&mut self, _: &mut Attributed<ExternBlockMember>) {}
757    fn exit_attributed_generic_declaration_const(&mut self, _: &mut Attributed<GenericDeclarationConst>) {}
758    fn exit_attributed_generic_declaration_lifetime(&mut self, _: &mut Attributed<GenericDeclarationLifetime>) {}
759    fn exit_attributed_generic_declaration_type(&mut self, _: &mut Attributed<GenericDeclarationType>) {}
760    fn exit_attributed_impl_member(&mut self, _: &mut Attributed<ImplMember>) {}
761    fn exit_attributed_item(&mut self, _: &mut Attributed<Item>) {}
762    fn exit_attributed_struct_definition_field_named(&mut self, _: &mut Attributed<StructDefinitionFieldNamed>) {}
763    fn exit_attributed_struct_definition_field_unnamed(&mut self, _: &mut Attributed<StructDefinitionFieldUnnamed>) {}
764    fn exit_attributed_trait_member(&mut self, _: &mut Attributed<TraitMember>) {}
765    fn exit_binary(&mut self, _: &mut Binary) {}
766    fn exit_block(&mut self, _: &mut Block) {}
767    fn exit_break(&mut self, _: &mut Break) {}
768    fn exit_byte(&mut self, _: &mut Byte) {}
769    fn exit_byte_string(&mut self, _: &mut ByteString) {}
770    fn exit_call(&mut self, _: &mut Call) {}
771    fn exit_character(&mut self, _: &mut Character) {}
772    fn exit_closure(&mut self, _: &mut Closure) {}
773    fn exit_closure_arg(&mut self, _: &mut ClosureArg) {}
774    fn exit_comment(&mut self, _: &mut Comment) {}
775    fn exit_const(&mut self, _: &mut Const) {}
776    fn exit_continue(&mut self, _: &mut Continue) {}
777    fn exit_crate(&mut self, _: &mut Crate) {}
778    fn exit_dereference(&mut self, _: &mut Dereference) {}
779    fn exit_disambiguation(&mut self, _: &mut Disambiguation) {}
780    fn exit_enum(&mut self, _: &mut Enum) {}
781    fn exit_enum_variant(&mut self, _: &mut EnumVariant) {}
782    fn exit_enum_variant_body(&mut self, _: &mut EnumVariantBody) {}
783    fn exit_expression(&mut self, _: &mut Expression) {}
784    fn exit_expression_box(&mut self, _: &mut ExpressionBox) {}
785    fn exit_extern_block(&mut self, _: &mut ExternBlock) {}
786    fn exit_extern_block_member(&mut self, _: &mut ExternBlockMember) {}
787    fn exit_extern_block_member_function(&mut self, _: &mut ExternBlockMemberFunction) {}
788    fn exit_extern_block_member_function_argument(&mut self, _: &mut ExternBlockMemberFunctionArgument) {}
789    fn exit_extern_block_member_function_argument_named(&mut self, _: &mut ExternBlockMemberFunctionArgumentNamed) {}
790    fn exit_extern_block_member_function_argument_variadic(&mut self, _: &mut ExternBlockMemberFunctionArgumentVariadic) {}
791    fn exit_extern_block_member_static(&mut self, _: &mut ExternBlockMemberStatic) {}
792    fn exit_extern_block_member_type(&mut self, _: &mut ExternBlockMemberType) {}
793    fn exit_field_access(&mut self, _: &mut FieldAccess) {}
794    fn exit_field_name(&mut self, _: &mut FieldName) {}
795    fn exit_file(&mut self, _: &mut File) {}
796    fn exit_for_loop(&mut self, _: &mut ForLoop) {}
797    fn exit_function(&mut self, _: &mut Function) {}
798    fn exit_function_header(&mut self, _: &mut FunctionHeader) {}
799    fn exit_function_qualifiers(&mut self, _: &mut FunctionQualifiers) {}
800    fn exit_generic_declaration_const(&mut self, _: &mut GenericDeclarationConst) {}
801    fn exit_generic_declaration_lifetime(&mut self, _: &mut GenericDeclarationLifetime) {}
802    fn exit_generic_declaration_type(&mut self, _: &mut GenericDeclarationType) {}
803    fn exit_generic_declarations(&mut self, _: &mut GenericDeclarations) {}
804    fn exit_ident(&mut self, _: &mut Ident) {}
805    fn exit_if(&mut self, _: &mut If) {}
806    fn exit_if_let(&mut self, _: &mut IfLet) {}
807    fn exit_impl(&mut self, _: &mut Impl) {}
808    fn exit_impl_const(&mut self, _: &mut ImplConst) {}
809    fn exit_impl_function(&mut self, _: &mut ImplFunction) {}
810    fn exit_impl_kind(&mut self, _: &mut ImplKind) {}
811    fn exit_impl_member(&mut self, _: &mut ImplMember) {}
812    fn exit_impl_of_inherent(&mut self, _: &mut ImplOfInherent) {}
813    fn exit_impl_of_trait(&mut self, _: &mut ImplOfTrait) {}
814    fn exit_impl_of_trait_type(&mut self, _: &mut ImplOfTraitType) {}
815    fn exit_impl_type(&mut self, _: &mut ImplType) {}
816    fn exit_item(&mut self, _: &mut Item) {}
817    fn exit_let(&mut self, _: &mut Let) {}
818    fn exit_lifetime(&mut self, _: &mut Lifetime) {}
819    fn exit_loop(&mut self, _: &mut Loop) {}
820    fn exit_macro_call(&mut self, _: &mut MacroCall) {}
821    fn exit_macro_call_args(&mut self, _: &mut MacroCallArgs) {}
822    fn exit_match(&mut self, _: &mut Match) {}
823    fn exit_match_arm(&mut self, _: &mut MatchArm) {}
824    fn exit_match_hand(&mut self, _: &mut MatchHand) {}
825    fn exit_module(&mut self, _: &mut Module) {}
826    fn exit_named_argument(&mut self, _: &mut NamedArgument) {}
827    fn exit_number(&mut self, _: &mut Number) {}
828    fn exit_number_value(&mut self, _: &mut NumberValue) {}
829    fn exit_number_binary(&mut self, _: &mut NumberBinary) {}
830    fn exit_number_decimal(&mut self, _: &mut NumberDecimal) {}
831    fn exit_number_hexadecimal(&mut self, _: &mut NumberHexadecimal) {}
832    fn exit_number_octal(&mut self, _: &mut NumberOctal) {}
833    fn exit_parenthetical(&mut self, _: &mut Parenthetical) {}
834    fn exit_path(&mut self, _: &mut Path) {}
835    fn exit_path_component(&mut self, _: &mut PathComponent) {}
836    fn exit_pathed_ident(&mut self, _: &mut PathedIdent) {}
837    fn exit_pattern(&mut self, _: &mut Pattern) {}
838    fn exit_pattern_box(&mut self, _: &mut PatternBox) {}
839    fn exit_pattern_byte(&mut self, _: &mut PatternByte) {}
840    fn exit_pattern_byte_string(&mut self, _: &mut PatternByteString) {}
841    fn exit_pattern_character(&mut self, _: &mut PatternCharacter) {}
842    fn exit_pattern_ident(&mut self, _: &mut PatternIdent) {}
843    fn exit_pattern_kind(&mut self, _: &mut PatternKind) {}
844    fn exit_pattern_macro_call(&mut self, _: &mut PatternMacroCall) {}
845    fn exit_pattern_name(&mut self, _: &mut PatternName) {}
846    fn exit_pattern_number(&mut self, _: &mut PatternNumber) {}
847    fn exit_pattern_range_component(&mut self, _: &mut PatternRangeComponent) {}
848    fn exit_pattern_range_exclusive(&mut self, _: &mut PatternRangeExclusive) {}
849    fn exit_pattern_range_inclusive(&mut self, _: &mut PatternRangeInclusive) {}
850    fn exit_pattern_reference(&mut self, _: &mut PatternReference) {}
851    fn exit_pattern_slice(&mut self, _: &mut PatternSlice) {}
852    fn exit_pattern_slice_member(&mut self, _: &mut PatternSliceMember) {}
853    fn exit_pattern_slice_subslice(&mut self, _: &mut PatternSliceSubslice) {}
854    fn exit_pattern_string(&mut self, _: &mut PatternString) {}
855    fn exit_pattern_struct(&mut self, _: &mut PatternStruct) {}
856    fn exit_pattern_struct_field(&mut self, _: &mut PatternStructField) {}
857    fn exit_pattern_struct_field_long(&mut self, _: &mut PatternStructFieldLong) {}
858    fn exit_pattern_struct_field_short(&mut self, _: &mut PatternStructFieldShort) {}
859    fn exit_pattern_tuple(&mut self, _: &mut PatternTuple) {}
860    fn exit_pattern_tuple_member(&mut self, _: &mut PatternTupleMember) {}
861    fn exit_range(&mut self, _: &mut Range) {}
862    fn exit_range_inclusive(&mut self, _: &mut RangeInclusive) {}
863    fn exit_reference(&mut self, _: &mut Reference) {}
864    fn exit_return(&mut self, _: &mut Return) {}
865    fn exit_self_argument(&mut self, _: &mut SelfArgument) {}
866    fn exit_self_argument_longhand(&mut self, _: &mut SelfArgumentLonghand) {}
867    fn exit_self_argument_shorthand(&mut self, _: &mut SelfArgumentShorthand) {}
868    fn exit_self_argument_shorthand_qualifier(&mut self, _: &mut SelfArgumentShorthandQualifier) {}
869    fn exit_slice(&mut self, _: &mut Slice) {}
870    fn exit_statement(&mut self, _: &mut Statement) {}
871    fn exit_static(&mut self, _: &mut Static) {}
872    fn exit_string(&mut self, _: &mut String) {}
873    fn exit_struct(&mut self, _: &mut Struct) {}
874    fn exit_struct_definition_body(&mut self, _: &mut StructDefinitionBody) {}
875    fn exit_struct_definition_body_brace(&mut self, _: &mut StructDefinitionBodyBrace) {}
876    fn exit_struct_definition_body_tuple(&mut self, _: &mut StructDefinitionBodyTuple) {}
877    fn exit_struct_definition_field_named(&mut self, _: &mut StructDefinitionFieldNamed) {}
878    fn exit_struct_definition_field_unnamed(&mut self, _: &mut StructDefinitionFieldUnnamed) {}
879    fn exit_struct_literal(&mut self, _: &mut StructLiteral) {}
880    fn exit_struct_literal_field(&mut self, _: &mut StructLiteralField) {}
881    fn exit_trait(&mut self, _: &mut Trait) {}
882    fn exit_trait_bound(&mut self, _: &mut TraitBound) {}
883    fn exit_trait_bound_lifetime(&mut self, _: &mut TraitBoundLifetime) {}
884    fn exit_trait_bound_normal(&mut self, _: &mut TraitBoundNormal) {}
885    fn exit_trait_bound_relaxed(&mut self, _: &mut TraitBoundRelaxed) {}
886    fn exit_trait_bound_type(&mut self, _: &mut TraitBoundType) {}
887    fn exit_trait_bounds(&mut self, _: &mut TraitBounds) {}
888    fn exit_trait_impl_argument(&mut self, _: &mut TraitImplArgument) {}
889    fn exit_trait_impl_argument_named(&mut self, _: &mut TraitImplArgumentNamed) {}
890    fn exit_trait_impl_function_header(&mut self, _: &mut TraitImplFunctionHeader) {}
891    fn exit_trait_member(&mut self, _: &mut TraitMember) {}
892    fn exit_trait_member_const(&mut self, _: &mut TraitMemberConst) {}
893    fn exit_trait_member_function(&mut self, _: &mut TraitMemberFunction) {}
894    fn exit_trait_member_type(&mut self, _: &mut TraitMemberType) {}
895    fn exit_try_operator(&mut self, _: &mut TryOperator) {}
896    fn exit_tuple(&mut self, _: &mut Tuple) {}
897    fn exit_turbofish(&mut self, _: &mut Turbofish) {}
898    fn exit_type(&mut self, _: &mut Type) {}
899    fn exit_type_additional(&mut self, _: &mut TypeAdditional) {}
900    fn exit_type_alias(&mut self, _: &mut TypeAlias) {}
901    fn exit_type_array(&mut self, _: &mut TypeArray) {}
902    fn exit_type_disambiguation(&mut self, _: &mut TypeDisambiguation) {}
903    fn exit_type_dyn_trait(&mut self, _: &mut TypeDynTrait) {}
904    fn exit_type_function(&mut self, _: &mut TypeFunction) {}
905    fn exit_type_function_argument(&mut self, _: &mut TypeFunctionArgument) {}
906    fn exit_type_function_argument_named(&mut self, _: &mut TypeFunctionArgumentNamed) {}
907    fn exit_type_generics(&mut self, _: &mut TypeGenerics) {}
908    fn exit_type_generics_angle(&mut self, _: &mut TypeGenericsAngle) {}
909    fn exit_type_generics_angle_member(&mut self, _: &mut TypeGenericsAngleMember) {}
910    fn exit_type_generics_function(&mut self, _: &mut TypeGenericsFunction) {}
911    fn exit_type_higher_ranked_trait_bounds(&mut self, _: &mut TypeHigherRankedTraitBounds) {}
912    fn exit_type_higher_ranked_trait_bounds_child(&mut self, _: &mut TypeHigherRankedTraitBoundsChild) {}
913    fn exit_type_impl_trait(&mut self, _: &mut TypeImplTrait) {}
914    fn exit_type_kind(&mut self, _: &mut TypeKind) {}
915    fn exit_type_named(&mut self, _: &mut TypeNamed) {}
916    fn exit_type_named_component(&mut self, _: &mut TypeNamedComponent) {}
917    fn exit_type_pointer(&mut self, _: &mut TypePointer) {}
918    fn exit_type_reference(&mut self, _: &mut TypeReference) {}
919    fn exit_type_reference_kind(&mut self, _: &mut TypeReferenceKind) {}
920    fn exit_type_slice(&mut self, _: &mut TypeSlice) {}
921    fn exit_type_tuple(&mut self, _: &mut TypeTuple) {}
922    fn exit_unary(&mut self, _: &mut Unary) {}
923    fn exit_union(&mut self, _: &mut Union) {}
924    fn exit_unsafe_block(&mut self, _: &mut UnsafeBlock) {}
925    fn exit_use(&mut self, _: &mut Use) {}
926    fn exit_use_path(&mut self, _: &mut UsePath) {}
927    fn exit_use_tail(&mut self, _: &mut UseTail) {}
928    fn exit_use_tail_glob(&mut self, _: &mut UseTailGlob) {}
929    fn exit_use_tail_ident(&mut self, _: &mut UseTailIdent) {}
930    fn exit_use_tail_multi(&mut self, _: &mut UseTailMulti) {}
931    fn exit_value(&mut self, _: &mut Value) {}
932    fn exit_visibility(&mut self, _: &mut Visibility) {}
933    fn exit_visibility_public(&mut self, _: &mut VisibilityPublic) {}
934    fn exit_where(&mut self, _: &mut Where) {}
935    fn exit_where_kind(&mut self, _: &mut WhereKind) {}
936    fn exit_where_lifetime(&mut self, _: &mut WhereLifetime) {}
937    fn exit_where_type(&mut self, _: &mut WhereType) {}
938    fn exit_while(&mut self, _: &mut While) {}
939    fn exit_while_let(&mut self, _: &mut WhileLet) {}
940    fn exit_whitespace(&mut self, _: &mut Whitespace) {}
941}