pub trait MutVisitor: Sized + MutVisitorResult<Result = ()> {
Show 68 methods
// Provided methods
fn visit_ident(&mut self, _: &mut Ident) -> Self::Result { ... }
fn visit_foreign_mod(&mut self, nm: &mut ForeignMod) -> Self::Result { ... }
fn visit_foreign_item(&mut self, i: &mut ForeignItem) -> Self::Result { ... }
fn visit_item(&mut self, i: &mut Item) -> Self::Result { ... }
fn visit_local(&mut self, l: &mut Local) -> Self::Result { ... }
fn visit_block(&mut self, b: &mut Block) -> Self::Result { ... }
fn visit_param(&mut self, param: &mut Param) -> Self::Result { ... }
fn visit_arm(&mut self, a: &mut Arm) -> Self::Result { ... }
fn visit_pat(&mut self, p: &mut Pat) -> Self::Result { ... }
fn visit_anon_const(&mut self, c: &mut AnonConst) -> Self::Result { ... }
fn visit_expr(&mut self, ex: &mut Expr) -> Self::Result { ... }
fn visit_method_receiver_expr(&mut self, ex: &mut Expr) -> Self::Result { ... }
fn visit_ty(&mut self, t: &mut Ty) -> Self::Result { ... }
fn visit_ty_pat(&mut self, t: &mut TyPat) -> Self::Result { ... }
fn visit_generic_param(&mut self, param: &mut GenericParam) -> Self::Result { ... }
fn visit_generics(&mut self, g: &mut Generics) -> Self::Result { ... }
fn visit_closure_binder(&mut self, b: &mut ClosureBinder) -> Self::Result { ... }
fn visit_contract(&mut self, c: &mut FnContract) -> Self::Result { ... }
fn visit_where_predicate(&mut self, p: &mut WherePredicate) -> Self::Result { ... }
fn visit_where_predicate_kind(
&mut self,
k: &mut WherePredicateKind,
) -> Self::Result { ... }
fn visit_fn(&mut self, fk: FnKind<'_>, _: Span, _: NodeId) -> Self::Result { ... }
fn visit_assoc_item(
&mut self,
i: &mut AssocItem,
ctxt: AssocCtxt,
) -> Self::Result { ... }
fn visit_trait_ref(&mut self, t: &mut TraitRef) -> Self::Result { ... }
fn visit_param_bound(
&mut self,
bounds: &mut GenericBound,
_ctxt: BoundKind,
) -> Self::Result { ... }
fn visit_precise_capturing_arg(
&mut self,
arg: &mut PreciseCapturingArg,
) -> Self::Result { ... }
fn visit_poly_trait_ref(&mut self, t: &mut PolyTraitRef) -> Self::Result { ... }
fn visit_variant_data(&mut self, s: &mut VariantData) -> Self::Result { ... }
fn visit_field_def(&mut self, s: &mut FieldDef) -> Self::Result { ... }
fn visit_variant(&mut self, v: &mut Variant) -> Self::Result { ... }
fn visit_label(&mut self, label: &mut Label) -> Self::Result { ... }
fn visit_lifetime(&mut self, lifetime: &mut Lifetime) -> Self::Result { ... }
fn visit_mac_call(&mut self, mac: &mut MacCall) -> Self::Result { ... }
fn visit_id(&mut self, _id: &mut NodeId) -> Self::Result { ... }
fn visit_macro_def(&mut self, macro_def: &mut MacroDef) -> Self::Result { ... }
fn visit_path(&mut self, path: &mut Path) -> Self::Result { ... }
fn visit_use_tree(&mut self, use_tree: &mut UseTree) -> Self::Result { ... }
fn visit_path_segment(
&mut self,
path_segment: &mut PathSegment,
) -> Self::Result { ... }
fn visit_generic_args(
&mut self,
generic_args: &mut GenericArgs,
) -> Self::Result { ... }
fn visit_generic_arg(
&mut self,
generic_arg: &mut GenericArg,
) -> Self::Result { ... }
fn visit_assoc_item_constraint(
&mut self,
constraint: &mut AssocItemConstraint,
) -> Self::Result { ... }
fn visit_attribute(&mut self, attr: &mut Attribute) -> Self::Result { ... }
fn visit_vis(&mut self, vis: &mut Visibility) -> Self::Result { ... }
fn visit_fn_ret_ty(&mut self, ret_ty: &mut FnRetTy) -> Self::Result { ... }
fn visit_fn_header(&mut self, header: &mut FnHeader) -> Self::Result { ... }
fn visit_expr_field(&mut self, f: &mut ExprField) -> Self::Result { ... }
fn visit_pat_field(&mut self, fp: &mut PatField) -> Self::Result { ... }
fn visit_crate(&mut self, krate: &mut Crate) -> Self::Result { ... }
fn visit_inline_asm(&mut self, asm: &mut InlineAsm) -> Self::Result { ... }
fn visit_format_args(&mut self, fmt: &mut FormatArgs) -> Self::Result { ... }
fn visit_inline_asm_sym(&mut self, sym: &mut InlineAsmSym) -> Self::Result { ... }
fn visit_capture_by(&mut self, capture_by: &mut CaptureBy) -> Self::Result { ... }
fn visit_coroutine_kind(
&mut self,
coroutine_kind: &mut CoroutineKind,
) -> Self::Result { ... }
fn visit_fn_decl(&mut self, fn_decl: &mut FnDecl) -> Self::Result { ... }
fn visit_qself(&mut self, qs: &mut Option<P<QSelf>>) -> Self::Result { ... }
fn flat_map_foreign_item(
&mut self,
ni: P<ForeignItem>,
) -> SmallVec<[P<ForeignItem>; 1]> { ... }
fn flat_map_item(&mut self, i: P<Item>) -> SmallVec<[P<Item>; 1]> { ... }
fn flat_map_field_def(&mut self, fd: FieldDef) -> SmallVec<[FieldDef; 1]> { ... }
fn flat_map_assoc_item(
&mut self,
i: P<AssocItem>,
ctxt: AssocCtxt,
) -> SmallVec<[P<AssocItem>; 1]> { ... }
fn flat_map_stmt(&mut self, s: Stmt) -> SmallVec<[Stmt; 1]> { ... }
fn flat_map_arm(&mut self, arm: Arm) -> SmallVec<[Arm; 1]> { ... }
fn filter_map_expr(&mut self, e: P<Expr>) -> Option<P<Expr>> { ... }
fn flat_map_variant(&mut self, v: Variant) -> SmallVec<[Variant; 1]> { ... }
fn flat_map_param(&mut self, param: Param) -> SmallVec<[Param; 1]> { ... }
fn flat_map_generic_param(
&mut self,
param: GenericParam,
) -> SmallVec<[GenericParam; 1]> { ... }
fn flat_map_expr_field(&mut self, f: ExprField) -> SmallVec<[ExprField; 1]> { ... }
fn flat_map_where_predicate(
&mut self,
where_predicate: WherePredicate,
) -> SmallVec<[WherePredicate; 1]> { ... }
fn visit_span(&mut self, _sp: &mut Span) { ... }
fn flat_map_pat_field(&mut self, fp: PatField) -> SmallVec<[PatField; 1]> { ... }
}
Expand description
Each method of this trait is a hook to be potentially
overridden. Each method’s default implementation recursively visits
the substructure of the input via the corresponding walk
method;
e.g., the visit_item
method by default calls visit_mut::walk_item
.
If you want to ensure that your code handles every variant explicitly, you need to override each method. (And you also need to monitor future changes to this trait in case a new method with a new default implementation gets introduced.)
Every walk_*
method uses deconstruction to access fields of structs and
enums. This will result in a compile error if a field is added, which makes
it more likely the appropriate visit call will be added for it.
Provided Methods§
fn visit_ident(&mut self, _: &mut Ident) -> Self::Result
fn visit_foreign_mod(&mut self, nm: &mut ForeignMod) -> Self::Result
fn visit_foreign_item(&mut self, i: &mut ForeignItem) -> Self::Result
fn visit_item(&mut self, i: &mut Item) -> Self::Result
fn visit_local(&mut self, l: &mut Local) -> Self::Result
fn visit_block(&mut self, b: &mut Block) -> Self::Result
fn visit_param(&mut self, param: &mut Param) -> Self::Result
fn visit_arm(&mut self, a: &mut Arm) -> Self::Result
fn visit_pat(&mut self, p: &mut Pat) -> Self::Result
fn visit_anon_const(&mut self, c: &mut AnonConst) -> Self::Result
fn visit_expr(&mut self, ex: &mut Expr) -> Self::Result
Sourcefn visit_method_receiver_expr(&mut self, ex: &mut Expr) -> Self::Result
fn visit_method_receiver_expr(&mut self, ex: &mut Expr) -> Self::Result
This method is a hack to workaround unstable of stmt_expr_attributes
.
It can be removed once that feature is stabilized.
fn visit_ty(&mut self, t: &mut Ty) -> Self::Result
fn visit_ty_pat(&mut self, t: &mut TyPat) -> Self::Result
fn visit_generic_param(&mut self, param: &mut GenericParam) -> Self::Result
fn visit_generics(&mut self, g: &mut Generics) -> Self::Result
fn visit_closure_binder(&mut self, b: &mut ClosureBinder) -> Self::Result
fn visit_contract(&mut self, c: &mut FnContract) -> Self::Result
fn visit_where_predicate(&mut self, p: &mut WherePredicate) -> Self::Result
fn visit_where_predicate_kind( &mut self, k: &mut WherePredicateKind, ) -> Self::Result
fn visit_fn(&mut self, fk: FnKind<'_>, _: Span, _: NodeId) -> Self::Result
fn visit_assoc_item( &mut self, i: &mut AssocItem, ctxt: AssocCtxt, ) -> Self::Result
fn visit_trait_ref(&mut self, t: &mut TraitRef) -> Self::Result
fn visit_param_bound( &mut self, bounds: &mut GenericBound, _ctxt: BoundKind, ) -> Self::Result
fn visit_precise_capturing_arg( &mut self, arg: &mut PreciseCapturingArg, ) -> Self::Result
fn visit_poly_trait_ref(&mut self, t: &mut PolyTraitRef) -> Self::Result
fn visit_variant_data(&mut self, s: &mut VariantData) -> Self::Result
fn visit_field_def(&mut self, s: &mut FieldDef) -> Self::Result
fn visit_variant(&mut self, v: &mut Variant) -> Self::Result
fn visit_label(&mut self, label: &mut Label) -> Self::Result
fn visit_lifetime(&mut self, lifetime: &mut Lifetime) -> Self::Result
fn visit_mac_call(&mut self, mac: &mut MacCall) -> Self::Result
fn visit_id(&mut self, _id: &mut NodeId) -> Self::Result
fn visit_macro_def(&mut self, macro_def: &mut MacroDef) -> Self::Result
fn visit_path(&mut self, path: &mut Path) -> Self::Result
fn visit_use_tree(&mut self, use_tree: &mut UseTree) -> Self::Result
fn visit_path_segment(&mut self, path_segment: &mut PathSegment) -> Self::Result
fn visit_generic_args(&mut self, generic_args: &mut GenericArgs) -> Self::Result
fn visit_generic_arg(&mut self, generic_arg: &mut GenericArg) -> Self::Result
fn visit_assoc_item_constraint( &mut self, constraint: &mut AssocItemConstraint, ) -> Self::Result
fn visit_attribute(&mut self, attr: &mut Attribute) -> Self::Result
fn visit_vis(&mut self, vis: &mut Visibility) -> Self::Result
fn visit_fn_ret_ty(&mut self, ret_ty: &mut FnRetTy) -> Self::Result
fn visit_fn_header(&mut self, header: &mut FnHeader) -> Self::Result
fn visit_expr_field(&mut self, f: &mut ExprField) -> Self::Result
fn visit_pat_field(&mut self, fp: &mut PatField) -> Self::Result
fn visit_crate(&mut self, krate: &mut Crate) -> Self::Result
fn visit_inline_asm(&mut self, asm: &mut InlineAsm) -> Self::Result
fn visit_format_args(&mut self, fmt: &mut FormatArgs) -> Self::Result
fn visit_inline_asm_sym(&mut self, sym: &mut InlineAsmSym) -> Self::Result
fn visit_capture_by(&mut self, capture_by: &mut CaptureBy) -> Self::Result
fn visit_coroutine_kind( &mut self, coroutine_kind: &mut CoroutineKind, ) -> Self::Result
fn visit_fn_decl(&mut self, fn_decl: &mut FnDecl) -> Self::Result
fn visit_qself(&mut self, qs: &mut Option<P<QSelf>>) -> Self::Result
fn flat_map_foreign_item( &mut self, ni: P<ForeignItem>, ) -> SmallVec<[P<ForeignItem>; 1]>
fn flat_map_item(&mut self, i: P<Item>) -> SmallVec<[P<Item>; 1]>
fn flat_map_field_def(&mut self, fd: FieldDef) -> SmallVec<[FieldDef; 1]>
fn flat_map_assoc_item( &mut self, i: P<AssocItem>, ctxt: AssocCtxt, ) -> SmallVec<[P<AssocItem>; 1]>
fn flat_map_stmt(&mut self, s: Stmt) -> SmallVec<[Stmt; 1]>
fn flat_map_arm(&mut self, arm: Arm) -> SmallVec<[Arm; 1]>
fn filter_map_expr(&mut self, e: P<Expr>) -> Option<P<Expr>>
fn flat_map_variant(&mut self, v: Variant) -> SmallVec<[Variant; 1]>
fn flat_map_param(&mut self, param: Param) -> SmallVec<[Param; 1]>
fn flat_map_generic_param( &mut self, param: GenericParam, ) -> SmallVec<[GenericParam; 1]>
fn flat_map_expr_field(&mut self, f: ExprField) -> SmallVec<[ExprField; 1]>
fn flat_map_where_predicate( &mut self, where_predicate: WherePredicate, ) -> SmallVec<[WherePredicate; 1]>
fn visit_span(&mut self, _sp: &mut Span)
fn flat_map_pat_field(&mut self, fp: PatField) -> SmallVec<[PatField; 1]>
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.