diff --git a/Cargo.toml b/Cargo.toml
index 5ac44c9..16b72d0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,6 +16,7 @@
 parsing = ["quote", "synom/parsing"]
 printing = ["quote", "synom/printing"]
 visit = []
+visit_mut = []
 fold = []
 clone-impls = ["synom/clone-impls"]
 extra-traits = ["synom/extra-traits"]
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 6f5e77f..459370f 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -7,7 +7,7 @@
 // Unreachable code is generated sometimes without the full feature.
 #![allow(unreachable_code)]
 
-use super::*;
+use *;
 use synom::delimited::Delimited;
 
 trait FoldHelper {
@@ -58,357 +58,357 @@
 /// new default implementation gets introduced.)
 pub trait Folder {
 
-fn fold_abi(&mut self, i: Abi) -> Abi { walk_abi(self, i) }
+fn fold_abi(&mut self, i: Abi) -> Abi { fold_abi(self, i) }
 
-fn fold_abi_kind(&mut self, i: AbiKind) -> AbiKind { walk_abi_kind(self, i) }
+fn fold_abi_kind(&mut self, i: AbiKind) -> AbiKind { fold_abi_kind(self, i) }
 
-fn fold_angle_bracketed_parameter_data(&mut self, i: AngleBracketedParameterData) -> AngleBracketedParameterData { walk_angle_bracketed_parameter_data(self, i) }
+fn fold_angle_bracketed_parameter_data(&mut self, i: AngleBracketedParameterData) -> AngleBracketedParameterData { fold_angle_bracketed_parameter_data(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_arg_captured(&mut self, i: ArgCaptured) -> ArgCaptured { walk_arg_captured(self, i) }
+fn fold_arg_captured(&mut self, i: ArgCaptured) -> ArgCaptured { fold_arg_captured(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_arg_self(&mut self, i: ArgSelf) -> ArgSelf { walk_arg_self(self, i) }
+fn fold_arg_self(&mut self, i: ArgSelf) -> ArgSelf { fold_arg_self(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_arg_self_ref(&mut self, i: ArgSelfRef) -> ArgSelfRef { walk_arg_self_ref(self, i) }
+fn fold_arg_self_ref(&mut self, i: ArgSelfRef) -> ArgSelfRef { fold_arg_self_ref(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_arm(&mut self, i: Arm) -> Arm { walk_arm(self, i) }
+fn fold_arm(&mut self, i: Arm) -> Arm { fold_arm(self, i) }
 
-fn fold_attr_style(&mut self, i: AttrStyle) -> AttrStyle { walk_attr_style(self, i) }
+fn fold_attr_style(&mut self, i: AttrStyle) -> AttrStyle { fold_attr_style(self, i) }
 
-fn fold_attribute(&mut self, i: Attribute) -> Attribute { walk_attribute(self, i) }
+fn fold_attribute(&mut self, i: Attribute) -> Attribute { fold_attribute(self, i) }
 
-fn fold_bare_fn_arg(&mut self, i: BareFnArg) -> BareFnArg { walk_bare_fn_arg(self, i) }
+fn fold_bare_fn_arg(&mut self, i: BareFnArg) -> BareFnArg { fold_bare_fn_arg(self, i) }
 
-fn fold_bare_fn_arg_name(&mut self, i: BareFnArgName) -> BareFnArgName { walk_bare_fn_arg_name(self, i) }
+fn fold_bare_fn_arg_name(&mut self, i: BareFnArgName) -> BareFnArgName { fold_bare_fn_arg_name(self, i) }
 
-fn fold_bare_fn_ty(&mut self, i: BareFnTy) -> BareFnTy { walk_bare_fn_ty(self, i) }
+fn fold_bare_fn_ty(&mut self, i: BareFnTy) -> BareFnTy { fold_bare_fn_ty(self, i) }
 
-fn fold_bin_op(&mut self, i: BinOp) -> BinOp { walk_bin_op(self, i) }
+fn fold_bin_op(&mut self, i: BinOp) -> BinOp { fold_bin_op(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_binding_mode(&mut self, i: BindingMode) -> BindingMode { walk_binding_mode(self, i) }
+fn fold_binding_mode(&mut self, i: BindingMode) -> BindingMode { fold_binding_mode(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_block(&mut self, i: Block) -> Block { walk_block(self, i) }
+fn fold_block(&mut self, i: Block) -> Block { fold_block(self, i) }
 
-fn fold_body(&mut self, i: Body) -> Body { walk_body(self, i) }
+fn fold_body(&mut self, i: Body) -> Body { fold_body(self, i) }
 
-fn fold_body_enum(&mut self, i: BodyEnum) -> BodyEnum { walk_body_enum(self, i) }
+fn fold_body_enum(&mut self, i: BodyEnum) -> BodyEnum { fold_body_enum(self, i) }
 
-fn fold_body_struct(&mut self, i: BodyStruct) -> BodyStruct { walk_body_struct(self, i) }
+fn fold_body_struct(&mut self, i: BodyStruct) -> BodyStruct { fold_body_struct(self, i) }
 
-fn fold_bound_lifetimes(&mut self, i: BoundLifetimes) -> BoundLifetimes { walk_bound_lifetimes(self, i) }
+fn fold_bound_lifetimes(&mut self, i: BoundLifetimes) -> BoundLifetimes { fold_bound_lifetimes(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_capture_by(&mut self, i: CaptureBy) -> CaptureBy { walk_capture_by(self, i) }
+fn fold_capture_by(&mut self, i: CaptureBy) -> CaptureBy { fold_capture_by(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_constness(&mut self, i: Constness) -> Constness { walk_constness(self, i) }
+fn fold_constness(&mut self, i: Constness) -> Constness { fold_constness(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_defaultness(&mut self, i: Defaultness) -> Defaultness { walk_defaultness(self, i) }
+fn fold_defaultness(&mut self, i: Defaultness) -> Defaultness { fold_defaultness(self, i) }
 
-fn fold_derive_input(&mut self, i: DeriveInput) -> DeriveInput { walk_derive_input(self, i) }
+fn fold_derive_input(&mut self, i: DeriveInput) -> DeriveInput { fold_derive_input(self, i) }
 
-fn fold_expr(&mut self, i: Expr) -> Expr { walk_expr(self, i) }
+fn fold_expr(&mut self, i: Expr) -> Expr { fold_expr(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_addr_of(&mut self, i: ExprAddrOf) -> ExprAddrOf { walk_expr_addr_of(self, i) }
+fn fold_expr_addr_of(&mut self, i: ExprAddrOf) -> ExprAddrOf { fold_expr_addr_of(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_array(&mut self, i: ExprArray) -> ExprArray { walk_expr_array(self, i) }
+fn fold_expr_array(&mut self, i: ExprArray) -> ExprArray { fold_expr_array(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_assign(&mut self, i: ExprAssign) -> ExprAssign { walk_expr_assign(self, i) }
+fn fold_expr_assign(&mut self, i: ExprAssign) -> ExprAssign { fold_expr_assign(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_assign_op(&mut self, i: ExprAssignOp) -> ExprAssignOp { walk_expr_assign_op(self, i) }
+fn fold_expr_assign_op(&mut self, i: ExprAssignOp) -> ExprAssignOp { fold_expr_assign_op(self, i) }
 
-fn fold_expr_binary(&mut self, i: ExprBinary) -> ExprBinary { walk_expr_binary(self, i) }
+fn fold_expr_binary(&mut self, i: ExprBinary) -> ExprBinary { fold_expr_binary(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_block(&mut self, i: ExprBlock) -> ExprBlock { walk_expr_block(self, i) }
+fn fold_expr_block(&mut self, i: ExprBlock) -> ExprBlock { fold_expr_block(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_box(&mut self, i: ExprBox) -> ExprBox { walk_expr_box(self, i) }
+fn fold_expr_box(&mut self, i: ExprBox) -> ExprBox { fold_expr_box(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_break(&mut self, i: ExprBreak) -> ExprBreak { walk_expr_break(self, i) }
+fn fold_expr_break(&mut self, i: ExprBreak) -> ExprBreak { fold_expr_break(self, i) }
 
-fn fold_expr_call(&mut self, i: ExprCall) -> ExprCall { walk_expr_call(self, i) }
+fn fold_expr_call(&mut self, i: ExprCall) -> ExprCall { fold_expr_call(self, i) }
 
-fn fold_expr_cast(&mut self, i: ExprCast) -> ExprCast { walk_expr_cast(self, i) }
+fn fold_expr_cast(&mut self, i: ExprCast) -> ExprCast { fold_expr_cast(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_catch(&mut self, i: ExprCatch) -> ExprCatch { walk_expr_catch(self, i) }
+fn fold_expr_catch(&mut self, i: ExprCatch) -> ExprCatch { fold_expr_catch(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_closure(&mut self, i: ExprClosure) -> ExprClosure { walk_expr_closure(self, i) }
+fn fold_expr_closure(&mut self, i: ExprClosure) -> ExprClosure { fold_expr_closure(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_continue(&mut self, i: ExprContinue) -> ExprContinue { walk_expr_continue(self, i) }
+fn fold_expr_continue(&mut self, i: ExprContinue) -> ExprContinue { fold_expr_continue(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_field(&mut self, i: ExprField) -> ExprField { walk_expr_field(self, i) }
+fn fold_expr_field(&mut self, i: ExprField) -> ExprField { fold_expr_field(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_for_loop(&mut self, i: ExprForLoop) -> ExprForLoop { walk_expr_for_loop(self, i) }
+fn fold_expr_for_loop(&mut self, i: ExprForLoop) -> ExprForLoop { fold_expr_for_loop(self, i) }
 
-fn fold_expr_group(&mut self, i: ExprGroup) -> ExprGroup { walk_expr_group(self, i) }
+fn fold_expr_group(&mut self, i: ExprGroup) -> ExprGroup { fold_expr_group(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_if(&mut self, i: ExprIf) -> ExprIf { walk_expr_if(self, i) }
+fn fold_expr_if(&mut self, i: ExprIf) -> ExprIf { fold_expr_if(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_if_let(&mut self, i: ExprIfLet) -> ExprIfLet { walk_expr_if_let(self, i) }
+fn fold_expr_if_let(&mut self, i: ExprIfLet) -> ExprIfLet { fold_expr_if_let(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_in_place(&mut self, i: ExprInPlace) -> ExprInPlace { walk_expr_in_place(self, i) }
+fn fold_expr_in_place(&mut self, i: ExprInPlace) -> ExprInPlace { fold_expr_in_place(self, i) }
 
-fn fold_expr_index(&mut self, i: ExprIndex) -> ExprIndex { walk_expr_index(self, i) }
+fn fold_expr_index(&mut self, i: ExprIndex) -> ExprIndex { fold_expr_index(self, i) }
 
-fn fold_expr_kind(&mut self, i: ExprKind) -> ExprKind { walk_expr_kind(self, i) }
+fn fold_expr_kind(&mut self, i: ExprKind) -> ExprKind { fold_expr_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_loop(&mut self, i: ExprLoop) -> ExprLoop { walk_expr_loop(self, i) }
+fn fold_expr_loop(&mut self, i: ExprLoop) -> ExprLoop { fold_expr_loop(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_match(&mut self, i: ExprMatch) -> ExprMatch { walk_expr_match(self, i) }
+fn fold_expr_match(&mut self, i: ExprMatch) -> ExprMatch { fold_expr_match(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_method_call(&mut self, i: ExprMethodCall) -> ExprMethodCall { walk_expr_method_call(self, i) }
+fn fold_expr_method_call(&mut self, i: ExprMethodCall) -> ExprMethodCall { fold_expr_method_call(self, i) }
 
-fn fold_expr_paren(&mut self, i: ExprParen) -> ExprParen { walk_expr_paren(self, i) }
+fn fold_expr_paren(&mut self, i: ExprParen) -> ExprParen { fold_expr_paren(self, i) }
 
-fn fold_expr_path(&mut self, i: ExprPath) -> ExprPath { walk_expr_path(self, i) }
+fn fold_expr_path(&mut self, i: ExprPath) -> ExprPath { fold_expr_path(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_range(&mut self, i: ExprRange) -> ExprRange { walk_expr_range(self, i) }
+fn fold_expr_range(&mut self, i: ExprRange) -> ExprRange { fold_expr_range(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_repeat(&mut self, i: ExprRepeat) -> ExprRepeat { walk_expr_repeat(self, i) }
+fn fold_expr_repeat(&mut self, i: ExprRepeat) -> ExprRepeat { fold_expr_repeat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_ret(&mut self, i: ExprRet) -> ExprRet { walk_expr_ret(self, i) }
+fn fold_expr_ret(&mut self, i: ExprRet) -> ExprRet { fold_expr_ret(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_struct(&mut self, i: ExprStruct) -> ExprStruct { walk_expr_struct(self, i) }
+fn fold_expr_struct(&mut self, i: ExprStruct) -> ExprStruct { fold_expr_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_try(&mut self, i: ExprTry) -> ExprTry { walk_expr_try(self, i) }
+fn fold_expr_try(&mut self, i: ExprTry) -> ExprTry { fold_expr_try(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_tup(&mut self, i: ExprTup) -> ExprTup { walk_expr_tup(self, i) }
+fn fold_expr_tup(&mut self, i: ExprTup) -> ExprTup { fold_expr_tup(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_tup_field(&mut self, i: ExprTupField) -> ExprTupField { walk_expr_tup_field(self, i) }
+fn fold_expr_tup_field(&mut self, i: ExprTupField) -> ExprTupField { fold_expr_tup_field(self, i) }
 
-fn fold_expr_type(&mut self, i: ExprType) -> ExprType { walk_expr_type(self, i) }
+fn fold_expr_type(&mut self, i: ExprType) -> ExprType { fold_expr_type(self, i) }
 
-fn fold_expr_unary(&mut self, i: ExprUnary) -> ExprUnary { walk_expr_unary(self, i) }
+fn fold_expr_unary(&mut self, i: ExprUnary) -> ExprUnary { fold_expr_unary(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_while(&mut self, i: ExprWhile) -> ExprWhile { walk_expr_while(self, i) }
+fn fold_expr_while(&mut self, i: ExprWhile) -> ExprWhile { fold_expr_while(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_while_let(&mut self, i: ExprWhileLet) -> ExprWhileLet { walk_expr_while_let(self, i) }
+fn fold_expr_while_let(&mut self, i: ExprWhileLet) -> ExprWhileLet { fold_expr_while_let(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_yield(&mut self, i: ExprYield) -> ExprYield { walk_expr_yield(self, i) }
+fn fold_expr_yield(&mut self, i: ExprYield) -> ExprYield { fold_expr_yield(self, i) }
 
-fn fold_field(&mut self, i: Field) -> Field { walk_field(self, i) }
+fn fold_field(&mut self, i: Field) -> Field { fold_field(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_field_pat(&mut self, i: FieldPat) -> FieldPat { walk_field_pat(self, i) }
+fn fold_field_pat(&mut self, i: FieldPat) -> FieldPat { fold_field_pat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_field_value(&mut self, i: FieldValue) -> FieldValue { walk_field_value(self, i) }
+fn fold_field_value(&mut self, i: FieldValue) -> FieldValue { fold_field_value(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_file(&mut self, i: File) -> File { walk_file(self, i) }
+fn fold_file(&mut self, i: File) -> File { fold_file(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_fn_arg(&mut self, i: FnArg) -> FnArg { walk_fn_arg(self, i) }
+fn fold_fn_arg(&mut self, i: FnArg) -> FnArg { fold_fn_arg(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_fn_decl(&mut self, i: FnDecl) -> FnDecl { walk_fn_decl(self, i) }
+fn fold_fn_decl(&mut self, i: FnDecl) -> FnDecl { fold_fn_decl(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_foreign_item(&mut self, i: ForeignItem) -> ForeignItem { walk_foreign_item(self, i) }
+fn fold_foreign_item(&mut self, i: ForeignItem) -> ForeignItem { fold_foreign_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_foreign_item_fn(&mut self, i: ForeignItemFn) -> ForeignItemFn { walk_foreign_item_fn(self, i) }
+fn fold_foreign_item_fn(&mut self, i: ForeignItemFn) -> ForeignItemFn { fold_foreign_item_fn(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_foreign_item_kind(&mut self, i: ForeignItemKind) -> ForeignItemKind { walk_foreign_item_kind(self, i) }
+fn fold_foreign_item_kind(&mut self, i: ForeignItemKind) -> ForeignItemKind { fold_foreign_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_foreign_item_static(&mut self, i: ForeignItemStatic) -> ForeignItemStatic { walk_foreign_item_static(self, i) }
+fn fold_foreign_item_static(&mut self, i: ForeignItemStatic) -> ForeignItemStatic { fold_foreign_item_static(self, i) }
 
-fn fold_function_ret_ty(&mut self, i: FunctionRetTy) -> FunctionRetTy { walk_function_ret_ty(self, i) }
+fn fold_function_ret_ty(&mut self, i: FunctionRetTy) -> FunctionRetTy { fold_function_ret_ty(self, i) }
 
-fn fold_generics(&mut self, i: Generics) -> Generics { walk_generics(self, i) }
+fn fold_generics(&mut self, i: Generics) -> Generics { fold_generics(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_impl_item(&mut self, i: ImplItem) -> ImplItem { walk_impl_item(self, i) }
+fn fold_impl_item(&mut self, i: ImplItem) -> ImplItem { fold_impl_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_impl_item_const(&mut self, i: ImplItemConst) -> ImplItemConst { walk_impl_item_const(self, i) }
+fn fold_impl_item_const(&mut self, i: ImplItemConst) -> ImplItemConst { fold_impl_item_const(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_impl_item_kind(&mut self, i: ImplItemKind) -> ImplItemKind { walk_impl_item_kind(self, i) }
+fn fold_impl_item_kind(&mut self, i: ImplItemKind) -> ImplItemKind { fold_impl_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_impl_item_method(&mut self, i: ImplItemMethod) -> ImplItemMethod { walk_impl_item_method(self, i) }
+fn fold_impl_item_method(&mut self, i: ImplItemMethod) -> ImplItemMethod { fold_impl_item_method(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_impl_item_type(&mut self, i: ImplItemType) -> ImplItemType { walk_impl_item_type(self, i) }
+fn fold_impl_item_type(&mut self, i: ImplItemType) -> ImplItemType { fold_impl_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_impl_polarity(&mut self, i: ImplPolarity) -> ImplPolarity { walk_impl_polarity(self, i) }
+fn fold_impl_polarity(&mut self, i: ImplPolarity) -> ImplPolarity { fold_impl_polarity(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_in_place_kind(&mut self, i: InPlaceKind) -> InPlaceKind { walk_in_place_kind(self, i) }
+fn fold_in_place_kind(&mut self, i: InPlaceKind) -> InPlaceKind { fold_in_place_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item(&mut self, i: Item) -> Item { walk_item(self, i) }
+fn fold_item(&mut self, i: Item) -> Item { fold_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_const(&mut self, i: ItemConst) -> ItemConst { walk_item_const(self, i) }
+fn fold_item_const(&mut self, i: ItemConst) -> ItemConst { fold_item_const(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_default_impl(&mut self, i: ItemDefaultImpl) -> ItemDefaultImpl { walk_item_default_impl(self, i) }
+fn fold_item_default_impl(&mut self, i: ItemDefaultImpl) -> ItemDefaultImpl { fold_item_default_impl(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_enum(&mut self, i: ItemEnum) -> ItemEnum { walk_item_enum(self, i) }
+fn fold_item_enum(&mut self, i: ItemEnum) -> ItemEnum { fold_item_enum(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_extern_crate(&mut self, i: ItemExternCrate) -> ItemExternCrate { walk_item_extern_crate(self, i) }
+fn fold_item_extern_crate(&mut self, i: ItemExternCrate) -> ItemExternCrate { fold_item_extern_crate(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_fn(&mut self, i: ItemFn) -> ItemFn { walk_item_fn(self, i) }
+fn fold_item_fn(&mut self, i: ItemFn) -> ItemFn { fold_item_fn(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_foreign_mod(&mut self, i: ItemForeignMod) -> ItemForeignMod { walk_item_foreign_mod(self, i) }
+fn fold_item_foreign_mod(&mut self, i: ItemForeignMod) -> ItemForeignMod { fold_item_foreign_mod(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_impl(&mut self, i: ItemImpl) -> ItemImpl { walk_item_impl(self, i) }
+fn fold_item_impl(&mut self, i: ItemImpl) -> ItemImpl { fold_item_impl(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_kind(&mut self, i: ItemKind) -> ItemKind { walk_item_kind(self, i) }
+fn fold_item_kind(&mut self, i: ItemKind) -> ItemKind { fold_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_mod(&mut self, i: ItemMod) -> ItemMod { walk_item_mod(self, i) }
+fn fold_item_mod(&mut self, i: ItemMod) -> ItemMod { fold_item_mod(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_static(&mut self, i: ItemStatic) -> ItemStatic { walk_item_static(self, i) }
+fn fold_item_static(&mut self, i: ItemStatic) -> ItemStatic { fold_item_static(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_struct(&mut self, i: ItemStruct) -> ItemStruct { walk_item_struct(self, i) }
+fn fold_item_struct(&mut self, i: ItemStruct) -> ItemStruct { fold_item_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_trait(&mut self, i: ItemTrait) -> ItemTrait { walk_item_trait(self, i) }
+fn fold_item_trait(&mut self, i: ItemTrait) -> ItemTrait { fold_item_trait(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_ty(&mut self, i: ItemTy) -> ItemTy { walk_item_ty(self, i) }
+fn fold_item_ty(&mut self, i: ItemTy) -> ItemTy { fold_item_ty(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_union(&mut self, i: ItemUnion) -> ItemUnion { walk_item_union(self, i) }
+fn fold_item_union(&mut self, i: ItemUnion) -> ItemUnion { fold_item_union(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_item_use(&mut self, i: ItemUse) -> ItemUse { walk_item_use(self, i) }
+fn fold_item_use(&mut self, i: ItemUse) -> ItemUse { fold_item_use(self, i) }
 
-fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef { walk_lifetime_def(self, i) }
+fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef { fold_lifetime_def(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_local(&mut self, i: Local) -> Local { walk_local(self, i) }
+fn fold_local(&mut self, i: Local) -> Local { fold_local(self, i) }
 
-fn fold_mac(&mut self, i: Mac) -> Mac { walk_mac(self, i) }
+fn fold_mac(&mut self, i: Mac) -> Mac { fold_mac(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_mac_stmt_style(&mut self, i: MacStmtStyle) -> MacStmtStyle { walk_mac_stmt_style(self, i) }
+fn fold_mac_stmt_style(&mut self, i: MacStmtStyle) -> MacStmtStyle { fold_mac_stmt_style(self, i) }
 
-fn fold_meta_item(&mut self, i: MetaItem) -> MetaItem { walk_meta_item(self, i) }
+fn fold_meta_item(&mut self, i: MetaItem) -> MetaItem { fold_meta_item(self, i) }
 
-fn fold_meta_item_list(&mut self, i: MetaItemList) -> MetaItemList { walk_meta_item_list(self, i) }
+fn fold_meta_item_list(&mut self, i: MetaItemList) -> MetaItemList { fold_meta_item_list(self, i) }
 
-fn fold_meta_name_value(&mut self, i: MetaNameValue) -> MetaNameValue { walk_meta_name_value(self, i) }
+fn fold_meta_name_value(&mut self, i: MetaNameValue) -> MetaNameValue { fold_meta_name_value(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_method_sig(&mut self, i: MethodSig) -> MethodSig { walk_method_sig(self, i) }
+fn fold_method_sig(&mut self, i: MethodSig) -> MethodSig { fold_method_sig(self, i) }
 
-fn fold_mut_ty(&mut self, i: MutTy) -> MutTy { walk_mut_ty(self, i) }
+fn fold_mut_ty(&mut self, i: MutTy) -> MutTy { fold_mut_ty(self, i) }
 
-fn fold_mutability(&mut self, i: Mutability) -> Mutability { walk_mutability(self, i) }
+fn fold_mutability(&mut self, i: Mutability) -> Mutability { fold_mutability(self, i) }
 
-fn fold_nested_meta_item(&mut self, i: NestedMetaItem) -> NestedMetaItem { walk_nested_meta_item(self, i) }
+fn fold_nested_meta_item(&mut self, i: NestedMetaItem) -> NestedMetaItem { fold_nested_meta_item(self, i) }
 
-fn fold_parenthesized_parameter_data(&mut self, i: ParenthesizedParameterData) -> ParenthesizedParameterData { walk_parenthesized_parameter_data(self, i) }
+fn fold_parenthesized_parameter_data(&mut self, i: ParenthesizedParameterData) -> ParenthesizedParameterData { fold_parenthesized_parameter_data(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat(&mut self, i: Pat) -> Pat { walk_pat(self, i) }
+fn fold_pat(&mut self, i: Pat) -> Pat { fold_pat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_box(&mut self, i: PatBox) -> PatBox { walk_pat_box(self, i) }
+fn fold_pat_box(&mut self, i: PatBox) -> PatBox { fold_pat_box(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_ident(&mut self, i: PatIdent) -> PatIdent { walk_pat_ident(self, i) }
+fn fold_pat_ident(&mut self, i: PatIdent) -> PatIdent { fold_pat_ident(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_lit(&mut self, i: PatLit) -> PatLit { walk_pat_lit(self, i) }
+fn fold_pat_lit(&mut self, i: PatLit) -> PatLit { fold_pat_lit(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_path(&mut self, i: PatPath) -> PatPath { walk_pat_path(self, i) }
+fn fold_pat_path(&mut self, i: PatPath) -> PatPath { fold_pat_path(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_range(&mut self, i: PatRange) -> PatRange { walk_pat_range(self, i) }
+fn fold_pat_range(&mut self, i: PatRange) -> PatRange { fold_pat_range(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_ref(&mut self, i: PatRef) -> PatRef { walk_pat_ref(self, i) }
+fn fold_pat_ref(&mut self, i: PatRef) -> PatRef { fold_pat_ref(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_slice(&mut self, i: PatSlice) -> PatSlice { walk_pat_slice(self, i) }
+fn fold_pat_slice(&mut self, i: PatSlice) -> PatSlice { fold_pat_slice(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_struct(&mut self, i: PatStruct) -> PatStruct { walk_pat_struct(self, i) }
+fn fold_pat_struct(&mut self, i: PatStruct) -> PatStruct { fold_pat_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_tuple(&mut self, i: PatTuple) -> PatTuple { walk_pat_tuple(self, i) }
+fn fold_pat_tuple(&mut self, i: PatTuple) -> PatTuple { fold_pat_tuple(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_tuple_struct(&mut self, i: PatTupleStruct) -> PatTupleStruct { walk_pat_tuple_struct(self, i) }
+fn fold_pat_tuple_struct(&mut self, i: PatTupleStruct) -> PatTupleStruct { fold_pat_tuple_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_pat_wild(&mut self, i: PatWild) -> PatWild { walk_pat_wild(self, i) }
+fn fold_pat_wild(&mut self, i: PatWild) -> PatWild { fold_pat_wild(self, i) }
 
-fn fold_path(&mut self, i: Path) -> Path { walk_path(self, i) }
+fn fold_path(&mut self, i: Path) -> Path { fold_path(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_path_glob(&mut self, i: PathGlob) -> PathGlob { walk_path_glob(self, i) }
+fn fold_path_glob(&mut self, i: PathGlob) -> PathGlob { fold_path_glob(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_path_list(&mut self, i: PathList) -> PathList { walk_path_list(self, i) }
+fn fold_path_list(&mut self, i: PathList) -> PathList { fold_path_list(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_path_list_item(&mut self, i: PathListItem) -> PathListItem { walk_path_list_item(self, i) }
+fn fold_path_list_item(&mut self, i: PathListItem) -> PathListItem { fold_path_list_item(self, i) }
 
-fn fold_path_parameters(&mut self, i: PathParameters) -> PathParameters { walk_path_parameters(self, i) }
+fn fold_path_parameters(&mut self, i: PathParameters) -> PathParameters { fold_path_parameters(self, i) }
 
-fn fold_path_segment(&mut self, i: PathSegment) -> PathSegment { walk_path_segment(self, i) }
+fn fold_path_segment(&mut self, i: PathSegment) -> PathSegment { fold_path_segment(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_path_simple(&mut self, i: PathSimple) -> PathSimple { walk_path_simple(self, i) }
+fn fold_path_simple(&mut self, i: PathSimple) -> PathSimple { fold_path_simple(self, i) }
 
-fn fold_poly_trait_ref(&mut self, i: PolyTraitRef) -> PolyTraitRef { walk_poly_trait_ref(self, i) }
+fn fold_poly_trait_ref(&mut self, i: PolyTraitRef) -> PolyTraitRef { fold_poly_trait_ref(self, i) }
 
-fn fold_qself(&mut self, i: QSelf) -> QSelf { walk_qself(self, i) }
+fn fold_qself(&mut self, i: QSelf) -> QSelf { fold_qself(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_range_limits(&mut self, i: RangeLimits) -> RangeLimits { walk_range_limits(self, i) }
+fn fold_range_limits(&mut self, i: RangeLimits) -> RangeLimits { fold_range_limits(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_stmt(&mut self, i: Stmt) -> Stmt { walk_stmt(self, i) }
+fn fold_stmt(&mut self, i: Stmt) -> Stmt { fold_stmt(self, i) }
 
-fn fold_trait_bound_modifier(&mut self, i: TraitBoundModifier) -> TraitBoundModifier { walk_trait_bound_modifier(self, i) }
+fn fold_trait_bound_modifier(&mut self, i: TraitBoundModifier) -> TraitBoundModifier { fold_trait_bound_modifier(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_trait_item(&mut self, i: TraitItem) -> TraitItem { walk_trait_item(self, i) }
+fn fold_trait_item(&mut self, i: TraitItem) -> TraitItem { fold_trait_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_trait_item_const(&mut self, i: TraitItemConst) -> TraitItemConst { walk_trait_item_const(self, i) }
+fn fold_trait_item_const(&mut self, i: TraitItemConst) -> TraitItemConst { fold_trait_item_const(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_trait_item_kind(&mut self, i: TraitItemKind) -> TraitItemKind { walk_trait_item_kind(self, i) }
+fn fold_trait_item_kind(&mut self, i: TraitItemKind) -> TraitItemKind { fold_trait_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_trait_item_method(&mut self, i: TraitItemMethod) -> TraitItemMethod { walk_trait_item_method(self, i) }
+fn fold_trait_item_method(&mut self, i: TraitItemMethod) -> TraitItemMethod { fold_trait_item_method(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_trait_item_type(&mut self, i: TraitItemType) -> TraitItemType { walk_trait_item_type(self, i) }
+fn fold_trait_item_type(&mut self, i: TraitItemType) -> TraitItemType { fold_trait_item_type(self, i) }
 
-fn fold_ty(&mut self, i: Ty) -> Ty { walk_ty(self, i) }
+fn fold_ty(&mut self, i: Ty) -> Ty { fold_ty(self, i) }
 
-fn fold_ty_array(&mut self, i: TyArray) -> TyArray { walk_ty_array(self, i) }
+fn fold_ty_array(&mut self, i: TyArray) -> TyArray { fold_ty_array(self, i) }
 
-fn fold_ty_bare_fn(&mut self, i: TyBareFn) -> TyBareFn { walk_ty_bare_fn(self, i) }
+fn fold_ty_bare_fn(&mut self, i: TyBareFn) -> TyBareFn { fold_ty_bare_fn(self, i) }
 
-fn fold_ty_group(&mut self, i: TyGroup) -> TyGroup { walk_ty_group(self, i) }
+fn fold_ty_group(&mut self, i: TyGroup) -> TyGroup { fold_ty_group(self, i) }
 
-fn fold_ty_impl_trait(&mut self, i: TyImplTrait) -> TyImplTrait { walk_ty_impl_trait(self, i) }
+fn fold_ty_impl_trait(&mut self, i: TyImplTrait) -> TyImplTrait { fold_ty_impl_trait(self, i) }
 
-fn fold_ty_infer(&mut self, i: TyInfer) -> TyInfer { walk_ty_infer(self, i) }
+fn fold_ty_infer(&mut self, i: TyInfer) -> TyInfer { fold_ty_infer(self, i) }
 
-fn fold_ty_never(&mut self, i: TyNever) -> TyNever { walk_ty_never(self, i) }
+fn fold_ty_never(&mut self, i: TyNever) -> TyNever { fold_ty_never(self, i) }
 
-fn fold_ty_param(&mut self, i: TyParam) -> TyParam { walk_ty_param(self, i) }
+fn fold_ty_param(&mut self, i: TyParam) -> TyParam { fold_ty_param(self, i) }
 
-fn fold_ty_param_bound(&mut self, i: TyParamBound) -> TyParamBound { walk_ty_param_bound(self, i) }
+fn fold_ty_param_bound(&mut self, i: TyParamBound) -> TyParamBound { fold_ty_param_bound(self, i) }
 
-fn fold_ty_paren(&mut self, i: TyParen) -> TyParen { walk_ty_paren(self, i) }
+fn fold_ty_paren(&mut self, i: TyParen) -> TyParen { fold_ty_paren(self, i) }
 
-fn fold_ty_path(&mut self, i: TyPath) -> TyPath { walk_ty_path(self, i) }
+fn fold_ty_path(&mut self, i: TyPath) -> TyPath { fold_ty_path(self, i) }
 
-fn fold_ty_ptr(&mut self, i: TyPtr) -> TyPtr { walk_ty_ptr(self, i) }
+fn fold_ty_ptr(&mut self, i: TyPtr) -> TyPtr { fold_ty_ptr(self, i) }
 
-fn fold_ty_rptr(&mut self, i: TyRptr) -> TyRptr { walk_ty_rptr(self, i) }
+fn fold_ty_rptr(&mut self, i: TyRptr) -> TyRptr { fold_ty_rptr(self, i) }
 
-fn fold_ty_slice(&mut self, i: TySlice) -> TySlice { walk_ty_slice(self, i) }
+fn fold_ty_slice(&mut self, i: TySlice) -> TySlice { fold_ty_slice(self, i) }
 
-fn fold_ty_trait_object(&mut self, i: TyTraitObject) -> TyTraitObject { walk_ty_trait_object(self, i) }
+fn fold_ty_trait_object(&mut self, i: TyTraitObject) -> TyTraitObject { fold_ty_trait_object(self, i) }
 
-fn fold_ty_tup(&mut self, i: TyTup) -> TyTup { walk_ty_tup(self, i) }
+fn fold_ty_tup(&mut self, i: TyTup) -> TyTup { fold_ty_tup(self, i) }
 
-fn fold_type_binding(&mut self, i: TypeBinding) -> TypeBinding { walk_type_binding(self, i) }
+fn fold_type_binding(&mut self, i: TypeBinding) -> TypeBinding { fold_type_binding(self, i) }
 
-fn fold_un_op(&mut self, i: UnOp) -> UnOp { walk_un_op(self, i) }
+fn fold_un_op(&mut self, i: UnOp) -> UnOp { fold_un_op(self, i) }
 
-fn fold_unsafety(&mut self, i: Unsafety) -> Unsafety { walk_unsafety(self, i) }
+fn fold_unsafety(&mut self, i: Unsafety) -> Unsafety { fold_unsafety(self, i) }
 
-fn fold_variant(&mut self, i: Variant) -> Variant { walk_variant(self, i) }
+fn fold_variant(&mut self, i: Variant) -> Variant { fold_variant(self, i) }
 
-fn fold_variant_data(&mut self, i: VariantData) -> VariantData { walk_variant_data(self, i) }
+fn fold_variant_data(&mut self, i: VariantData) -> VariantData { fold_variant_data(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_view_path(&mut self, i: ViewPath) -> ViewPath { walk_view_path(self, i) }
+fn fold_view_path(&mut self, i: ViewPath) -> ViewPath { fold_view_path(self, i) }
 
-fn fold_vis_crate(&mut self, i: VisCrate) -> VisCrate { walk_vis_crate(self, i) }
+fn fold_vis_crate(&mut self, i: VisCrate) -> VisCrate { fold_vis_crate(self, i) }
 
-fn fold_vis_inherited(&mut self, i: VisInherited) -> VisInherited { walk_vis_inherited(self, i) }
+fn fold_vis_inherited(&mut self, i: VisInherited) -> VisInherited { fold_vis_inherited(self, i) }
 
-fn fold_vis_public(&mut self, i: VisPublic) -> VisPublic { walk_vis_public(self, i) }
+fn fold_vis_public(&mut self, i: VisPublic) -> VisPublic { fold_vis_public(self, i) }
 
-fn fold_vis_restricted(&mut self, i: VisRestricted) -> VisRestricted { walk_vis_restricted(self, i) }
+fn fold_vis_restricted(&mut self, i: VisRestricted) -> VisRestricted { fold_vis_restricted(self, i) }
 
-fn fold_visibility(&mut self, i: Visibility) -> Visibility { walk_visibility(self, i) }
+fn fold_visibility(&mut self, i: Visibility) -> Visibility { fold_visibility(self, i) }
 
-fn fold_where_bound_predicate(&mut self, i: WhereBoundPredicate) -> WhereBoundPredicate { walk_where_bound_predicate(self, i) }
+fn fold_where_bound_predicate(&mut self, i: WhereBoundPredicate) -> WhereBoundPredicate { fold_where_bound_predicate(self, i) }
 
-fn fold_where_clause(&mut self, i: WhereClause) -> WhereClause { walk_where_clause(self, i) }
+fn fold_where_clause(&mut self, i: WhereClause) -> WhereClause { fold_where_clause(self, i) }
 
-fn fold_where_eq_predicate(&mut self, i: WhereEqPredicate) -> WhereEqPredicate { walk_where_eq_predicate(self, i) }
+fn fold_where_eq_predicate(&mut self, i: WhereEqPredicate) -> WhereEqPredicate { fold_where_eq_predicate(self, i) }
 
-fn fold_where_predicate(&mut self, i: WherePredicate) -> WherePredicate { walk_where_predicate(self, i) }
+fn fold_where_predicate(&mut self, i: WherePredicate) -> WherePredicate { fold_where_predicate(self, i) }
 
-fn fold_where_region_predicate(&mut self, i: WhereRegionPredicate) -> WhereRegionPredicate { walk_where_region_predicate(self, i) }
+fn fold_where_region_predicate(&mut self, i: WhereRegionPredicate) -> WhereRegionPredicate { fold_where_region_predicate(self, i) }
 
 }
 
 
-pub fn walk_abi<V: Folder + ?Sized>(_visitor: &mut V, _i: Abi) -> Abi {
+pub fn fold_abi<V: Folder + ?Sized>(_visitor: &mut V, _i: Abi) -> Abi {
     Abi {
         extern_token: _i . extern_token,
         kind: _visitor.fold_abi_kind(_i . kind),
     }
 }
 
-pub fn walk_abi_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: AbiKind) -> AbiKind {
+pub fn fold_abi_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: AbiKind) -> AbiKind {
     use ::AbiKind::*;
     match _i {
         Named(_binding_0, ) => {
@@ -420,7 +420,7 @@
     }
 }
 
-pub fn walk_angle_bracketed_parameter_data<V: Folder + ?Sized>(_visitor: &mut V, _i: AngleBracketedParameterData) -> AngleBracketedParameterData {
+pub fn fold_angle_bracketed_parameter_data<V: Folder + ?Sized>(_visitor: &mut V, _i: AngleBracketedParameterData) -> AngleBracketedParameterData {
     AngleBracketedParameterData {
         turbofish: _i . turbofish,
         lt_token: _i . lt_token,
@@ -431,7 +431,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_captured<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgCaptured) -> ArgCaptured {
+pub fn fold_arg_captured<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgCaptured) -> ArgCaptured {
     ArgCaptured {
         pat: _visitor.fold_pat(_i . pat),
         colon_token: _i . colon_token,
@@ -439,14 +439,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_self<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgSelf) -> ArgSelf {
+pub fn fold_arg_self<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgSelf) -> ArgSelf {
     ArgSelf {
         mutbl: _visitor.fold_mutability(_i . mutbl),
         self_token: _i . self_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_self_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgSelfRef) -> ArgSelfRef {
+pub fn fold_arg_self_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgSelfRef) -> ArgSelfRef {
     ArgSelfRef {
         and_token: _i . and_token,
         self_token: _i . self_token,
@@ -455,7 +455,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arm<V: Folder + ?Sized>(_visitor: &mut V, _i: Arm) -> Arm {
+pub fn fold_arm<V: Folder + ?Sized>(_visitor: &mut V, _i: Arm) -> Arm {
     Arm {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         pats: FoldHelper::lift(_i . pats, |it| { _visitor.fold_pat(it) }),
@@ -467,7 +467,7 @@
     }
 }
 
-pub fn walk_attr_style<V: Folder + ?Sized>(_visitor: &mut V, _i: AttrStyle) -> AttrStyle {
+pub fn fold_attr_style<V: Folder + ?Sized>(_visitor: &mut V, _i: AttrStyle) -> AttrStyle {
     use ::AttrStyle::*;
     match _i {
         Outer => { Outer }
@@ -479,7 +479,7 @@
     }
 }
 
-pub fn walk_attribute<V: Folder + ?Sized>(_visitor: &mut V, _i: Attribute) -> Attribute {
+pub fn fold_attribute<V: Folder + ?Sized>(_visitor: &mut V, _i: Attribute) -> Attribute {
     Attribute {
         style: _visitor.fold_attr_style(_i . style),
         pound_token: _i . pound_token,
@@ -490,14 +490,14 @@
     }
 }
 
-pub fn walk_bare_fn_arg<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnArg) -> BareFnArg {
+pub fn fold_bare_fn_arg<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnArg) -> BareFnArg {
     BareFnArg {
         name: _i . name,
         ty: _visitor.fold_ty(_i . ty),
     }
 }
 
-pub fn walk_bare_fn_arg_name<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnArgName) -> BareFnArgName {
+pub fn fold_bare_fn_arg_name<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnArgName) -> BareFnArgName {
     use ::BareFnArgName::*;
     match _i {
         Named(_binding_0, ) => {
@@ -513,7 +513,7 @@
     }
 }
 
-pub fn walk_bare_fn_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnTy) -> BareFnTy {
+pub fn fold_bare_fn_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnTy) -> BareFnTy {
     BareFnTy {
         lifetimes: (_i . lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
@@ -526,7 +526,7 @@
     }
 }
 
-pub fn walk_bin_op<V: Folder + ?Sized>(_visitor: &mut V, _i: BinOp) -> BinOp {
+pub fn fold_bin_op<V: Folder + ?Sized>(_visitor: &mut V, _i: BinOp) -> BinOp {
     use ::BinOp::*;
     match _i {
         Add(_binding_0, ) => {
@@ -672,7 +672,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_binding_mode<V: Folder + ?Sized>(_visitor: &mut V, _i: BindingMode) -> BindingMode {
+pub fn fold_binding_mode<V: Folder + ?Sized>(_visitor: &mut V, _i: BindingMode) -> BindingMode {
     use ::BindingMode::*;
     match _i {
         ByRef(_binding_0, _binding_1, ) => {
@@ -689,14 +689,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_block<V: Folder + ?Sized>(_visitor: &mut V, _i: Block) -> Block {
+pub fn fold_block<V: Folder + ?Sized>(_visitor: &mut V, _i: Block) -> Block {
     Block {
         brace_token: _i . brace_token,
         stmts: FoldHelper::lift(_i . stmts, |it| { _visitor.fold_stmt(it) }),
     }
 }
 
-pub fn walk_body<V: Folder + ?Sized>(_visitor: &mut V, _i: Body) -> Body {
+pub fn fold_body<V: Folder + ?Sized>(_visitor: &mut V, _i: Body) -> Body {
     use ::Body::*;
     match _i {
         Enum(_binding_0, ) => {
@@ -712,7 +712,7 @@
     }
 }
 
-pub fn walk_body_enum<V: Folder + ?Sized>(_visitor: &mut V, _i: BodyEnum) -> BodyEnum {
+pub fn fold_body_enum<V: Folder + ?Sized>(_visitor: &mut V, _i: BodyEnum) -> BodyEnum {
     BodyEnum {
         enum_token: _i . enum_token,
         brace_token: _i . brace_token,
@@ -720,7 +720,7 @@
     }
 }
 
-pub fn walk_body_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: BodyStruct) -> BodyStruct {
+pub fn fold_body_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: BodyStruct) -> BodyStruct {
     BodyStruct {
         data: _visitor.fold_variant_data(_i . data),
         struct_token: _i . struct_token,
@@ -728,7 +728,7 @@
     }
 }
 
-pub fn walk_bound_lifetimes<V: Folder + ?Sized>(_visitor: &mut V, _i: BoundLifetimes) -> BoundLifetimes {
+pub fn fold_bound_lifetimes<V: Folder + ?Sized>(_visitor: &mut V, _i: BoundLifetimes) -> BoundLifetimes {
     BoundLifetimes {
         for_token: _i . for_token,
         lt_token: _i . lt_token,
@@ -737,7 +737,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_capture_by<V: Folder + ?Sized>(_visitor: &mut V, _i: CaptureBy) -> CaptureBy {
+pub fn fold_capture_by<V: Folder + ?Sized>(_visitor: &mut V, _i: CaptureBy) -> CaptureBy {
     use ::CaptureBy::*;
     match _i {
         Value(_binding_0, ) => {
@@ -749,7 +749,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_constness<V: Folder + ?Sized>(_visitor: &mut V, _i: Constness) -> Constness {
+pub fn fold_constness<V: Folder + ?Sized>(_visitor: &mut V, _i: Constness) -> Constness {
     use ::Constness::*;
     match _i {
         Const(_binding_0, ) => {
@@ -761,7 +761,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_defaultness<V: Folder + ?Sized>(_visitor: &mut V, _i: Defaultness) -> Defaultness {
+pub fn fold_defaultness<V: Folder + ?Sized>(_visitor: &mut V, _i: Defaultness) -> Defaultness {
     use ::Defaultness::*;
     match _i {
         Default(_binding_0, ) => {
@@ -773,7 +773,7 @@
     }
 }
 
-pub fn walk_derive_input<V: Folder + ?Sized>(_visitor: &mut V, _i: DeriveInput) -> DeriveInput {
+pub fn fold_derive_input<V: Folder + ?Sized>(_visitor: &mut V, _i: DeriveInput) -> DeriveInput {
     DeriveInput {
         ident: _i . ident,
         vis: _visitor.fold_visibility(_i . vis),
@@ -783,14 +783,14 @@
     }
 }
 
-pub fn walk_expr<V: Folder + ?Sized>(_visitor: &mut V, _i: Expr) -> Expr {
+pub fn fold_expr<V: Folder + ?Sized>(_visitor: &mut V, _i: Expr) -> Expr {
     Expr {
         node: _visitor.fold_expr_kind(_i . node),
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_addr_of<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAddrOf) -> ExprAddrOf {
+pub fn fold_expr_addr_of<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAddrOf) -> ExprAddrOf {
     ExprAddrOf {
         and_token: _i . and_token,
         mutbl: _visitor.fold_mutability(_i . mutbl),
@@ -798,14 +798,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_array<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprArray) -> ExprArray {
+pub fn fold_expr_array<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprArray) -> ExprArray {
     ExprArray {
         exprs: FoldHelper::lift(_i . exprs, |it| { _visitor.fold_expr(it) }),
         bracket_token: _i . bracket_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_assign<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAssign) -> ExprAssign {
+pub fn fold_expr_assign<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAssign) -> ExprAssign {
     ExprAssign {
         left: Box::new(_visitor.fold_expr(* _i . left)),
         right: Box::new(_visitor.fold_expr(* _i . right)),
@@ -813,7 +813,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_assign_op<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAssignOp) -> ExprAssignOp {
+pub fn fold_expr_assign_op<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAssignOp) -> ExprAssignOp {
     ExprAssignOp {
         op: _visitor.fold_bin_op(_i . op),
         left: Box::new(_visitor.fold_expr(* _i . left)),
@@ -821,7 +821,7 @@
     }
 }
 
-pub fn walk_expr_binary<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBinary) -> ExprBinary {
+pub fn fold_expr_binary<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBinary) -> ExprBinary {
     ExprBinary {
         op: _visitor.fold_bin_op(_i . op),
         left: Box::new(_visitor.fold_expr(* _i . left)),
@@ -829,21 +829,21 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_block<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBlock) -> ExprBlock {
+pub fn fold_expr_block<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBlock) -> ExprBlock {
     ExprBlock {
         unsafety: _visitor.fold_unsafety(_i . unsafety),
         block: _visitor.fold_block(_i . block),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_box<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBox) -> ExprBox {
+pub fn fold_expr_box<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBox) -> ExprBox {
     ExprBox {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         box_token: _i . box_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_break<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBreak) -> ExprBreak {
+pub fn fold_expr_break<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBreak) -> ExprBreak {
     ExprBreak {
         label: _i . label,
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
@@ -851,7 +851,7 @@
     }
 }
 
-pub fn walk_expr_call<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCall) -> ExprCall {
+pub fn fold_expr_call<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCall) -> ExprCall {
     ExprCall {
         func: Box::new(_visitor.fold_expr(* _i . func)),
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
@@ -859,7 +859,7 @@
     }
 }
 
-pub fn walk_expr_cast<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCast) -> ExprCast {
+pub fn fold_expr_cast<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCast) -> ExprCast {
     ExprCast {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         as_token: _i . as_token,
@@ -867,7 +867,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_catch<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCatch) -> ExprCatch {
+pub fn fold_expr_catch<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCatch) -> ExprCatch {
     ExprCatch {
         do_token: _i . do_token,
         catch_token: _i . catch_token,
@@ -875,7 +875,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_closure<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprClosure) -> ExprClosure {
+pub fn fold_expr_closure<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprClosure) -> ExprClosure {
     ExprClosure {
         capture: _visitor.fold_capture_by(_i . capture),
         decl: Box::new(_visitor.fold_fn_decl(* _i . decl)),
@@ -885,14 +885,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_continue<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprContinue) -> ExprContinue {
+pub fn fold_expr_continue<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprContinue) -> ExprContinue {
     ExprContinue {
         label: _i . label,
         continue_token: _i . continue_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_field<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprField) -> ExprField {
+pub fn fold_expr_field<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprField) -> ExprField {
     ExprField {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         field: _i . field,
@@ -900,7 +900,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_for_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprForLoop) -> ExprForLoop {
+pub fn fold_expr_for_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprForLoop) -> ExprForLoop {
     ExprForLoop {
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
@@ -912,14 +912,14 @@
     }
 }
 
-pub fn walk_expr_group<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprGroup) -> ExprGroup {
+pub fn fold_expr_group<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprGroup) -> ExprGroup {
     ExprGroup {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         group_token: _i . group_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_if<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIf) -> ExprIf {
+pub fn fold_expr_if<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIf) -> ExprIf {
     ExprIf {
         cond: Box::new(_visitor.fold_expr(* _i . cond)),
         if_true: _visitor.fold_block(_i . if_true),
@@ -929,7 +929,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_if_let<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIfLet) -> ExprIfLet {
+pub fn fold_expr_if_let<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIfLet) -> ExprIfLet {
     ExprIfLet {
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
@@ -942,7 +942,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_in_place<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprInPlace) -> ExprInPlace {
+pub fn fold_expr_in_place<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprInPlace) -> ExprInPlace {
     ExprInPlace {
         place: Box::new(_visitor.fold_expr(* _i . place)),
         kind: _visitor.fold_in_place_kind(_i . kind),
@@ -950,7 +950,7 @@
     }
 }
 
-pub fn walk_expr_index<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIndex) -> ExprIndex {
+pub fn fold_expr_index<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIndex) -> ExprIndex {
     ExprIndex {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         index: Box::new(_visitor.fold_expr(* _i . index)),
@@ -958,7 +958,7 @@
     }
 }
 
-pub fn walk_expr_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprKind) -> ExprKind {
+pub fn fold_expr_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprKind) -> ExprKind {
     use ::ExprKind::*;
     match _i {
         Box(_binding_0, ) => {
@@ -1159,7 +1159,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprLoop) -> ExprLoop {
+pub fn fold_expr_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprLoop) -> ExprLoop {
     ExprLoop {
         body: _visitor.fold_block(_i . body),
         label: _i . label,
@@ -1168,7 +1168,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_match<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMatch) -> ExprMatch {
+pub fn fold_expr_match<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMatch) -> ExprMatch {
     ExprMatch {
         match_token: _i . match_token,
         brace_token: _i . brace_token,
@@ -1177,7 +1177,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_method_call<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMethodCall) -> ExprMethodCall {
+pub fn fold_expr_method_call<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMethodCall) -> ExprMethodCall {
     ExprMethodCall {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         method: _i . method,
@@ -1191,21 +1191,21 @@
     }
 }
 
-pub fn walk_expr_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprParen) -> ExprParen {
+pub fn fold_expr_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprParen) -> ExprParen {
     ExprParen {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         paren_token: _i . paren_token,
     }
 }
 
-pub fn walk_expr_path<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprPath) -> ExprPath {
+pub fn fold_expr_path<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprPath) -> ExprPath {
     ExprPath {
         qself: (_i . qself).map(|it| { _visitor.fold_qself(it) }),
         path: _visitor.fold_path(_i . path),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_range<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRange) -> ExprRange {
+pub fn fold_expr_range<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRange) -> ExprRange {
     ExprRange {
         from: (_i . from).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
         to: (_i . to).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
@@ -1213,7 +1213,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_repeat<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRepeat) -> ExprRepeat {
+pub fn fold_expr_repeat<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRepeat) -> ExprRepeat {
     ExprRepeat {
         bracket_token: _i . bracket_token,
         semi_token: _i . semi_token,
@@ -1222,14 +1222,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_ret<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRet) -> ExprRet {
+pub fn fold_expr_ret<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRet) -> ExprRet {
     ExprRet {
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
         return_token: _i . return_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprStruct) -> ExprStruct {
+pub fn fold_expr_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprStruct) -> ExprStruct {
     ExprStruct {
         path: _visitor.fold_path(_i . path),
         fields: FoldHelper::lift(_i . fields, |it| { _visitor.fold_field_value(it) }),
@@ -1239,14 +1239,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_try<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTry) -> ExprTry {
+pub fn fold_expr_try<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTry) -> ExprTry {
     ExprTry {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         question_token: _i . question_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_tup<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTup) -> ExprTup {
+pub fn fold_expr_tup<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTup) -> ExprTup {
     ExprTup {
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
         paren_token: _i . paren_token,
@@ -1254,7 +1254,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_tup_field<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTupField) -> ExprTupField {
+pub fn fold_expr_tup_field<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTupField) -> ExprTupField {
     ExprTupField {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         field: _i . field,
@@ -1262,7 +1262,7 @@
     }
 }
 
-pub fn walk_expr_type<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprType) -> ExprType {
+pub fn fold_expr_type<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprType) -> ExprType {
     ExprType {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         colon_token: _i . colon_token,
@@ -1270,14 +1270,14 @@
     }
 }
 
-pub fn walk_expr_unary<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprUnary) -> ExprUnary {
+pub fn fold_expr_unary<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprUnary) -> ExprUnary {
     ExprUnary {
         op: _visitor.fold_un_op(_i . op),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_while<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhile) -> ExprWhile {
+pub fn fold_expr_while<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhile) -> ExprWhile {
     ExprWhile {
         cond: Box::new(_visitor.fold_expr(* _i . cond)),
         body: _visitor.fold_block(_i . body),
@@ -1287,7 +1287,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_while_let<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhileLet) -> ExprWhileLet {
+pub fn fold_expr_while_let<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhileLet) -> ExprWhileLet {
     ExprWhileLet {
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
@@ -1300,14 +1300,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_yield<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprYield) -> ExprYield {
+pub fn fold_expr_yield<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprYield) -> ExprYield {
     ExprYield {
         yield_token: _i . yield_token,
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
     }
 }
 
-pub fn walk_field<V: Folder + ?Sized>(_visitor: &mut V, _i: Field) -> Field {
+pub fn fold_field<V: Folder + ?Sized>(_visitor: &mut V, _i: Field) -> Field {
     Field {
         ident: _i . ident,
         vis: _visitor.fold_visibility(_i . vis),
@@ -1317,7 +1317,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_field_pat<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldPat) -> FieldPat {
+pub fn fold_field_pat<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldPat) -> FieldPat {
     FieldPat {
         ident: _i . ident,
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
@@ -1327,7 +1327,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_field_value<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldValue) -> FieldValue {
+pub fn fold_field_value<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldValue) -> FieldValue {
     FieldValue {
         ident: _i . ident,
         expr: _visitor.fold_expr(_i . expr),
@@ -1337,7 +1337,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_file<V: Folder + ?Sized>(_visitor: &mut V, _i: File) -> File {
+pub fn fold_file<V: Folder + ?Sized>(_visitor: &mut V, _i: File) -> File {
     File {
         shebang: _i . shebang,
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1345,7 +1345,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_fn_arg<V: Folder + ?Sized>(_visitor: &mut V, _i: FnArg) -> FnArg {
+pub fn fold_fn_arg<V: Folder + ?Sized>(_visitor: &mut V, _i: FnArg) -> FnArg {
     use ::FnArg::*;
     match _i {
         SelfRef(_binding_0, ) => {
@@ -1371,7 +1371,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_fn_decl<V: Folder + ?Sized>(_visitor: &mut V, _i: FnDecl) -> FnDecl {
+pub fn fold_fn_decl<V: Folder + ?Sized>(_visitor: &mut V, _i: FnDecl) -> FnDecl {
     FnDecl {
         fn_token: _i . fn_token,
         paren_token: _i . paren_token,
@@ -1383,7 +1383,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItem) -> ForeignItem {
+pub fn fold_foreign_item<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItem) -> ForeignItem {
     ForeignItem {
         ident: _i . ident,
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1393,13 +1393,13 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItemFn) -> ForeignItemFn {
+pub fn fold_foreign_item_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItemFn) -> ForeignItemFn {
     ForeignItemFn {
         decl: Box::new(_visitor.fold_fn_decl(* _i . decl)),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItemKind) -> ForeignItemKind {
+pub fn fold_foreign_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItemKind) -> ForeignItemKind {
     use ::ForeignItemKind::*;
     match _i {
         Fn(_binding_0, ) => {
@@ -1415,7 +1415,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_static<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItemStatic) -> ForeignItemStatic {
+pub fn fold_foreign_item_static<V: Folder + ?Sized>(_visitor: &mut V, _i: ForeignItemStatic) -> ForeignItemStatic {
     ForeignItemStatic {
         static_token: _i . static_token,
         ty: Box::new(_visitor.fold_ty(* _i . ty)),
@@ -1424,7 +1424,7 @@
     }
 }
 
-pub fn walk_function_ret_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: FunctionRetTy) -> FunctionRetTy {
+pub fn fold_function_ret_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: FunctionRetTy) -> FunctionRetTy {
     use ::FunctionRetTy::*;
     match _i {
         Default => { Default }
@@ -1437,7 +1437,7 @@
     }
 }
 
-pub fn walk_generics<V: Folder + ?Sized>(_visitor: &mut V, _i: Generics) -> Generics {
+pub fn fold_generics<V: Folder + ?Sized>(_visitor: &mut V, _i: Generics) -> Generics {
     Generics {
         lt_token: _i . lt_token,
         gt_token: _i . gt_token,
@@ -1447,14 +1447,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItem) -> ImplItem {
+pub fn fold_impl_item<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItem) -> ImplItem {
     ImplItem {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         node: _visitor.fold_impl_item_kind(_i . node),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_const<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemConst) -> ImplItemConst {
+pub fn fold_impl_item_const<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemConst) -> ImplItemConst {
     ImplItemConst {
         vis: _visitor.fold_visibility(_i . vis),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
@@ -1468,7 +1468,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemKind) -> ImplItemKind {
+pub fn fold_impl_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemKind) -> ImplItemKind {
     use ::ImplItemKind::*;
     match _i {
         Const(_binding_0, ) => {
@@ -1494,7 +1494,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_method<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemMethod) -> ImplItemMethod {
+pub fn fold_impl_item_method<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemMethod) -> ImplItemMethod {
     ImplItemMethod {
         vis: _visitor.fold_visibility(_i . vis),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
@@ -1503,7 +1503,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_type<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemType) -> ImplItemType {
+pub fn fold_impl_item_type<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItemType) -> ImplItemType {
     ImplItemType {
         vis: _visitor.fold_visibility(_i . vis),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
@@ -1515,7 +1515,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_polarity<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplPolarity) -> ImplPolarity {
+pub fn fold_impl_polarity<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplPolarity) -> ImplPolarity {
     use ::ImplPolarity::*;
     match _i {
         Positive => { Positive }
@@ -1527,7 +1527,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_in_place_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: InPlaceKind) -> InPlaceKind {
+pub fn fold_in_place_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: InPlaceKind) -> InPlaceKind {
     use ::InPlaceKind::*;
     match _i {
         Arrow(_binding_0, ) => {
@@ -1543,14 +1543,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item<V: Folder + ?Sized>(_visitor: &mut V, _i: Item) -> Item {
+pub fn fold_item<V: Folder + ?Sized>(_visitor: &mut V, _i: Item) -> Item {
     Item {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         node: _visitor.fold_item_kind(_i . node),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_const<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemConst) -> ItemConst {
+pub fn fold_item_const<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemConst) -> ItemConst {
     ItemConst {
         vis: _visitor.fold_visibility(_i . vis),
         const_token: _i . const_token,
@@ -1563,7 +1563,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_default_impl<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemDefaultImpl) -> ItemDefaultImpl {
+pub fn fold_item_default_impl<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemDefaultImpl) -> ItemDefaultImpl {
     ItemDefaultImpl {
         unsafety: _visitor.fold_unsafety(_i . unsafety),
         impl_token: _i . impl_token,
@@ -1574,7 +1574,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_enum<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemEnum) -> ItemEnum {
+pub fn fold_item_enum<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemEnum) -> ItemEnum {
     ItemEnum {
         vis: _visitor.fold_visibility(_i . vis),
         enum_token: _i . enum_token,
@@ -1585,7 +1585,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_extern_crate<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemExternCrate) -> ItemExternCrate {
+pub fn fold_item_extern_crate<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemExternCrate) -> ItemExternCrate {
     ItemExternCrate {
         vis: _visitor.fold_visibility(_i . vis),
         extern_token: _i . extern_token,
@@ -1596,7 +1596,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemFn) -> ItemFn {
+pub fn fold_item_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemFn) -> ItemFn {
     ItemFn {
         vis: _visitor.fold_visibility(_i . vis),
         constness: _visitor.fold_constness(_i . constness),
@@ -1608,7 +1608,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_foreign_mod<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemForeignMod) -> ItemForeignMod {
+pub fn fold_item_foreign_mod<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemForeignMod) -> ItemForeignMod {
     ItemForeignMod {
         abi: _visitor.fold_abi(_i . abi),
         brace_token: _i . brace_token,
@@ -1616,7 +1616,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_impl<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemImpl) -> ItemImpl {
+pub fn fold_item_impl<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemImpl) -> ItemImpl {
     ItemImpl {
         defaultness: _visitor.fold_defaultness(_i . defaultness),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
@@ -1629,7 +1629,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemKind) -> ItemKind {
+pub fn fold_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemKind) -> ItemKind {
     use ::ItemKind::*;
     match _i {
         ExternCrate(_binding_0, ) => {
@@ -1710,7 +1710,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_mod<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemMod) -> ItemMod {
+pub fn fold_item_mod<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemMod) -> ItemMod {
     ItemMod {
         vis: _visitor.fold_visibility(_i . vis),
         mod_token: _i . mod_token,
@@ -1720,7 +1720,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_static<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemStatic) -> ItemStatic {
+pub fn fold_item_static<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemStatic) -> ItemStatic {
     ItemStatic {
         vis: _visitor.fold_visibility(_i . vis),
         static_token: _i . static_token,
@@ -1734,7 +1734,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemStruct) -> ItemStruct {
+pub fn fold_item_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemStruct) -> ItemStruct {
     ItemStruct {
         vis: _visitor.fold_visibility(_i . vis),
         struct_token: _i . struct_token,
@@ -1745,7 +1745,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_trait<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemTrait) -> ItemTrait {
+pub fn fold_item_trait<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemTrait) -> ItemTrait {
     ItemTrait {
         vis: _visitor.fold_visibility(_i . vis),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
@@ -1759,7 +1759,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemTy) -> ItemTy {
+pub fn fold_item_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemTy) -> ItemTy {
     ItemTy {
         vis: _visitor.fold_visibility(_i . vis),
         type_token: _i . type_token,
@@ -1771,7 +1771,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_union<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemUnion) -> ItemUnion {
+pub fn fold_item_union<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemUnion) -> ItemUnion {
     ItemUnion {
         vis: _visitor.fold_visibility(_i . vis),
         union_token: _i . union_token,
@@ -1781,7 +1781,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_use<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemUse) -> ItemUse {
+pub fn fold_item_use<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemUse) -> ItemUse {
     ItemUse {
         vis: _visitor.fold_visibility(_i . vis),
         use_token: _i . use_token,
@@ -1790,7 +1790,7 @@
     }
 }
 
-pub fn walk_lifetime_def<V: Folder + ?Sized>(_visitor: &mut V, _i: LifetimeDef) -> LifetimeDef {
+pub fn fold_lifetime_def<V: Folder + ?Sized>(_visitor: &mut V, _i: LifetimeDef) -> LifetimeDef {
     LifetimeDef {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         lifetime: _i . lifetime,
@@ -1799,7 +1799,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_local<V: Folder + ?Sized>(_visitor: &mut V, _i: Local) -> Local {
+pub fn fold_local<V: Folder + ?Sized>(_visitor: &mut V, _i: Local) -> Local {
     Local {
         let_token: _i . let_token,
         colon_token: _i . colon_token,
@@ -1812,7 +1812,7 @@
     }
 }
 
-pub fn walk_mac<V: Folder + ?Sized>(_visitor: &mut V, _i: Mac) -> Mac {
+pub fn fold_mac<V: Folder + ?Sized>(_visitor: &mut V, _i: Mac) -> Mac {
     Mac {
         path: _visitor.fold_path(_i . path),
         bang_token: _i . bang_token,
@@ -1821,7 +1821,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_mac_stmt_style<V: Folder + ?Sized>(_visitor: &mut V, _i: MacStmtStyle) -> MacStmtStyle {
+pub fn fold_mac_stmt_style<V: Folder + ?Sized>(_visitor: &mut V, _i: MacStmtStyle) -> MacStmtStyle {
     use ::MacStmtStyle::*;
     match _i {
         Semicolon(_binding_0, ) => {
@@ -1834,7 +1834,7 @@
     }
 }
 
-pub fn walk_meta_item<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItem) -> MetaItem {
+pub fn fold_meta_item<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItem) -> MetaItem {
     use ::MetaItem::*;
     match _i {
         Term(_binding_0, ) => {
@@ -1855,7 +1855,7 @@
     }
 }
 
-pub fn walk_meta_item_list<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItemList) -> MetaItemList {
+pub fn fold_meta_item_list<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItemList) -> MetaItemList {
     MetaItemList {
         ident: _i . ident,
         paren_token: _i . paren_token,
@@ -1863,7 +1863,7 @@
     }
 }
 
-pub fn walk_meta_name_value<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaNameValue) -> MetaNameValue {
+pub fn fold_meta_name_value<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaNameValue) -> MetaNameValue {
     MetaNameValue {
         ident: _i . ident,
         eq_token: _i . eq_token,
@@ -1871,7 +1871,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_method_sig<V: Folder + ?Sized>(_visitor: &mut V, _i: MethodSig) -> MethodSig {
+pub fn fold_method_sig<V: Folder + ?Sized>(_visitor: &mut V, _i: MethodSig) -> MethodSig {
     MethodSig {
         constness: _visitor.fold_constness(_i . constness),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
@@ -1881,14 +1881,14 @@
     }
 }
 
-pub fn walk_mut_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: MutTy) -> MutTy {
+pub fn fold_mut_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: MutTy) -> MutTy {
     MutTy {
         ty: _visitor.fold_ty(_i . ty),
         mutability: _visitor.fold_mutability(_i . mutability),
     }
 }
 
-pub fn walk_mutability<V: Folder + ?Sized>(_visitor: &mut V, _i: Mutability) -> Mutability {
+pub fn fold_mutability<V: Folder + ?Sized>(_visitor: &mut V, _i: Mutability) -> Mutability {
     use ::Mutability::*;
     match _i {
         Mutable(_binding_0, ) => {
@@ -1900,7 +1900,7 @@
     }
 }
 
-pub fn walk_nested_meta_item<V: Folder + ?Sized>(_visitor: &mut V, _i: NestedMetaItem) -> NestedMetaItem {
+pub fn fold_nested_meta_item<V: Folder + ?Sized>(_visitor: &mut V, _i: NestedMetaItem) -> NestedMetaItem {
     use ::NestedMetaItem::*;
     match _i {
         MetaItem(_binding_0, ) => {
@@ -1916,7 +1916,7 @@
     }
 }
 
-pub fn walk_parenthesized_parameter_data<V: Folder + ?Sized>(_visitor: &mut V, _i: ParenthesizedParameterData) -> ParenthesizedParameterData {
+pub fn fold_parenthesized_parameter_data<V: Folder + ?Sized>(_visitor: &mut V, _i: ParenthesizedParameterData) -> ParenthesizedParameterData {
     ParenthesizedParameterData {
         paren_token: _i . paren_token,
         inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_ty(it) }),
@@ -1924,7 +1924,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat<V: Folder + ?Sized>(_visitor: &mut V, _i: Pat) -> Pat {
+pub fn fold_pat<V: Folder + ?Sized>(_visitor: &mut V, _i: Pat) -> Pat {
     use ::Pat::*;
     match _i {
         Wild(_binding_0, ) => {
@@ -1990,14 +1990,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_box<V: Folder + ?Sized>(_visitor: &mut V, _i: PatBox) -> PatBox {
+pub fn fold_pat_box<V: Folder + ?Sized>(_visitor: &mut V, _i: PatBox) -> PatBox {
     PatBox {
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         box_token: _i . box_token,
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_ident<V: Folder + ?Sized>(_visitor: &mut V, _i: PatIdent) -> PatIdent {
+pub fn fold_pat_ident<V: Folder + ?Sized>(_visitor: &mut V, _i: PatIdent) -> PatIdent {
     PatIdent {
         mode: _visitor.fold_binding_mode(_i . mode),
         ident: _i . ident,
@@ -2006,20 +2006,20 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_lit<V: Folder + ?Sized>(_visitor: &mut V, _i: PatLit) -> PatLit {
+pub fn fold_pat_lit<V: Folder + ?Sized>(_visitor: &mut V, _i: PatLit) -> PatLit {
     PatLit {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_path<V: Folder + ?Sized>(_visitor: &mut V, _i: PatPath) -> PatPath {
+pub fn fold_pat_path<V: Folder + ?Sized>(_visitor: &mut V, _i: PatPath) -> PatPath {
     PatPath {
         qself: (_i . qself).map(|it| { _visitor.fold_qself(it) }),
         path: _visitor.fold_path(_i . path),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_range<V: Folder + ?Sized>(_visitor: &mut V, _i: PatRange) -> PatRange {
+pub fn fold_pat_range<V: Folder + ?Sized>(_visitor: &mut V, _i: PatRange) -> PatRange {
     PatRange {
         lo: Box::new(_visitor.fold_expr(* _i . lo)),
         hi: Box::new(_visitor.fold_expr(* _i . hi)),
@@ -2027,7 +2027,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: PatRef) -> PatRef {
+pub fn fold_pat_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: PatRef) -> PatRef {
     PatRef {
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         mutbl: _visitor.fold_mutability(_i . mutbl),
@@ -2035,7 +2035,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_slice<V: Folder + ?Sized>(_visitor: &mut V, _i: PatSlice) -> PatSlice {
+pub fn fold_pat_slice<V: Folder + ?Sized>(_visitor: &mut V, _i: PatSlice) -> PatSlice {
     PatSlice {
         front: FoldHelper::lift(_i . front, |it| { _visitor.fold_pat(it) }),
         middle: (_i . middle).map(|it| { Box::new(_visitor.fold_pat(* it)) }),
@@ -2046,7 +2046,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: PatStruct) -> PatStruct {
+pub fn fold_pat_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: PatStruct) -> PatStruct {
     PatStruct {
         path: _visitor.fold_path(_i . path),
         fields: FoldHelper::lift(_i . fields, |it| { _visitor.fold_field_pat(it) }),
@@ -2055,7 +2055,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_tuple<V: Folder + ?Sized>(_visitor: &mut V, _i: PatTuple) -> PatTuple {
+pub fn fold_pat_tuple<V: Folder + ?Sized>(_visitor: &mut V, _i: PatTuple) -> PatTuple {
     PatTuple {
         pats: FoldHelper::lift(_i . pats, |it| { _visitor.fold_pat(it) }),
         dots_pos: _i . dots_pos,
@@ -2065,27 +2065,27 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_tuple_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: PatTupleStruct) -> PatTupleStruct {
+pub fn fold_pat_tuple_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: PatTupleStruct) -> PatTupleStruct {
     PatTupleStruct {
         path: _visitor.fold_path(_i . path),
         pat: _visitor.fold_pat_tuple(_i . pat),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_wild<V: Folder + ?Sized>(_visitor: &mut V, _i: PatWild) -> PatWild {
+pub fn fold_pat_wild<V: Folder + ?Sized>(_visitor: &mut V, _i: PatWild) -> PatWild {
     PatWild {
         underscore_token: _i . underscore_token,
     }
 }
 
-pub fn walk_path<V: Folder + ?Sized>(_visitor: &mut V, _i: Path) -> Path {
+pub fn fold_path<V: Folder + ?Sized>(_visitor: &mut V, _i: Path) -> Path {
     Path {
         leading_colon: _i . leading_colon,
         segments: FoldHelper::lift(_i . segments, |it| { _visitor.fold_path_segment(it) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_glob<V: Folder + ?Sized>(_visitor: &mut V, _i: PathGlob) -> PathGlob {
+pub fn fold_path_glob<V: Folder + ?Sized>(_visitor: &mut V, _i: PathGlob) -> PathGlob {
     PathGlob {
         path: _visitor.fold_path(_i . path),
         colon2_token: _i . colon2_token,
@@ -2093,7 +2093,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_list<V: Folder + ?Sized>(_visitor: &mut V, _i: PathList) -> PathList {
+pub fn fold_path_list<V: Folder + ?Sized>(_visitor: &mut V, _i: PathList) -> PathList {
     PathList {
         path: _visitor.fold_path(_i . path),
         colon2_token: _i . colon2_token,
@@ -2102,7 +2102,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_list_item<V: Folder + ?Sized>(_visitor: &mut V, _i: PathListItem) -> PathListItem {
+pub fn fold_path_list_item<V: Folder + ?Sized>(_visitor: &mut V, _i: PathListItem) -> PathListItem {
     PathListItem {
         name: _i . name,
         rename: _i . rename,
@@ -2110,7 +2110,7 @@
     }
 }
 
-pub fn walk_path_parameters<V: Folder + ?Sized>(_visitor: &mut V, _i: PathParameters) -> PathParameters {
+pub fn fold_path_parameters<V: Folder + ?Sized>(_visitor: &mut V, _i: PathParameters) -> PathParameters {
     use ::PathParameters::*;
     match _i {
         None => { None }
@@ -2127,14 +2127,14 @@
     }
 }
 
-pub fn walk_path_segment<V: Folder + ?Sized>(_visitor: &mut V, _i: PathSegment) -> PathSegment {
+pub fn fold_path_segment<V: Folder + ?Sized>(_visitor: &mut V, _i: PathSegment) -> PathSegment {
     PathSegment {
         ident: _i . ident,
         parameters: _visitor.fold_path_parameters(_i . parameters),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_simple<V: Folder + ?Sized>(_visitor: &mut V, _i: PathSimple) -> PathSimple {
+pub fn fold_path_simple<V: Folder + ?Sized>(_visitor: &mut V, _i: PathSimple) -> PathSimple {
     PathSimple {
         path: _visitor.fold_path(_i . path),
         as_token: _i . as_token,
@@ -2142,14 +2142,14 @@
     }
 }
 
-pub fn walk_poly_trait_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: PolyTraitRef) -> PolyTraitRef {
+pub fn fold_poly_trait_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: PolyTraitRef) -> PolyTraitRef {
     PolyTraitRef {
         bound_lifetimes: (_i . bound_lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
         trait_ref: _visitor.fold_path(_i . trait_ref),
     }
 }
 
-pub fn walk_qself<V: Folder + ?Sized>(_visitor: &mut V, _i: QSelf) -> QSelf {
+pub fn fold_qself<V: Folder + ?Sized>(_visitor: &mut V, _i: QSelf) -> QSelf {
     QSelf {
         lt_token: _i . lt_token,
         ty: Box::new(_visitor.fold_ty(* _i . ty)),
@@ -2159,7 +2159,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_range_limits<V: Folder + ?Sized>(_visitor: &mut V, _i: RangeLimits) -> RangeLimits {
+pub fn fold_range_limits<V: Folder + ?Sized>(_visitor: &mut V, _i: RangeLimits) -> RangeLimits {
     use ::RangeLimits::*;
     match _i {
         HalfOpen(_binding_0, ) => {
@@ -2175,7 +2175,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_stmt<V: Folder + ?Sized>(_visitor: &mut V, _i: Stmt) -> Stmt {
+pub fn fold_stmt<V: Folder + ?Sized>(_visitor: &mut V, _i: Stmt) -> Stmt {
     use ::Stmt::*;
     match _i {
         Local(_binding_0, ) => {
@@ -2207,7 +2207,7 @@
     }
 }
 
-pub fn walk_trait_bound_modifier<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitBoundModifier) -> TraitBoundModifier {
+pub fn fold_trait_bound_modifier<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitBoundModifier) -> TraitBoundModifier {
     use ::TraitBoundModifier::*;
     match _i {
         None => { None }
@@ -2219,14 +2219,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItem) -> TraitItem {
+pub fn fold_trait_item<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItem) -> TraitItem {
     TraitItem {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         node: _visitor.fold_trait_item_kind(_i . node),
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_const<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemConst) -> TraitItemConst {
+pub fn fold_trait_item_const<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemConst) -> TraitItemConst {
     TraitItemConst {
         const_token: _i . const_token,
         ident: _i . ident,
@@ -2237,7 +2237,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemKind) -> TraitItemKind {
+pub fn fold_trait_item_kind<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemKind) -> TraitItemKind {
     use ::TraitItemKind::*;
     match _i {
         Const(_binding_0, ) => {
@@ -2263,7 +2263,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_method<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemMethod) -> TraitItemMethod {
+pub fn fold_trait_item_method<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemMethod) -> TraitItemMethod {
     TraitItemMethod {
         sig: _visitor.fold_method_sig(_i . sig),
         default: (_i . default).map(|it| { _visitor.fold_block(it) }),
@@ -2271,7 +2271,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_type<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemType) -> TraitItemType {
+pub fn fold_trait_item_type<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemType) -> TraitItemType {
     TraitItemType {
         type_token: _i . type_token,
         ident: _i . ident,
@@ -2282,7 +2282,7 @@
     }
 }
 
-pub fn walk_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: Ty) -> Ty {
+pub fn fold_ty<V: Folder + ?Sized>(_visitor: &mut V, _i: Ty) -> Ty {
     use ::Ty::*;
     match _i {
         Slice(_binding_0, ) => {
@@ -2358,7 +2358,7 @@
     }
 }
 
-pub fn walk_ty_array<V: Folder + ?Sized>(_visitor: &mut V, _i: TyArray) -> TyArray {
+pub fn fold_ty_array<V: Folder + ?Sized>(_visitor: &mut V, _i: TyArray) -> TyArray {
     TyArray {
         bracket_token: _i . bracket_token,
         ty: Box::new(_visitor.fold_ty(* _i . ty)),
@@ -2367,39 +2367,39 @@
     }
 }
 
-pub fn walk_ty_bare_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: TyBareFn) -> TyBareFn {
+pub fn fold_ty_bare_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: TyBareFn) -> TyBareFn {
     TyBareFn {
         ty: Box::new(_visitor.fold_bare_fn_ty(* _i . ty)),
     }
 }
 
-pub fn walk_ty_group<V: Folder + ?Sized>(_visitor: &mut V, _i: TyGroup) -> TyGroup {
+pub fn fold_ty_group<V: Folder + ?Sized>(_visitor: &mut V, _i: TyGroup) -> TyGroup {
     TyGroup {
         group_token: _i . group_token,
         ty: Box::new(_visitor.fold_ty(* _i . ty)),
     }
 }
 
-pub fn walk_ty_impl_trait<V: Folder + ?Sized>(_visitor: &mut V, _i: TyImplTrait) -> TyImplTrait {
+pub fn fold_ty_impl_trait<V: Folder + ?Sized>(_visitor: &mut V, _i: TyImplTrait) -> TyImplTrait {
     TyImplTrait {
         impl_token: _i . impl_token,
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_ty_param_bound(it) }),
     }
 }
 
-pub fn walk_ty_infer<V: Folder + ?Sized>(_visitor: &mut V, _i: TyInfer) -> TyInfer {
+pub fn fold_ty_infer<V: Folder + ?Sized>(_visitor: &mut V, _i: TyInfer) -> TyInfer {
     TyInfer {
         underscore_token: _i . underscore_token,
     }
 }
 
-pub fn walk_ty_never<V: Folder + ?Sized>(_visitor: &mut V, _i: TyNever) -> TyNever {
+pub fn fold_ty_never<V: Folder + ?Sized>(_visitor: &mut V, _i: TyNever) -> TyNever {
     TyNever {
         bang_token: _i . bang_token,
     }
 }
 
-pub fn walk_ty_param<V: Folder + ?Sized>(_visitor: &mut V, _i: TyParam) -> TyParam {
+pub fn fold_ty_param<V: Folder + ?Sized>(_visitor: &mut V, _i: TyParam) -> TyParam {
     TyParam {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         ident: _i . ident,
@@ -2410,7 +2410,7 @@
     }
 }
 
-pub fn walk_ty_param_bound<V: Folder + ?Sized>(_visitor: &mut V, _i: TyParamBound) -> TyParamBound {
+pub fn fold_ty_param_bound<V: Folder + ?Sized>(_visitor: &mut V, _i: TyParamBound) -> TyParamBound {
     use ::TyParamBound::*;
     match _i {
         Trait(_binding_0, _binding_1, ) => {
@@ -2427,21 +2427,21 @@
     }
 }
 
-pub fn walk_ty_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: TyParen) -> TyParen {
+pub fn fold_ty_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: TyParen) -> TyParen {
     TyParen {
         paren_token: _i . paren_token,
         ty: Box::new(_visitor.fold_ty(* _i . ty)),
     }
 }
 
-pub fn walk_ty_path<V: Folder + ?Sized>(_visitor: &mut V, _i: TyPath) -> TyPath {
+pub fn fold_ty_path<V: Folder + ?Sized>(_visitor: &mut V, _i: TyPath) -> TyPath {
     TyPath {
         qself: (_i . qself).map(|it| { _visitor.fold_qself(it) }),
         path: _visitor.fold_path(_i . path),
     }
 }
 
-pub fn walk_ty_ptr<V: Folder + ?Sized>(_visitor: &mut V, _i: TyPtr) -> TyPtr {
+pub fn fold_ty_ptr<V: Folder + ?Sized>(_visitor: &mut V, _i: TyPtr) -> TyPtr {
     TyPtr {
         star_token: _i . star_token,
         const_token: _i . const_token,
@@ -2449,7 +2449,7 @@
     }
 }
 
-pub fn walk_ty_rptr<V: Folder + ?Sized>(_visitor: &mut V, _i: TyRptr) -> TyRptr {
+pub fn fold_ty_rptr<V: Folder + ?Sized>(_visitor: &mut V, _i: TyRptr) -> TyRptr {
     TyRptr {
         and_token: _i . and_token,
         lifetime: _i . lifetime,
@@ -2457,20 +2457,20 @@
     }
 }
 
-pub fn walk_ty_slice<V: Folder + ?Sized>(_visitor: &mut V, _i: TySlice) -> TySlice {
+pub fn fold_ty_slice<V: Folder + ?Sized>(_visitor: &mut V, _i: TySlice) -> TySlice {
     TySlice {
         ty: Box::new(_visitor.fold_ty(* _i . ty)),
         bracket_token: _i . bracket_token,
     }
 }
 
-pub fn walk_ty_trait_object<V: Folder + ?Sized>(_visitor: &mut V, _i: TyTraitObject) -> TyTraitObject {
+pub fn fold_ty_trait_object<V: Folder + ?Sized>(_visitor: &mut V, _i: TyTraitObject) -> TyTraitObject {
     TyTraitObject {
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_ty_param_bound(it) }),
     }
 }
 
-pub fn walk_ty_tup<V: Folder + ?Sized>(_visitor: &mut V, _i: TyTup) -> TyTup {
+pub fn fold_ty_tup<V: Folder + ?Sized>(_visitor: &mut V, _i: TyTup) -> TyTup {
     TyTup {
         paren_token: _i . paren_token,
         tys: FoldHelper::lift(_i . tys, |it| { _visitor.fold_ty(it) }),
@@ -2478,7 +2478,7 @@
     }
 }
 
-pub fn walk_type_binding<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeBinding) -> TypeBinding {
+pub fn fold_type_binding<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeBinding) -> TypeBinding {
     TypeBinding {
         ident: _i . ident,
         eq_token: _i . eq_token,
@@ -2486,7 +2486,7 @@
     }
 }
 
-pub fn walk_un_op<V: Folder + ?Sized>(_visitor: &mut V, _i: UnOp) -> UnOp {
+pub fn fold_un_op<V: Folder + ?Sized>(_visitor: &mut V, _i: UnOp) -> UnOp {
     use ::UnOp::*;
     match _i {
         Deref(_binding_0, ) => {
@@ -2507,7 +2507,7 @@
     }
 }
 
-pub fn walk_unsafety<V: Folder + ?Sized>(_visitor: &mut V, _i: Unsafety) -> Unsafety {
+pub fn fold_unsafety<V: Folder + ?Sized>(_visitor: &mut V, _i: Unsafety) -> Unsafety {
     use ::Unsafety::*;
     match _i {
         Unsafe(_binding_0, ) => {
@@ -2519,7 +2519,7 @@
     }
 }
 
-pub fn walk_variant<V: Folder + ?Sized>(_visitor: &mut V, _i: Variant) -> Variant {
+pub fn fold_variant<V: Folder + ?Sized>(_visitor: &mut V, _i: Variant) -> Variant {
     Variant {
         ident: _i . ident,
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -2529,7 +2529,7 @@
     }
 }
 
-pub fn walk_variant_data<V: Folder + ?Sized>(_visitor: &mut V, _i: VariantData) -> VariantData {
+pub fn fold_variant_data<V: Folder + ?Sized>(_visitor: &mut V, _i: VariantData) -> VariantData {
     use ::VariantData::*;
     match _i {
         Struct(_binding_0, _binding_1, ) => {
@@ -2548,7 +2548,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_view_path<V: Folder + ?Sized>(_visitor: &mut V, _i: ViewPath) -> ViewPath {
+pub fn fold_view_path<V: Folder + ?Sized>(_visitor: &mut V, _i: ViewPath) -> ViewPath {
     use ::ViewPath::*;
     match _i {
         Simple(_binding_0, ) => {
@@ -2569,7 +2569,7 @@
     }
 }
 
-pub fn walk_vis_crate<V: Folder + ?Sized>(_visitor: &mut V, _i: VisCrate) -> VisCrate {
+pub fn fold_vis_crate<V: Folder + ?Sized>(_visitor: &mut V, _i: VisCrate) -> VisCrate {
     VisCrate {
         pub_token: _i . pub_token,
         paren_token: _i . paren_token,
@@ -2577,18 +2577,18 @@
     }
 }
 
-pub fn walk_vis_inherited<V: Folder + ?Sized>(_visitor: &mut V, _i: VisInherited) -> VisInherited {
+pub fn fold_vis_inherited<V: Folder + ?Sized>(_visitor: &mut V, _i: VisInherited) -> VisInherited {
     VisInherited {
     }
 }
 
-pub fn walk_vis_public<V: Folder + ?Sized>(_visitor: &mut V, _i: VisPublic) -> VisPublic {
+pub fn fold_vis_public<V: Folder + ?Sized>(_visitor: &mut V, _i: VisPublic) -> VisPublic {
     VisPublic {
         pub_token: _i . pub_token,
     }
 }
 
-pub fn walk_vis_restricted<V: Folder + ?Sized>(_visitor: &mut V, _i: VisRestricted) -> VisRestricted {
+pub fn fold_vis_restricted<V: Folder + ?Sized>(_visitor: &mut V, _i: VisRestricted) -> VisRestricted {
     VisRestricted {
         pub_token: _i . pub_token,
         paren_token: _i . paren_token,
@@ -2597,7 +2597,7 @@
     }
 }
 
-pub fn walk_visibility<V: Folder + ?Sized>(_visitor: &mut V, _i: Visibility) -> Visibility {
+pub fn fold_visibility<V: Folder + ?Sized>(_visitor: &mut V, _i: Visibility) -> Visibility {
     use ::Visibility::*;
     match _i {
         Public(_binding_0, ) => {
@@ -2623,7 +2623,7 @@
     }
 }
 
-pub fn walk_where_bound_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereBoundPredicate) -> WhereBoundPredicate {
+pub fn fold_where_bound_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereBoundPredicate) -> WhereBoundPredicate {
     WhereBoundPredicate {
         bound_lifetimes: (_i . bound_lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
         bounded_ty: _visitor.fold_ty(_i . bounded_ty),
@@ -2632,14 +2632,14 @@
     }
 }
 
-pub fn walk_where_clause<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereClause) -> WhereClause {
+pub fn fold_where_clause<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereClause) -> WhereClause {
     WhereClause {
         where_token: _i . where_token,
         predicates: FoldHelper::lift(_i . predicates, |it| { _visitor.fold_where_predicate(it) }),
     }
 }
 
-pub fn walk_where_eq_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereEqPredicate) -> WhereEqPredicate {
+pub fn fold_where_eq_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereEqPredicate) -> WhereEqPredicate {
     WhereEqPredicate {
         lhs_ty: _visitor.fold_ty(_i . lhs_ty),
         eq_token: _i . eq_token,
@@ -2647,7 +2647,7 @@
     }
 }
 
-pub fn walk_where_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WherePredicate) -> WherePredicate {
+pub fn fold_where_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WherePredicate) -> WherePredicate {
     use ::WherePredicate::*;
     match _i {
         BoundPredicate(_binding_0, ) => {
@@ -2668,7 +2668,7 @@
     }
 }
 
-pub fn walk_where_region_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereRegionPredicate) -> WhereRegionPredicate {
+pub fn fold_where_region_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereRegionPredicate) -> WhereRegionPredicate {
     WhereRegionPredicate {
         lifetime: _i . lifetime,
         colon_token: _i . colon_token,
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index d908aef..2ed90cf 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -6,7 +6,7 @@
 //! call `visit::walk_*` to apply the default traversal algorithm, or prevent
 //! deeper traversal by doing nothing.
 
-use super::*;
+use *;
 
 
 #[cfg(feature = "full")]
@@ -31,355 +31,355 @@
 /// new default implementation gets introduced.)
 pub trait Visitor {
 
-fn visit_abi(&mut self, i: &Abi) { walk_abi(self, i) }
+fn visit_abi(&mut self, i: &Abi) { visit_abi(self, i) }
 
-fn visit_abi_kind(&mut self, i: &AbiKind) { walk_abi_kind(self, i) }
+fn visit_abi_kind(&mut self, i: &AbiKind) { visit_abi_kind(self, i) }
 
-fn visit_angle_bracketed_parameter_data(&mut self, i: &AngleBracketedParameterData) { walk_angle_bracketed_parameter_data(self, i) }
+fn visit_angle_bracketed_parameter_data(&mut self, i: &AngleBracketedParameterData) { visit_angle_bracketed_parameter_data(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arg_captured(&mut self, i: &ArgCaptured) { walk_arg_captured(self, i) }
+fn visit_arg_captured(&mut self, i: &ArgCaptured) { visit_arg_captured(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arg_self(&mut self, i: &ArgSelf) { walk_arg_self(self, i) }
+fn visit_arg_self(&mut self, i: &ArgSelf) { visit_arg_self(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arg_self_ref(&mut self, i: &ArgSelfRef) { walk_arg_self_ref(self, i) }
+fn visit_arg_self_ref(&mut self, i: &ArgSelfRef) { visit_arg_self_ref(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arm(&mut self, i: &Arm) { walk_arm(self, i) }
+fn visit_arm(&mut self, i: &Arm) { visit_arm(self, i) }
 
-fn visit_attr_style(&mut self, i: &AttrStyle) { walk_attr_style(self, i) }
+fn visit_attr_style(&mut self, i: &AttrStyle) { visit_attr_style(self, i) }
 
-fn visit_attribute(&mut self, i: &Attribute) { walk_attribute(self, i) }
+fn visit_attribute(&mut self, i: &Attribute) { visit_attribute(self, i) }
 
-fn visit_bare_fn_arg(&mut self, i: &BareFnArg) { walk_bare_fn_arg(self, i) }
+fn visit_bare_fn_arg(&mut self, i: &BareFnArg) { visit_bare_fn_arg(self, i) }
 
-fn visit_bare_fn_arg_name(&mut self, i: &BareFnArgName) { walk_bare_fn_arg_name(self, i) }
+fn visit_bare_fn_arg_name(&mut self, i: &BareFnArgName) { visit_bare_fn_arg_name(self, i) }
 
-fn visit_bare_fn_ty(&mut self, i: &BareFnTy) { walk_bare_fn_ty(self, i) }
+fn visit_bare_fn_ty(&mut self, i: &BareFnTy) { visit_bare_fn_ty(self, i) }
 
-fn visit_bin_op(&mut self, i: &BinOp) { walk_bin_op(self, i) }
+fn visit_bin_op(&mut self, i: &BinOp) { visit_bin_op(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_binding_mode(&mut self, i: &BindingMode) { walk_binding_mode(self, i) }
+fn visit_binding_mode(&mut self, i: &BindingMode) { visit_binding_mode(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_block(&mut self, i: &Block) { walk_block(self, i) }
+fn visit_block(&mut self, i: &Block) { visit_block(self, i) }
 
-fn visit_body(&mut self, i: &Body) { walk_body(self, i) }
+fn visit_body(&mut self, i: &Body) { visit_body(self, i) }
 
-fn visit_body_enum(&mut self, i: &BodyEnum) { walk_body_enum(self, i) }
+fn visit_body_enum(&mut self, i: &BodyEnum) { visit_body_enum(self, i) }
 
-fn visit_body_struct(&mut self, i: &BodyStruct) { walk_body_struct(self, i) }
+fn visit_body_struct(&mut self, i: &BodyStruct) { visit_body_struct(self, i) }
 
-fn visit_bound_lifetimes(&mut self, i: &BoundLifetimes) { walk_bound_lifetimes(self, i) }
+fn visit_bound_lifetimes(&mut self, i: &BoundLifetimes) { visit_bound_lifetimes(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_capture_by(&mut self, i: &CaptureBy) { walk_capture_by(self, i) }
+fn visit_capture_by(&mut self, i: &CaptureBy) { visit_capture_by(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_constness(&mut self, i: &Constness) { walk_constness(self, i) }
+fn visit_constness(&mut self, i: &Constness) { visit_constness(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_defaultness(&mut self, i: &Defaultness) { walk_defaultness(self, i) }
+fn visit_defaultness(&mut self, i: &Defaultness) { visit_defaultness(self, i) }
 
-fn visit_derive_input(&mut self, i: &DeriveInput) { walk_derive_input(self, i) }
+fn visit_derive_input(&mut self, i: &DeriveInput) { visit_derive_input(self, i) }
 
-fn visit_expr(&mut self, i: &Expr) { walk_expr(self, i) }
+fn visit_expr(&mut self, i: &Expr) { visit_expr(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_addr_of(&mut self, i: &ExprAddrOf) { walk_expr_addr_of(self, i) }
+fn visit_expr_addr_of(&mut self, i: &ExprAddrOf) { visit_expr_addr_of(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_array(&mut self, i: &ExprArray) { walk_expr_array(self, i) }
+fn visit_expr_array(&mut self, i: &ExprArray) { visit_expr_array(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_assign(&mut self, i: &ExprAssign) { walk_expr_assign(self, i) }
+fn visit_expr_assign(&mut self, i: &ExprAssign) { visit_expr_assign(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_assign_op(&mut self, i: &ExprAssignOp) { walk_expr_assign_op(self, i) }
+fn visit_expr_assign_op(&mut self, i: &ExprAssignOp) { visit_expr_assign_op(self, i) }
 
-fn visit_expr_binary(&mut self, i: &ExprBinary) { walk_expr_binary(self, i) }
+fn visit_expr_binary(&mut self, i: &ExprBinary) { visit_expr_binary(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_block(&mut self, i: &ExprBlock) { walk_expr_block(self, i) }
+fn visit_expr_block(&mut self, i: &ExprBlock) { visit_expr_block(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_box(&mut self, i: &ExprBox) { walk_expr_box(self, i) }
+fn visit_expr_box(&mut self, i: &ExprBox) { visit_expr_box(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_break(&mut self, i: &ExprBreak) { walk_expr_break(self, i) }
+fn visit_expr_break(&mut self, i: &ExprBreak) { visit_expr_break(self, i) }
 
-fn visit_expr_call(&mut self, i: &ExprCall) { walk_expr_call(self, i) }
+fn visit_expr_call(&mut self, i: &ExprCall) { visit_expr_call(self, i) }
 
-fn visit_expr_cast(&mut self, i: &ExprCast) { walk_expr_cast(self, i) }
+fn visit_expr_cast(&mut self, i: &ExprCast) { visit_expr_cast(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_catch(&mut self, i: &ExprCatch) { walk_expr_catch(self, i) }
+fn visit_expr_catch(&mut self, i: &ExprCatch) { visit_expr_catch(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_closure(&mut self, i: &ExprClosure) { walk_expr_closure(self, i) }
+fn visit_expr_closure(&mut self, i: &ExprClosure) { visit_expr_closure(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_continue(&mut self, i: &ExprContinue) { walk_expr_continue(self, i) }
+fn visit_expr_continue(&mut self, i: &ExprContinue) { visit_expr_continue(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_field(&mut self, i: &ExprField) { walk_expr_field(self, i) }
+fn visit_expr_field(&mut self, i: &ExprField) { visit_expr_field(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_for_loop(&mut self, i: &ExprForLoop) { walk_expr_for_loop(self, i) }
+fn visit_expr_for_loop(&mut self, i: &ExprForLoop) { visit_expr_for_loop(self, i) }
 
-fn visit_expr_group(&mut self, i: &ExprGroup) { walk_expr_group(self, i) }
+fn visit_expr_group(&mut self, i: &ExprGroup) { visit_expr_group(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_if(&mut self, i: &ExprIf) { walk_expr_if(self, i) }
+fn visit_expr_if(&mut self, i: &ExprIf) { visit_expr_if(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_if_let(&mut self, i: &ExprIfLet) { walk_expr_if_let(self, i) }
+fn visit_expr_if_let(&mut self, i: &ExprIfLet) { visit_expr_if_let(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_in_place(&mut self, i: &ExprInPlace) { walk_expr_in_place(self, i) }
+fn visit_expr_in_place(&mut self, i: &ExprInPlace) { visit_expr_in_place(self, i) }
 
-fn visit_expr_index(&mut self, i: &ExprIndex) { walk_expr_index(self, i) }
+fn visit_expr_index(&mut self, i: &ExprIndex) { visit_expr_index(self, i) }
 
-fn visit_expr_kind(&mut self, i: &ExprKind) { walk_expr_kind(self, i) }
+fn visit_expr_kind(&mut self, i: &ExprKind) { visit_expr_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_loop(&mut self, i: &ExprLoop) { walk_expr_loop(self, i) }
+fn visit_expr_loop(&mut self, i: &ExprLoop) { visit_expr_loop(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_match(&mut self, i: &ExprMatch) { walk_expr_match(self, i) }
+fn visit_expr_match(&mut self, i: &ExprMatch) { visit_expr_match(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_method_call(&mut self, i: &ExprMethodCall) { walk_expr_method_call(self, i) }
+fn visit_expr_method_call(&mut self, i: &ExprMethodCall) { visit_expr_method_call(self, i) }
 
-fn visit_expr_paren(&mut self, i: &ExprParen) { walk_expr_paren(self, i) }
+fn visit_expr_paren(&mut self, i: &ExprParen) { visit_expr_paren(self, i) }
 
-fn visit_expr_path(&mut self, i: &ExprPath) { walk_expr_path(self, i) }
+fn visit_expr_path(&mut self, i: &ExprPath) { visit_expr_path(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_range(&mut self, i: &ExprRange) { walk_expr_range(self, i) }
+fn visit_expr_range(&mut self, i: &ExprRange) { visit_expr_range(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_repeat(&mut self, i: &ExprRepeat) { walk_expr_repeat(self, i) }
+fn visit_expr_repeat(&mut self, i: &ExprRepeat) { visit_expr_repeat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_ret(&mut self, i: &ExprRet) { walk_expr_ret(self, i) }
+fn visit_expr_ret(&mut self, i: &ExprRet) { visit_expr_ret(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_struct(&mut self, i: &ExprStruct) { walk_expr_struct(self, i) }
+fn visit_expr_struct(&mut self, i: &ExprStruct) { visit_expr_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_try(&mut self, i: &ExprTry) { walk_expr_try(self, i) }
+fn visit_expr_try(&mut self, i: &ExprTry) { visit_expr_try(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_tup(&mut self, i: &ExprTup) { walk_expr_tup(self, i) }
+fn visit_expr_tup(&mut self, i: &ExprTup) { visit_expr_tup(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_tup_field(&mut self, i: &ExprTupField) { walk_expr_tup_field(self, i) }
+fn visit_expr_tup_field(&mut self, i: &ExprTupField) { visit_expr_tup_field(self, i) }
 
-fn visit_expr_type(&mut self, i: &ExprType) { walk_expr_type(self, i) }
+fn visit_expr_type(&mut self, i: &ExprType) { visit_expr_type(self, i) }
 
-fn visit_expr_unary(&mut self, i: &ExprUnary) { walk_expr_unary(self, i) }
+fn visit_expr_unary(&mut self, i: &ExprUnary) { visit_expr_unary(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_while(&mut self, i: &ExprWhile) { walk_expr_while(self, i) }
+fn visit_expr_while(&mut self, i: &ExprWhile) { visit_expr_while(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_while_let(&mut self, i: &ExprWhileLet) { walk_expr_while_let(self, i) }
+fn visit_expr_while_let(&mut self, i: &ExprWhileLet) { visit_expr_while_let(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_yield(&mut self, i: &ExprYield) { walk_expr_yield(self, i) }
+fn visit_expr_yield(&mut self, i: &ExprYield) { visit_expr_yield(self, i) }
 
-fn visit_field(&mut self, i: &Field) { walk_field(self, i) }
+fn visit_field(&mut self, i: &Field) { visit_field(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_field_pat(&mut self, i: &FieldPat) { walk_field_pat(self, i) }
+fn visit_field_pat(&mut self, i: &FieldPat) { visit_field_pat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_field_value(&mut self, i: &FieldValue) { walk_field_value(self, i) }
+fn visit_field_value(&mut self, i: &FieldValue) { visit_field_value(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_file(&mut self, i: &File) { walk_file(self, i) }
+fn visit_file(&mut self, i: &File) { visit_file(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_fn_arg(&mut self, i: &FnArg) { walk_fn_arg(self, i) }
+fn visit_fn_arg(&mut self, i: &FnArg) { visit_fn_arg(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_fn_decl(&mut self, i: &FnDecl) { walk_fn_decl(self, i) }
+fn visit_fn_decl(&mut self, i: &FnDecl) { visit_fn_decl(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item(&mut self, i: &ForeignItem) { walk_foreign_item(self, i) }
+fn visit_foreign_item(&mut self, i: &ForeignItem) { visit_foreign_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item_fn(&mut self, i: &ForeignItemFn) { walk_foreign_item_fn(self, i) }
+fn visit_foreign_item_fn(&mut self, i: &ForeignItemFn) { visit_foreign_item_fn(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item_kind(&mut self, i: &ForeignItemKind) { walk_foreign_item_kind(self, i) }
+fn visit_foreign_item_kind(&mut self, i: &ForeignItemKind) { visit_foreign_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item_static(&mut self, i: &ForeignItemStatic) { walk_foreign_item_static(self, i) }
+fn visit_foreign_item_static(&mut self, i: &ForeignItemStatic) { visit_foreign_item_static(self, i) }
 
-fn visit_function_ret_ty(&mut self, i: &FunctionRetTy) { walk_function_ret_ty(self, i) }
+fn visit_function_ret_ty(&mut self, i: &FunctionRetTy) { visit_function_ret_ty(self, i) }
 
-fn visit_generics(&mut self, i: &Generics) { walk_generics(self, i) }
+fn visit_generics(&mut self, i: &Generics) { visit_generics(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item(&mut self, i: &ImplItem) { walk_impl_item(self, i) }
+fn visit_impl_item(&mut self, i: &ImplItem) { visit_impl_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_const(&mut self, i: &ImplItemConst) { walk_impl_item_const(self, i) }
+fn visit_impl_item_const(&mut self, i: &ImplItemConst) { visit_impl_item_const(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_kind(&mut self, i: &ImplItemKind) { walk_impl_item_kind(self, i) }
+fn visit_impl_item_kind(&mut self, i: &ImplItemKind) { visit_impl_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_method(&mut self, i: &ImplItemMethod) { walk_impl_item_method(self, i) }
+fn visit_impl_item_method(&mut self, i: &ImplItemMethod) { visit_impl_item_method(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_type(&mut self, i: &ImplItemType) { walk_impl_item_type(self, i) }
+fn visit_impl_item_type(&mut self, i: &ImplItemType) { visit_impl_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_polarity(&mut self, i: &ImplPolarity) { walk_impl_polarity(self, i) }
+fn visit_impl_polarity(&mut self, i: &ImplPolarity) { visit_impl_polarity(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_in_place_kind(&mut self, i: &InPlaceKind) { walk_in_place_kind(self, i) }
+fn visit_in_place_kind(&mut self, i: &InPlaceKind) { visit_in_place_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item(&mut self, i: &Item) { walk_item(self, i) }
+fn visit_item(&mut self, i: &Item) { visit_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_const(&mut self, i: &ItemConst) { walk_item_const(self, i) }
+fn visit_item_const(&mut self, i: &ItemConst) { visit_item_const(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_default_impl(&mut self, i: &ItemDefaultImpl) { walk_item_default_impl(self, i) }
+fn visit_item_default_impl(&mut self, i: &ItemDefaultImpl) { visit_item_default_impl(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_enum(&mut self, i: &ItemEnum) { walk_item_enum(self, i) }
+fn visit_item_enum(&mut self, i: &ItemEnum) { visit_item_enum(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_extern_crate(&mut self, i: &ItemExternCrate) { walk_item_extern_crate(self, i) }
+fn visit_item_extern_crate(&mut self, i: &ItemExternCrate) { visit_item_extern_crate(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_fn(&mut self, i: &ItemFn) { walk_item_fn(self, i) }
+fn visit_item_fn(&mut self, i: &ItemFn) { visit_item_fn(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_foreign_mod(&mut self, i: &ItemForeignMod) { walk_item_foreign_mod(self, i) }
+fn visit_item_foreign_mod(&mut self, i: &ItemForeignMod) { visit_item_foreign_mod(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_impl(&mut self, i: &ItemImpl) { walk_item_impl(self, i) }
+fn visit_item_impl(&mut self, i: &ItemImpl) { visit_item_impl(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_kind(&mut self, i: &ItemKind) { walk_item_kind(self, i) }
+fn visit_item_kind(&mut self, i: &ItemKind) { visit_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_mod(&mut self, i: &ItemMod) { walk_item_mod(self, i) }
+fn visit_item_mod(&mut self, i: &ItemMod) { visit_item_mod(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_static(&mut self, i: &ItemStatic) { walk_item_static(self, i) }
+fn visit_item_static(&mut self, i: &ItemStatic) { visit_item_static(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_struct(&mut self, i: &ItemStruct) { walk_item_struct(self, i) }
+fn visit_item_struct(&mut self, i: &ItemStruct) { visit_item_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_trait(&mut self, i: &ItemTrait) { walk_item_trait(self, i) }
+fn visit_item_trait(&mut self, i: &ItemTrait) { visit_item_trait(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_ty(&mut self, i: &ItemTy) { walk_item_ty(self, i) }
+fn visit_item_ty(&mut self, i: &ItemTy) { visit_item_ty(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_union(&mut self, i: &ItemUnion) { walk_item_union(self, i) }
+fn visit_item_union(&mut self, i: &ItemUnion) { visit_item_union(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_use(&mut self, i: &ItemUse) { walk_item_use(self, i) }
+fn visit_item_use(&mut self, i: &ItemUse) { visit_item_use(self, i) }
 
-fn visit_lifetime_def(&mut self, i: &LifetimeDef) { walk_lifetime_def(self, i) }
+fn visit_lifetime_def(&mut self, i: &LifetimeDef) { visit_lifetime_def(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_local(&mut self, i: &Local) { walk_local(self, i) }
+fn visit_local(&mut self, i: &Local) { visit_local(self, i) }
 
-fn visit_mac(&mut self, i: &Mac) { walk_mac(self, i) }
+fn visit_mac(&mut self, i: &Mac) { visit_mac(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_mac_stmt_style(&mut self, i: &MacStmtStyle) { walk_mac_stmt_style(self, i) }
+fn visit_mac_stmt_style(&mut self, i: &MacStmtStyle) { visit_mac_stmt_style(self, i) }
 
-fn visit_meta_item(&mut self, i: &MetaItem) { walk_meta_item(self, i) }
+fn visit_meta_item(&mut self, i: &MetaItem) { visit_meta_item(self, i) }
 
-fn visit_meta_item_list(&mut self, i: &MetaItemList) { walk_meta_item_list(self, i) }
+fn visit_meta_item_list(&mut self, i: &MetaItemList) { visit_meta_item_list(self, i) }
 
-fn visit_meta_name_value(&mut self, i: &MetaNameValue) { walk_meta_name_value(self, i) }
+fn visit_meta_name_value(&mut self, i: &MetaNameValue) { visit_meta_name_value(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_method_sig(&mut self, i: &MethodSig) { walk_method_sig(self, i) }
+fn visit_method_sig(&mut self, i: &MethodSig) { visit_method_sig(self, i) }
 
-fn visit_mut_ty(&mut self, i: &MutTy) { walk_mut_ty(self, i) }
+fn visit_mut_ty(&mut self, i: &MutTy) { visit_mut_ty(self, i) }
 
-fn visit_mutability(&mut self, i: &Mutability) { walk_mutability(self, i) }
+fn visit_mutability(&mut self, i: &Mutability) { visit_mutability(self, i) }
 
-fn visit_nested_meta_item(&mut self, i: &NestedMetaItem) { walk_nested_meta_item(self, i) }
+fn visit_nested_meta_item(&mut self, i: &NestedMetaItem) { visit_nested_meta_item(self, i) }
 
-fn visit_parenthesized_parameter_data(&mut self, i: &ParenthesizedParameterData) { walk_parenthesized_parameter_data(self, i) }
+fn visit_parenthesized_parameter_data(&mut self, i: &ParenthesizedParameterData) { visit_parenthesized_parameter_data(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat(&mut self, i: &Pat) { walk_pat(self, i) }
+fn visit_pat(&mut self, i: &Pat) { visit_pat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_box(&mut self, i: &PatBox) { walk_pat_box(self, i) }
+fn visit_pat_box(&mut self, i: &PatBox) { visit_pat_box(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_ident(&mut self, i: &PatIdent) { walk_pat_ident(self, i) }
+fn visit_pat_ident(&mut self, i: &PatIdent) { visit_pat_ident(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_lit(&mut self, i: &PatLit) { walk_pat_lit(self, i) }
+fn visit_pat_lit(&mut self, i: &PatLit) { visit_pat_lit(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_path(&mut self, i: &PatPath) { walk_pat_path(self, i) }
+fn visit_pat_path(&mut self, i: &PatPath) { visit_pat_path(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_range(&mut self, i: &PatRange) { walk_pat_range(self, i) }
+fn visit_pat_range(&mut self, i: &PatRange) { visit_pat_range(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_ref(&mut self, i: &PatRef) { walk_pat_ref(self, i) }
+fn visit_pat_ref(&mut self, i: &PatRef) { visit_pat_ref(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_slice(&mut self, i: &PatSlice) { walk_pat_slice(self, i) }
+fn visit_pat_slice(&mut self, i: &PatSlice) { visit_pat_slice(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_struct(&mut self, i: &PatStruct) { walk_pat_struct(self, i) }
+fn visit_pat_struct(&mut self, i: &PatStruct) { visit_pat_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_tuple(&mut self, i: &PatTuple) { walk_pat_tuple(self, i) }
+fn visit_pat_tuple(&mut self, i: &PatTuple) { visit_pat_tuple(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_tuple_struct(&mut self, i: &PatTupleStruct) { walk_pat_tuple_struct(self, i) }
+fn visit_pat_tuple_struct(&mut self, i: &PatTupleStruct) { visit_pat_tuple_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_wild(&mut self, i: &PatWild) { walk_pat_wild(self, i) }
+fn visit_pat_wild(&mut self, i: &PatWild) { visit_pat_wild(self, i) }
 
-fn visit_path(&mut self, i: &Path) { walk_path(self, i) }
+fn visit_path(&mut self, i: &Path) { visit_path(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_glob(&mut self, i: &PathGlob) { walk_path_glob(self, i) }
+fn visit_path_glob(&mut self, i: &PathGlob) { visit_path_glob(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_list(&mut self, i: &PathList) { walk_path_list(self, i) }
+fn visit_path_list(&mut self, i: &PathList) { visit_path_list(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_list_item(&mut self, i: &PathListItem) { walk_path_list_item(self, i) }
+fn visit_path_list_item(&mut self, i: &PathListItem) { visit_path_list_item(self, i) }
 
-fn visit_path_parameters(&mut self, i: &PathParameters) { walk_path_parameters(self, i) }
+fn visit_path_parameters(&mut self, i: &PathParameters) { visit_path_parameters(self, i) }
 
-fn visit_path_segment(&mut self, i: &PathSegment) { walk_path_segment(self, i) }
+fn visit_path_segment(&mut self, i: &PathSegment) { visit_path_segment(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_simple(&mut self, i: &PathSimple) { walk_path_simple(self, i) }
+fn visit_path_simple(&mut self, i: &PathSimple) { visit_path_simple(self, i) }
 
-fn visit_poly_trait_ref(&mut self, i: &PolyTraitRef) { walk_poly_trait_ref(self, i) }
+fn visit_poly_trait_ref(&mut self, i: &PolyTraitRef) { visit_poly_trait_ref(self, i) }
 
-fn visit_qself(&mut self, i: &QSelf) { walk_qself(self, i) }
+fn visit_qself(&mut self, i: &QSelf) { visit_qself(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_range_limits(&mut self, i: &RangeLimits) { walk_range_limits(self, i) }
+fn visit_range_limits(&mut self, i: &RangeLimits) { visit_range_limits(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_stmt(&mut self, i: &Stmt) { walk_stmt(self, i) }
+fn visit_stmt(&mut self, i: &Stmt) { visit_stmt(self, i) }
 
-fn visit_trait_bound_modifier(&mut self, i: &TraitBoundModifier) { walk_trait_bound_modifier(self, i) }
+fn visit_trait_bound_modifier(&mut self, i: &TraitBoundModifier) { visit_trait_bound_modifier(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item(&mut self, i: &TraitItem) { walk_trait_item(self, i) }
+fn visit_trait_item(&mut self, i: &TraitItem) { visit_trait_item(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_const(&mut self, i: &TraitItemConst) { walk_trait_item_const(self, i) }
+fn visit_trait_item_const(&mut self, i: &TraitItemConst) { visit_trait_item_const(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_kind(&mut self, i: &TraitItemKind) { walk_trait_item_kind(self, i) }
+fn visit_trait_item_kind(&mut self, i: &TraitItemKind) { visit_trait_item_kind(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_method(&mut self, i: &TraitItemMethod) { walk_trait_item_method(self, i) }
+fn visit_trait_item_method(&mut self, i: &TraitItemMethod) { visit_trait_item_method(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_type(&mut self, i: &TraitItemType) { walk_trait_item_type(self, i) }
+fn visit_trait_item_type(&mut self, i: &TraitItemType) { visit_trait_item_type(self, i) }
 
-fn visit_ty(&mut self, i: &Ty) { walk_ty(self, i) }
+fn visit_ty(&mut self, i: &Ty) { visit_ty(self, i) }
 
-fn visit_ty_array(&mut self, i: &TyArray) { walk_ty_array(self, i) }
+fn visit_ty_array(&mut self, i: &TyArray) { visit_ty_array(self, i) }
 
-fn visit_ty_bare_fn(&mut self, i: &TyBareFn) { walk_ty_bare_fn(self, i) }
+fn visit_ty_bare_fn(&mut self, i: &TyBareFn) { visit_ty_bare_fn(self, i) }
 
-fn visit_ty_group(&mut self, i: &TyGroup) { walk_ty_group(self, i) }
+fn visit_ty_group(&mut self, i: &TyGroup) { visit_ty_group(self, i) }
 
-fn visit_ty_impl_trait(&mut self, i: &TyImplTrait) { walk_ty_impl_trait(self, i) }
+fn visit_ty_impl_trait(&mut self, i: &TyImplTrait) { visit_ty_impl_trait(self, i) }
 
-fn visit_ty_infer(&mut self, i: &TyInfer) { walk_ty_infer(self, i) }
+fn visit_ty_infer(&mut self, i: &TyInfer) { visit_ty_infer(self, i) }
 
-fn visit_ty_never(&mut self, i: &TyNever) { walk_ty_never(self, i) }
+fn visit_ty_never(&mut self, i: &TyNever) { visit_ty_never(self, i) }
 
-fn visit_ty_param(&mut self, i: &TyParam) { walk_ty_param(self, i) }
+fn visit_ty_param(&mut self, i: &TyParam) { visit_ty_param(self, i) }
 
-fn visit_ty_param_bound(&mut self, i: &TyParamBound) { walk_ty_param_bound(self, i) }
+fn visit_ty_param_bound(&mut self, i: &TyParamBound) { visit_ty_param_bound(self, i) }
 
-fn visit_ty_paren(&mut self, i: &TyParen) { walk_ty_paren(self, i) }
+fn visit_ty_paren(&mut self, i: &TyParen) { visit_ty_paren(self, i) }
 
-fn visit_ty_path(&mut self, i: &TyPath) { walk_ty_path(self, i) }
+fn visit_ty_path(&mut self, i: &TyPath) { visit_ty_path(self, i) }
 
-fn visit_ty_ptr(&mut self, i: &TyPtr) { walk_ty_ptr(self, i) }
+fn visit_ty_ptr(&mut self, i: &TyPtr) { visit_ty_ptr(self, i) }
 
-fn visit_ty_rptr(&mut self, i: &TyRptr) { walk_ty_rptr(self, i) }
+fn visit_ty_rptr(&mut self, i: &TyRptr) { visit_ty_rptr(self, i) }
 
-fn visit_ty_slice(&mut self, i: &TySlice) { walk_ty_slice(self, i) }
+fn visit_ty_slice(&mut self, i: &TySlice) { visit_ty_slice(self, i) }
 
-fn visit_ty_trait_object(&mut self, i: &TyTraitObject) { walk_ty_trait_object(self, i) }
+fn visit_ty_trait_object(&mut self, i: &TyTraitObject) { visit_ty_trait_object(self, i) }
 
-fn visit_ty_tup(&mut self, i: &TyTup) { walk_ty_tup(self, i) }
+fn visit_ty_tup(&mut self, i: &TyTup) { visit_ty_tup(self, i) }
 
-fn visit_type_binding(&mut self, i: &TypeBinding) { walk_type_binding(self, i) }
+fn visit_type_binding(&mut self, i: &TypeBinding) { visit_type_binding(self, i) }
 
-fn visit_un_op(&mut self, i: &UnOp) { walk_un_op(self, i) }
+fn visit_un_op(&mut self, i: &UnOp) { visit_un_op(self, i) }
 
-fn visit_unsafety(&mut self, i: &Unsafety) { walk_unsafety(self, i) }
+fn visit_unsafety(&mut self, i: &Unsafety) { visit_unsafety(self, i) }
 
-fn visit_variant(&mut self, i: &Variant) { walk_variant(self, i) }
+fn visit_variant(&mut self, i: &Variant) { visit_variant(self, i) }
 
-fn visit_variant_data(&mut self, i: &VariantData) { walk_variant_data(self, i) }
+fn visit_variant_data(&mut self, i: &VariantData) { visit_variant_data(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_view_path(&mut self, i: &ViewPath) { walk_view_path(self, i) }
+fn visit_view_path(&mut self, i: &ViewPath) { visit_view_path(self, i) }
 
-fn visit_vis_crate(&mut self, i: &VisCrate) { walk_vis_crate(self, i) }
+fn visit_vis_crate(&mut self, i: &VisCrate) { visit_vis_crate(self, i) }
 
-fn visit_vis_inherited(&mut self, i: &VisInherited) { walk_vis_inherited(self, i) }
+fn visit_vis_inherited(&mut self, i: &VisInherited) { visit_vis_inherited(self, i) }
 
-fn visit_vis_public(&mut self, i: &VisPublic) { walk_vis_public(self, i) }
+fn visit_vis_public(&mut self, i: &VisPublic) { visit_vis_public(self, i) }
 
-fn visit_vis_restricted(&mut self, i: &VisRestricted) { walk_vis_restricted(self, i) }
+fn visit_vis_restricted(&mut self, i: &VisRestricted) { visit_vis_restricted(self, i) }
 
-fn visit_visibility(&mut self, i: &Visibility) { walk_visibility(self, i) }
+fn visit_visibility(&mut self, i: &Visibility) { visit_visibility(self, i) }
 
-fn visit_where_bound_predicate(&mut self, i: &WhereBoundPredicate) { walk_where_bound_predicate(self, i) }
+fn visit_where_bound_predicate(&mut self, i: &WhereBoundPredicate) { visit_where_bound_predicate(self, i) }
 
-fn visit_where_clause(&mut self, i: &WhereClause) { walk_where_clause(self, i) }
+fn visit_where_clause(&mut self, i: &WhereClause) { visit_where_clause(self, i) }
 
-fn visit_where_eq_predicate(&mut self, i: &WhereEqPredicate) { walk_where_eq_predicate(self, i) }
+fn visit_where_eq_predicate(&mut self, i: &WhereEqPredicate) { visit_where_eq_predicate(self, i) }
 
-fn visit_where_predicate(&mut self, i: &WherePredicate) { walk_where_predicate(self, i) }
+fn visit_where_predicate(&mut self, i: &WherePredicate) { visit_where_predicate(self, i) }
 
-fn visit_where_region_predicate(&mut self, i: &WhereRegionPredicate) { walk_where_region_predicate(self, i) }
+fn visit_where_region_predicate(&mut self, i: &WhereRegionPredicate) { visit_where_region_predicate(self, i) }
 
 }
 
 
-pub fn walk_abi<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Abi) {
+pub fn visit_abi<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Abi) {
     // Skipped field _i . extern_token;
     _visitor.visit_abi_kind(&_i . kind);
 }
 
-pub fn walk_abi_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &AbiKind) {
+pub fn visit_abi_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &AbiKind) {
     use ::AbiKind::*;
     match *_i {
         Named(ref _binding_0, ) => {
@@ -389,7 +389,7 @@
     }
 }
 
-pub fn walk_angle_bracketed_parameter_data<V: Visitor + ?Sized>(_visitor: &mut V, _i: &AngleBracketedParameterData) {
+pub fn visit_angle_bracketed_parameter_data<V: Visitor + ?Sized>(_visitor: &mut V, _i: &AngleBracketedParameterData) {
     // Skipped field _i . turbofish;
     // Skipped field _i . lt_token;
     // Skipped field _i . lifetimes;
@@ -398,25 +398,25 @@
     // Skipped field _i . gt_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_captured<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ArgCaptured) {
+pub fn visit_arg_captured<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ArgCaptured) {
     _visitor.visit_pat(&_i . pat);
     // Skipped field _i . colon_token;
     _visitor.visit_ty(&_i . ty);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_self<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ArgSelf) {
+pub fn visit_arg_self<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ArgSelf) {
     _visitor.visit_mutability(&_i . mutbl);
     // Skipped field _i . self_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_self_ref<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ArgSelfRef) {
+pub fn visit_arg_self_ref<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ArgSelfRef) {
     // Skipped field _i . and_token;
     // Skipped field _i . self_token;
     // Skipped field _i . lifetime;
     _visitor.visit_mutability(&_i . mutbl);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arm<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Arm) {
+pub fn visit_arm<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Arm) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     for el in (_i . pats).iter() { let it = el.item(); _visitor.visit_pat(&it) };
     // Skipped field _i . if_token;
@@ -426,7 +426,7 @@
     // Skipped field _i . comma;
 }
 
-pub fn walk_attr_style<V: Visitor + ?Sized>(_visitor: &mut V, _i: &AttrStyle) {
+pub fn visit_attr_style<V: Visitor + ?Sized>(_visitor: &mut V, _i: &AttrStyle) {
     use ::AttrStyle::*;
     match *_i {
         Outer => { }
@@ -436,7 +436,7 @@
     }
 }
 
-pub fn walk_attribute<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Attribute) {
+pub fn visit_attribute<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Attribute) {
     _visitor.visit_attr_style(&_i . style);
     // Skipped field _i . pound_token;
     // Skipped field _i . bracket_token;
@@ -445,12 +445,12 @@
     // Skipped field _i . is_sugared_doc;
 }
 
-pub fn walk_bare_fn_arg<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BareFnArg) {
+pub fn visit_bare_fn_arg<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BareFnArg) {
     // Skipped field _i . name;
     _visitor.visit_ty(&_i . ty);
 }
 
-pub fn walk_bare_fn_arg_name<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BareFnArgName) {
+pub fn visit_bare_fn_arg_name<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BareFnArgName) {
     use ::BareFnArgName::*;
     match *_i {
         Named(ref _binding_0, ) => {
@@ -462,7 +462,7 @@
     }
 }
 
-pub fn walk_bare_fn_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BareFnTy) {
+pub fn visit_bare_fn_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BareFnTy) {
     if let Some(ref it) = _i . lifetimes { _visitor.visit_bound_lifetimes(&* it) };
     _visitor.visit_unsafety(&_i . unsafety);
     if let Some(ref it) = _i . abi { _visitor.visit_abi(&* it) };
@@ -473,7 +473,7 @@
     _visitor.visit_function_ret_ty(&_i . output);
 }
 
-pub fn walk_bin_op<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BinOp) {
+pub fn visit_bin_op<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BinOp) {
     use ::BinOp::*;
     match *_i {
         Add(ref _binding_0, ) => {
@@ -563,7 +563,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_binding_mode<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BindingMode) {
+pub fn visit_binding_mode<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BindingMode) {
     use ::BindingMode::*;
     match *_i {
         ByRef(ref _binding_0, ref _binding_1, ) => {
@@ -576,12 +576,12 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_block<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Block) {
+pub fn visit_block<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Block) {
     // Skipped field _i . brace_token;
     for it in (_i . stmts).iter() { _visitor.visit_stmt(&it) };
 }
 
-pub fn walk_body<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Body) {
+pub fn visit_body<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Body) {
     use ::Body::*;
     match *_i {
         Enum(ref _binding_0, ) => {
@@ -593,26 +593,26 @@
     }
 }
 
-pub fn walk_body_enum<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BodyEnum) {
+pub fn visit_body_enum<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BodyEnum) {
     // Skipped field _i . enum_token;
     // Skipped field _i . brace_token;
     for el in (_i . variants).iter() { let it = el.item(); _visitor.visit_variant(&it) };
 }
 
-pub fn walk_body_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BodyStruct) {
+pub fn visit_body_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BodyStruct) {
     _visitor.visit_variant_data(&_i . data);
     // Skipped field _i . struct_token;
     // Skipped field _i . semi_token;
 }
 
-pub fn walk_bound_lifetimes<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BoundLifetimes) {
+pub fn visit_bound_lifetimes<V: Visitor + ?Sized>(_visitor: &mut V, _i: &BoundLifetimes) {
     // Skipped field _i . for_token;
     // Skipped field _i . lt_token;
     for el in (_i . lifetimes).iter() { let it = el.item(); _visitor.visit_lifetime_def(&it) };
     // Skipped field _i . gt_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_capture_by<V: Visitor + ?Sized>(_visitor: &mut V, _i: &CaptureBy) {
+pub fn visit_capture_by<V: Visitor + ?Sized>(_visitor: &mut V, _i: &CaptureBy) {
     use ::CaptureBy::*;
     match *_i {
         Value(ref _binding_0, ) => {
@@ -622,7 +622,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_constness<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Constness) {
+pub fn visit_constness<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Constness) {
     use ::Constness::*;
     match *_i {
         Const(ref _binding_0, ) => {
@@ -632,7 +632,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_defaultness<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Defaultness) {
+pub fn visit_defaultness<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Defaultness) {
     use ::Defaultness::*;
     match *_i {
         Default(ref _binding_0, ) => {
@@ -642,7 +642,7 @@
     }
 }
 
-pub fn walk_derive_input<V: Visitor + ?Sized>(_visitor: &mut V, _i: &DeriveInput) {
+pub fn visit_derive_input<V: Visitor + ?Sized>(_visitor: &mut V, _i: &DeriveInput) {
     // Skipped field _i . ident;
     _visitor.visit_visibility(&_i . vis);
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
@@ -650,75 +650,75 @@
     _visitor.visit_body(&_i . body);
 }
 
-pub fn walk_expr<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Expr) {
+pub fn visit_expr<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Expr) {
     _visitor.visit_expr_kind(&_i . node);
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_addr_of<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprAddrOf) {
+pub fn visit_expr_addr_of<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprAddrOf) {
     // Skipped field _i . and_token;
     _visitor.visit_mutability(&_i . mutbl);
     _visitor.visit_expr(&_i . expr);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_array<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprArray) {
+pub fn visit_expr_array<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprArray) {
     for el in (_i . exprs).iter() { let it = el.item(); _visitor.visit_expr(&it) };
     // Skipped field _i . bracket_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_assign<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprAssign) {
+pub fn visit_expr_assign<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprAssign) {
     _visitor.visit_expr(&_i . left);
     _visitor.visit_expr(&_i . right);
     // Skipped field _i . eq_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_assign_op<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprAssignOp) {
+pub fn visit_expr_assign_op<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprAssignOp) {
     _visitor.visit_bin_op(&_i . op);
     _visitor.visit_expr(&_i . left);
     _visitor.visit_expr(&_i . right);
 }
 
-pub fn walk_expr_binary<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBinary) {
+pub fn visit_expr_binary<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBinary) {
     _visitor.visit_bin_op(&_i . op);
     _visitor.visit_expr(&_i . left);
     _visitor.visit_expr(&_i . right);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_block<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBlock) {
+pub fn visit_expr_block<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBlock) {
     _visitor.visit_unsafety(&_i . unsafety);
     _visitor.visit_block(&_i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_box<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBox) {
+pub fn visit_expr_box<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBox) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . box_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_break<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBreak) {
+pub fn visit_expr_break<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprBreak) {
     // Skipped field _i . label;
     if let Some(ref it) = _i . expr { _visitor.visit_expr(&* it) };
     // Skipped field _i . break_token;
 }
 
-pub fn walk_expr_call<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprCall) {
+pub fn visit_expr_call<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprCall) {
     _visitor.visit_expr(&_i . func);
     for el in (_i . args).iter() { let it = el.item(); _visitor.visit_expr(&it) };
     // Skipped field _i . paren_token;
 }
 
-pub fn walk_expr_cast<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprCast) {
+pub fn visit_expr_cast<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprCast) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . as_token;
     _visitor.visit_ty(&_i . ty);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_catch<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprCatch) {
+pub fn visit_expr_catch<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprCatch) {
     // Skipped field _i . do_token;
     // Skipped field _i . catch_token;
     _visitor.visit_block(&_i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_closure<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprClosure) {
+pub fn visit_expr_closure<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprClosure) {
     _visitor.visit_capture_by(&_i . capture);
     _visitor.visit_fn_decl(&_i . decl);
     _visitor.visit_expr(&_i . body);
@@ -726,18 +726,18 @@
     // Skipped field _i . or2_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_continue<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprContinue) {
+pub fn visit_expr_continue<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprContinue) {
     // Skipped field _i . label;
     // Skipped field _i . continue_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_field<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprField) {
+pub fn visit_expr_field<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprField) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . field;
     // Skipped field _i . dot_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_for_loop<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprForLoop) {
+pub fn visit_expr_for_loop<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprForLoop) {
     _visitor.visit_pat(&_i . pat);
     _visitor.visit_expr(&_i . expr);
     _visitor.visit_block(&_i . body);
@@ -747,12 +747,12 @@
     // Skipped field _i . in_token;
 }
 
-pub fn walk_expr_group<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprGroup) {
+pub fn visit_expr_group<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprGroup) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . group_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_if<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprIf) {
+pub fn visit_expr_if<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprIf) {
     _visitor.visit_expr(&_i . cond);
     _visitor.visit_block(&_i . if_true);
     if let Some(ref it) = _i . if_false { _visitor.visit_expr(&* it) };
@@ -760,7 +760,7 @@
     // Skipped field _i . else_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_if_let<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprIfLet) {
+pub fn visit_expr_if_let<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprIfLet) {
     _visitor.visit_pat(&_i . pat);
     _visitor.visit_expr(&_i . expr);
     _visitor.visit_block(&_i . if_true);
@@ -771,19 +771,19 @@
     // Skipped field _i . else_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_in_place<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprInPlace) {
+pub fn visit_expr_in_place<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprInPlace) {
     _visitor.visit_expr(&_i . place);
     _visitor.visit_in_place_kind(&_i . kind);
     _visitor.visit_expr(&_i . value);
 }
 
-pub fn walk_expr_index<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprIndex) {
+pub fn visit_expr_index<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprIndex) {
     _visitor.visit_expr(&_i . expr);
     _visitor.visit_expr(&_i . index);
     // Skipped field _i . bracket_token;
 }
 
-pub fn walk_expr_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprKind) {
+pub fn visit_expr_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprKind) {
     use ::ExprKind::*;
     match *_i {
         Box(ref _binding_0, ) => {
@@ -906,21 +906,21 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_loop<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprLoop) {
+pub fn visit_expr_loop<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprLoop) {
     _visitor.visit_block(&_i . body);
     // Skipped field _i . label;
     // Skipped field _i . loop_token;
     // Skipped field _i . colon_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_match<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprMatch) {
+pub fn visit_expr_match<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprMatch) {
     // Skipped field _i . match_token;
     // Skipped field _i . brace_token;
     _visitor.visit_expr(&_i . expr);
     for it in (_i . arms).iter() { _visitor.visit_arm(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_method_call<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprMethodCall) {
+pub fn visit_expr_method_call<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprMethodCall) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . method;
     for el in (_i . typarams).iter() { let it = el.item(); _visitor.visit_ty(&it) };
@@ -932,35 +932,35 @@
     // Skipped field _i . gt_token;
 }
 
-pub fn walk_expr_paren<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprParen) {
+pub fn visit_expr_paren<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprParen) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . paren_token;
 }
 
-pub fn walk_expr_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprPath) {
+pub fn visit_expr_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprPath) {
     if let Some(ref it) = _i . qself { _visitor.visit_qself(&* it) };
     _visitor.visit_path(&_i . path);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_range<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprRange) {
+pub fn visit_expr_range<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprRange) {
     if let Some(ref it) = _i . from { _visitor.visit_expr(&* it) };
     if let Some(ref it) = _i . to { _visitor.visit_expr(&* it) };
     _visitor.visit_range_limits(&_i . limits);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_repeat<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprRepeat) {
+pub fn visit_expr_repeat<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprRepeat) {
     // Skipped field _i . bracket_token;
     // Skipped field _i . semi_token;
     _visitor.visit_expr(&_i . expr);
     _visitor.visit_expr(&_i . amt);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_ret<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprRet) {
+pub fn visit_expr_ret<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprRet) {
     if let Some(ref it) = _i . expr { _visitor.visit_expr(&* it) };
     // Skipped field _i . return_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprStruct) {
+pub fn visit_expr_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprStruct) {
     _visitor.visit_path(&_i . path);
     for el in (_i . fields).iter() { let it = el.item(); _visitor.visit_field_value(&it) };
     if let Some(ref it) = _i . rest { _visitor.visit_expr(&* it) };
@@ -968,35 +968,35 @@
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_try<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprTry) {
+pub fn visit_expr_try<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprTry) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . question_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_tup<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprTup) {
+pub fn visit_expr_tup<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprTup) {
     for el in (_i . args).iter() { let it = el.item(); _visitor.visit_expr(&it) };
     // Skipped field _i . paren_token;
     // Skipped field _i . lone_comma;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_tup_field<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprTupField) {
+pub fn visit_expr_tup_field<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprTupField) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . field;
     // Skipped field _i . dot_token;
 }
 
-pub fn walk_expr_type<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprType) {
+pub fn visit_expr_type<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprType) {
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . colon_token;
     _visitor.visit_ty(&_i . ty);
 }
 
-pub fn walk_expr_unary<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprUnary) {
+pub fn visit_expr_unary<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprUnary) {
     _visitor.visit_un_op(&_i . op);
     _visitor.visit_expr(&_i . expr);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_while<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprWhile) {
+pub fn visit_expr_while<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprWhile) {
     _visitor.visit_expr(&_i . cond);
     _visitor.visit_block(&_i . body);
     // Skipped field _i . label;
@@ -1004,7 +1004,7 @@
     // Skipped field _i . while_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_while_let<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprWhileLet) {
+pub fn visit_expr_while_let<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprWhileLet) {
     _visitor.visit_pat(&_i . pat);
     _visitor.visit_expr(&_i . expr);
     _visitor.visit_block(&_i . body);
@@ -1015,12 +1015,12 @@
     // Skipped field _i . eq_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_yield<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprYield) {
+pub fn visit_expr_yield<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ExprYield) {
     // Skipped field _i . yield_token;
     if let Some(ref it) = _i . expr { _visitor.visit_expr(&* it) };
 }
 
-pub fn walk_field<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Field) {
+pub fn visit_field<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Field) {
     // Skipped field _i . ident;
     _visitor.visit_visibility(&_i . vis);
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
@@ -1028,7 +1028,7 @@
     // Skipped field _i . colon_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_field_pat<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FieldPat) {
+pub fn visit_field_pat<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FieldPat) {
     // Skipped field _i . ident;
     _visitor.visit_pat(&_i . pat);
     // Skipped field _i . is_shorthand;
@@ -1036,7 +1036,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_field_value<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FieldValue) {
+pub fn visit_field_value<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FieldValue) {
     // Skipped field _i . ident;
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . is_shorthand;
@@ -1044,13 +1044,13 @@
     // Skipped field _i . colon_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_file<V: Visitor + ?Sized>(_visitor: &mut V, _i: &File) {
+pub fn visit_file<V: Visitor + ?Sized>(_visitor: &mut V, _i: &File) {
     // Skipped field _i . shebang;
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     for it in (_i . items).iter() { _visitor.visit_item(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_fn_arg<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FnArg) {
+pub fn visit_fn_arg<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FnArg) {
     use ::FnArg::*;
     match *_i {
         SelfRef(ref _binding_0, ) => {
@@ -1068,7 +1068,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_fn_decl<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FnDecl) {
+pub fn visit_fn_decl<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FnDecl) {
     // Skipped field _i . fn_token;
     // Skipped field _i . paren_token;
     for el in (_i . inputs).iter() { let it = el.item(); _visitor.visit_fn_arg(&it) };
@@ -1078,7 +1078,7 @@
     // Skipped field _i . dot_tokens;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItem) {
+pub fn visit_foreign_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItem) {
     // Skipped field _i . ident;
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_foreign_item_kind(&_i . node);
@@ -1086,11 +1086,11 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_fn<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItemFn) {
+pub fn visit_foreign_item_fn<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItemFn) {
     _visitor.visit_fn_decl(&_i . decl);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItemKind) {
+pub fn visit_foreign_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItemKind) {
     use ::ForeignItemKind::*;
     match *_i {
         Fn(ref _binding_0, ) => {
@@ -1102,14 +1102,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_static<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItemStatic) {
+pub fn visit_foreign_item_static<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ForeignItemStatic) {
     // Skipped field _i . static_token;
     _visitor.visit_ty(&_i . ty);
     // Skipped field _i . colon_token;
     _visitor.visit_mutability(&_i . mutbl);
 }
 
-pub fn walk_function_ret_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FunctionRetTy) {
+pub fn visit_function_ret_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &FunctionRetTy) {
     use ::FunctionRetTy::*;
     match *_i {
         Default => { }
@@ -1120,7 +1120,7 @@
     }
 }
 
-pub fn walk_generics<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Generics) {
+pub fn visit_generics<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Generics) {
     // Skipped field _i . lt_token;
     // Skipped field _i . gt_token;
     for el in (_i . lifetimes).iter() { let it = el.item(); _visitor.visit_lifetime_def(&it) };
@@ -1128,12 +1128,12 @@
     _visitor.visit_where_clause(&_i . where_clause);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItem) {
+pub fn visit_impl_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItem) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_impl_item_kind(&_i . node);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_const<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemConst) {
+pub fn visit_impl_item_const<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemConst) {
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_defaultness(&_i . defaultness);
     // Skipped field _i . const_token;
@@ -1145,7 +1145,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemKind) {
+pub fn visit_impl_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemKind) {
     use ::ImplItemKind::*;
     match *_i {
         Const(ref _binding_0, ) => {
@@ -1163,14 +1163,14 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_method<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemMethod) {
+pub fn visit_impl_item_method<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemMethod) {
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_defaultness(&_i . defaultness);
     _visitor.visit_method_sig(&_i . sig);
     _visitor.visit_block(&_i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_type<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemType) {
+pub fn visit_impl_item_type<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplItemType) {
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_defaultness(&_i . defaultness);
     // Skipped field _i . type_token;
@@ -1180,7 +1180,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_polarity<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplPolarity) {
+pub fn visit_impl_polarity<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ImplPolarity) {
     use ::ImplPolarity::*;
     match *_i {
         Positive => { }
@@ -1190,7 +1190,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_in_place_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &InPlaceKind) {
+pub fn visit_in_place_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &InPlaceKind) {
     use ::InPlaceKind::*;
     match *_i {
         Arrow(ref _binding_0, ) => {
@@ -1202,12 +1202,12 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Item) {
+pub fn visit_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Item) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_item_kind(&_i . node);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_const<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemConst) {
+pub fn visit_item_const<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemConst) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . const_token;
     // Skipped field _i . ident;
@@ -1218,7 +1218,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_default_impl<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemDefaultImpl) {
+pub fn visit_item_default_impl<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemDefaultImpl) {
     _visitor.visit_unsafety(&_i . unsafety);
     // Skipped field _i . impl_token;
     _visitor.visit_path(&_i . path);
@@ -1227,7 +1227,7 @@
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_enum<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemEnum) {
+pub fn visit_item_enum<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemEnum) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . enum_token;
     // Skipped field _i . ident;
@@ -1236,7 +1236,7 @@
     for el in (_i . variants).iter() { let it = el.item(); _visitor.visit_variant(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_extern_crate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemExternCrate) {
+pub fn visit_item_extern_crate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemExternCrate) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . extern_token;
     // Skipped field _i . crate_token;
@@ -1245,7 +1245,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_fn<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemFn) {
+pub fn visit_item_fn<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemFn) {
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_constness(&_i . constness);
     _visitor.visit_unsafety(&_i . unsafety);
@@ -1255,13 +1255,13 @@
     _visitor.visit_block(&_i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_foreign_mod<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemForeignMod) {
+pub fn visit_item_foreign_mod<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemForeignMod) {
     _visitor.visit_abi(&_i . abi);
     // Skipped field _i . brace_token;
     for it in (_i . items).iter() { _visitor.visit_foreign_item(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_impl<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemImpl) {
+pub fn visit_item_impl<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemImpl) {
     _visitor.visit_defaultness(&_i . defaultness);
     _visitor.visit_unsafety(&_i . unsafety);
     // Skipped field _i . impl_token;
@@ -1272,7 +1272,7 @@
     for it in (_i . items).iter() { _visitor.visit_impl_item(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemKind) {
+pub fn visit_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemKind) {
     use ::ItemKind::*;
     match *_i {
         ExternCrate(ref _binding_0, ) => {
@@ -1323,7 +1323,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_mod<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemMod) {
+pub fn visit_item_mod<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemMod) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . mod_token;
     // Skipped field _i . ident;
@@ -1331,7 +1331,7 @@
     // Skipped field _i . semi;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_static<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemStatic) {
+pub fn visit_item_static<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemStatic) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . static_token;
     _visitor.visit_mutability(&_i . mutbl);
@@ -1343,7 +1343,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemStruct) {
+pub fn visit_item_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemStruct) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . struct_token;
     // Skipped field _i . ident;
@@ -1352,7 +1352,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_trait<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemTrait) {
+pub fn visit_item_trait<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemTrait) {
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_unsafety(&_i . unsafety);
     // Skipped field _i . trait_token;
@@ -1364,7 +1364,7 @@
     for it in (_i . items).iter() { _visitor.visit_trait_item(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemTy) {
+pub fn visit_item_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemTy) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . type_token;
     // Skipped field _i . ident;
@@ -1374,7 +1374,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_union<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemUnion) {
+pub fn visit_item_union<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemUnion) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . union_token;
     // Skipped field _i . ident;
@@ -1382,21 +1382,21 @@
     _visitor.visit_variant_data(&_i . data);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_use<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemUse) {
+pub fn visit_item_use<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ItemUse) {
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . use_token;
     _visitor.visit_view_path(&_i . path);
     // Skipped field _i . semi_token;
 }
 
-pub fn walk_lifetime_def<V: Visitor + ?Sized>(_visitor: &mut V, _i: &LifetimeDef) {
+pub fn visit_lifetime_def<V: Visitor + ?Sized>(_visitor: &mut V, _i: &LifetimeDef) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     // Skipped field _i . lifetime;
     // Skipped field _i . colon_token;
     // Skipped field _i . bounds;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_local<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Local) {
+pub fn visit_local<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Local) {
     // Skipped field _i . let_token;
     // Skipped field _i . colon_token;
     // Skipped field _i . eq_token;
@@ -1407,14 +1407,14 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
 }
 
-pub fn walk_mac<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Mac) {
+pub fn visit_mac<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Mac) {
     _visitor.visit_path(&_i . path);
     // Skipped field _i . bang_token;
     // Skipped field _i . ident;
     // Skipped field _i . tokens;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_mac_stmt_style<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MacStmtStyle) {
+pub fn visit_mac_stmt_style<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MacStmtStyle) {
     use ::MacStmtStyle::*;
     match *_i {
         Semicolon(ref _binding_0, ) => {
@@ -1425,7 +1425,7 @@
     }
 }
 
-pub fn walk_meta_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MetaItem) {
+pub fn visit_meta_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MetaItem) {
     use ::MetaItem::*;
     match *_i {
         Term(ref _binding_0, ) => {
@@ -1440,19 +1440,19 @@
     }
 }
 
-pub fn walk_meta_item_list<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MetaItemList) {
+pub fn visit_meta_item_list<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MetaItemList) {
     // Skipped field _i . ident;
     // Skipped field _i . paren_token;
     for el in (_i . nested).iter() { let it = el.item(); _visitor.visit_nested_meta_item(&it) };
 }
 
-pub fn walk_meta_name_value<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MetaNameValue) {
+pub fn visit_meta_name_value<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MetaNameValue) {
     // Skipped field _i . ident;
     // Skipped field _i . eq_token;
     // Skipped field _i . lit;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_method_sig<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MethodSig) {
+pub fn visit_method_sig<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MethodSig) {
     _visitor.visit_constness(&_i . constness);
     _visitor.visit_unsafety(&_i . unsafety);
     if let Some(ref it) = _i . abi { _visitor.visit_abi(&* it) };
@@ -1460,12 +1460,12 @@
     _visitor.visit_fn_decl(&_i . decl);
 }
 
-pub fn walk_mut_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MutTy) {
+pub fn visit_mut_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &MutTy) {
     _visitor.visit_ty(&_i . ty);
     _visitor.visit_mutability(&_i . mutability);
 }
 
-pub fn walk_mutability<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Mutability) {
+pub fn visit_mutability<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Mutability) {
     use ::Mutability::*;
     match *_i {
         Mutable(ref _binding_0, ) => {
@@ -1475,7 +1475,7 @@
     }
 }
 
-pub fn walk_nested_meta_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &NestedMetaItem) {
+pub fn visit_nested_meta_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &NestedMetaItem) {
     use ::NestedMetaItem::*;
     match *_i {
         MetaItem(ref _binding_0, ) => {
@@ -1487,13 +1487,13 @@
     }
 }
 
-pub fn walk_parenthesized_parameter_data<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ParenthesizedParameterData) {
+pub fn visit_parenthesized_parameter_data<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ParenthesizedParameterData) {
     // Skipped field _i . paren_token;
     for el in (_i . inputs).iter() { let it = el.item(); _visitor.visit_ty(&it) };
     _visitor.visit_function_ret_ty(&_i . output);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Pat) {
+pub fn visit_pat<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Pat) {
     use ::Pat::*;
     match *_i {
         Wild(ref _binding_0, ) => {
@@ -1535,40 +1535,40 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_box<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatBox) {
+pub fn visit_pat_box<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatBox) {
     _visitor.visit_pat(&_i . pat);
     // Skipped field _i . box_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_ident<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatIdent) {
+pub fn visit_pat_ident<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatIdent) {
     _visitor.visit_binding_mode(&_i . mode);
     // Skipped field _i . ident;
     if let Some(ref it) = _i . subpat { _visitor.visit_pat(&* it) };
     // Skipped field _i . at_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_lit<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatLit) {
+pub fn visit_pat_lit<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatLit) {
     _visitor.visit_expr(&_i . expr);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatPath) {
+pub fn visit_pat_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatPath) {
     if let Some(ref it) = _i . qself { _visitor.visit_qself(&* it) };
     _visitor.visit_path(&_i . path);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_range<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatRange) {
+pub fn visit_pat_range<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatRange) {
     _visitor.visit_expr(&_i . lo);
     _visitor.visit_expr(&_i . hi);
     _visitor.visit_range_limits(&_i . limits);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_ref<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatRef) {
+pub fn visit_pat_ref<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatRef) {
     _visitor.visit_pat(&_i . pat);
     _visitor.visit_mutability(&_i . mutbl);
     // Skipped field _i . and_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_slice<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatSlice) {
+pub fn visit_pat_slice<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatSlice) {
     for el in (_i . front).iter() { let it = el.item(); _visitor.visit_pat(&it) };
     if let Some(ref it) = _i . middle { _visitor.visit_pat(&* it) };
     for el in (_i . back).iter() { let it = el.item(); _visitor.visit_pat(&it) };
@@ -1577,14 +1577,14 @@
     // Skipped field _i . bracket_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatStruct) {
+pub fn visit_pat_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatStruct) {
     _visitor.visit_path(&_i . path);
     for el in (_i . fields).iter() { let it = el.item(); _visitor.visit_field_pat(&it) };
     // Skipped field _i . brace_token;
     // Skipped field _i . dot2_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_tuple<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatTuple) {
+pub fn visit_pat_tuple<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatTuple) {
     for el in (_i . pats).iter() { let it = el.item(); _visitor.visit_pat(&it) };
     // Skipped field _i . dots_pos;
     // Skipped field _i . paren_token;
@@ -1592,40 +1592,40 @@
     // Skipped field _i . comma_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_tuple_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatTupleStruct) {
+pub fn visit_pat_tuple_struct<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatTupleStruct) {
     _visitor.visit_path(&_i . path);
     _visitor.visit_pat_tuple(&_i . pat);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_wild<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatWild) {
+pub fn visit_pat_wild<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PatWild) {
     // Skipped field _i . underscore_token;
 }
 
-pub fn walk_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Path) {
+pub fn visit_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Path) {
     // Skipped field _i . leading_colon;
     for el in (_i . segments).iter() { let it = el.item(); _visitor.visit_path_segment(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_glob<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathGlob) {
+pub fn visit_path_glob<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathGlob) {
     _visitor.visit_path(&_i . path);
     // Skipped field _i . colon2_token;
     // Skipped field _i . star_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_list<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathList) {
+pub fn visit_path_list<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathList) {
     _visitor.visit_path(&_i . path);
     // Skipped field _i . colon2_token;
     // Skipped field _i . brace_token;
     for el in (_i . items).iter() { let it = el.item(); _visitor.visit_path_list_item(&it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_list_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathListItem) {
+pub fn visit_path_list_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathListItem) {
     // Skipped field _i . name;
     // Skipped field _i . rename;
     // Skipped field _i . as_token;
 }
 
-pub fn walk_path_parameters<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathParameters) {
+pub fn visit_path_parameters<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathParameters) {
     use ::PathParameters::*;
     match *_i {
         None => { }
@@ -1638,23 +1638,23 @@
     }
 }
 
-pub fn walk_path_segment<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathSegment) {
+pub fn visit_path_segment<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathSegment) {
     // Skipped field _i . ident;
     _visitor.visit_path_parameters(&_i . parameters);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_simple<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathSimple) {
+pub fn visit_path_simple<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PathSimple) {
     _visitor.visit_path(&_i . path);
     // Skipped field _i . as_token;
     // Skipped field _i . rename;
 }
 
-pub fn walk_poly_trait_ref<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PolyTraitRef) {
+pub fn visit_poly_trait_ref<V: Visitor + ?Sized>(_visitor: &mut V, _i: &PolyTraitRef) {
     if let Some(ref it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes(&* it) };
     _visitor.visit_path(&_i . trait_ref);
 }
 
-pub fn walk_qself<V: Visitor + ?Sized>(_visitor: &mut V, _i: &QSelf) {
+pub fn visit_qself<V: Visitor + ?Sized>(_visitor: &mut V, _i: &QSelf) {
     // Skipped field _i . lt_token;
     _visitor.visit_ty(&_i . ty);
     // Skipped field _i . position;
@@ -1662,7 +1662,7 @@
     // Skipped field _i . gt_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_range_limits<V: Visitor + ?Sized>(_visitor: &mut V, _i: &RangeLimits) {
+pub fn visit_range_limits<V: Visitor + ?Sized>(_visitor: &mut V, _i: &RangeLimits) {
     use ::RangeLimits::*;
     match *_i {
         HalfOpen(ref _binding_0, ) => {
@@ -1674,7 +1674,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_stmt<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Stmt) {
+pub fn visit_stmt<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Stmt) {
     use ::Stmt::*;
     match *_i {
         Local(ref _binding_0, ) => {
@@ -1696,7 +1696,7 @@
     }
 }
 
-pub fn walk_trait_bound_modifier<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitBoundModifier) {
+pub fn visit_trait_bound_modifier<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitBoundModifier) {
     use ::TraitBoundModifier::*;
     match *_i {
         None => { }
@@ -1706,12 +1706,12 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItem) {
+pub fn visit_trait_item<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItem) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_trait_item_kind(&_i . node);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_const<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemConst) {
+pub fn visit_trait_item_const<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemConst) {
     // Skipped field _i . const_token;
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
@@ -1720,7 +1720,7 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemKind) {
+pub fn visit_trait_item_kind<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemKind) {
     use ::TraitItemKind::*;
     match *_i {
         Const(ref _binding_0, ) => {
@@ -1738,13 +1738,13 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_method<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemMethod) {
+pub fn visit_trait_item_method<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemMethod) {
     _visitor.visit_method_sig(&_i . sig);
     if let Some(ref it) = _i . default { _visitor.visit_block(&* it) };
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_type<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemType) {
+pub fn visit_trait_item_type<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TraitItemType) {
     // Skipped field _i . type_token;
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
@@ -1753,7 +1753,7 @@
     // Skipped field _i . semi_token;
 }
 
-pub fn walk_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Ty) {
+pub fn visit_ty<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Ty) {
     use ::Ty::*;
     match *_i {
         Slice(ref _binding_0, ) => {
@@ -1801,36 +1801,36 @@
     }
 }
 
-pub fn walk_ty_array<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyArray) {
+pub fn visit_ty_array<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyArray) {
     // Skipped field _i . bracket_token;
     _visitor.visit_ty(&_i . ty);
     // Skipped field _i . semi_token;
     _visitor.visit_expr(&_i . amt);
 }
 
-pub fn walk_ty_bare_fn<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyBareFn) {
+pub fn visit_ty_bare_fn<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyBareFn) {
     _visitor.visit_bare_fn_ty(&_i . ty);
 }
 
-pub fn walk_ty_group<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyGroup) {
+pub fn visit_ty_group<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyGroup) {
     // Skipped field _i . group_token;
     _visitor.visit_ty(&_i . ty);
 }
 
-pub fn walk_ty_impl_trait<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyImplTrait) {
+pub fn visit_ty_impl_trait<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyImplTrait) {
     // Skipped field _i . impl_token;
     for el in (_i . bounds).iter() { let it = el.item(); _visitor.visit_ty_param_bound(&it) };
 }
 
-pub fn walk_ty_infer<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyInfer) {
+pub fn visit_ty_infer<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyInfer) {
     // Skipped field _i . underscore_token;
 }
 
-pub fn walk_ty_never<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyNever) {
+pub fn visit_ty_never<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyNever) {
     // Skipped field _i . bang_token;
 }
 
-pub fn walk_ty_param<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyParam) {
+pub fn visit_ty_param<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyParam) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
@@ -1839,7 +1839,7 @@
     if let Some(ref it) = _i . default { _visitor.visit_ty(&* it) };
 }
 
-pub fn walk_ty_param_bound<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyParamBound) {
+pub fn visit_ty_param_bound<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyParamBound) {
     use ::TyParamBound::*;
     match *_i {
         Trait(ref _binding_0, ref _binding_1, ) => {
@@ -1852,50 +1852,50 @@
     }
 }
 
-pub fn walk_ty_paren<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyParen) {
+pub fn visit_ty_paren<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyParen) {
     // Skipped field _i . paren_token;
     _visitor.visit_ty(&_i . ty);
 }
 
-pub fn walk_ty_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyPath) {
+pub fn visit_ty_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyPath) {
     if let Some(ref it) = _i . qself { _visitor.visit_qself(&* it) };
     _visitor.visit_path(&_i . path);
 }
 
-pub fn walk_ty_ptr<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyPtr) {
+pub fn visit_ty_ptr<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyPtr) {
     // Skipped field _i . star_token;
     // Skipped field _i . const_token;
     _visitor.visit_mut_ty(&_i . ty);
 }
 
-pub fn walk_ty_rptr<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyRptr) {
+pub fn visit_ty_rptr<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyRptr) {
     // Skipped field _i . and_token;
     // Skipped field _i . lifetime;
     _visitor.visit_mut_ty(&_i . ty);
 }
 
-pub fn walk_ty_slice<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TySlice) {
+pub fn visit_ty_slice<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TySlice) {
     _visitor.visit_ty(&_i . ty);
     // Skipped field _i . bracket_token;
 }
 
-pub fn walk_ty_trait_object<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyTraitObject) {
+pub fn visit_ty_trait_object<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyTraitObject) {
     for el in (_i . bounds).iter() { let it = el.item(); _visitor.visit_ty_param_bound(&it) };
 }
 
-pub fn walk_ty_tup<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyTup) {
+pub fn visit_ty_tup<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TyTup) {
     // Skipped field _i . paren_token;
     for el in (_i . tys).iter() { let it = el.item(); _visitor.visit_ty(&it) };
     // Skipped field _i . lone_comma;
 }
 
-pub fn walk_type_binding<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TypeBinding) {
+pub fn visit_type_binding<V: Visitor + ?Sized>(_visitor: &mut V, _i: &TypeBinding) {
     // Skipped field _i . ident;
     // Skipped field _i . eq_token;
     _visitor.visit_ty(&_i . ty);
 }
 
-pub fn walk_un_op<V: Visitor + ?Sized>(_visitor: &mut V, _i: &UnOp) {
+pub fn visit_un_op<V: Visitor + ?Sized>(_visitor: &mut V, _i: &UnOp) {
     use ::UnOp::*;
     match *_i {
         Deref(ref _binding_0, ) => {
@@ -1910,7 +1910,7 @@
     }
 }
 
-pub fn walk_unsafety<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Unsafety) {
+pub fn visit_unsafety<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Unsafety) {
     use ::Unsafety::*;
     match *_i {
         Unsafe(ref _binding_0, ) => {
@@ -1920,7 +1920,7 @@
     }
 }
 
-pub fn walk_variant<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Variant) {
+pub fn visit_variant<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Variant) {
     // Skipped field _i . ident;
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_variant_data(&_i . data);
@@ -1928,7 +1928,7 @@
     // Skipped field _i . eq_token;
 }
 
-pub fn walk_variant_data<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VariantData) {
+pub fn visit_variant_data<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VariantData) {
     use ::VariantData::*;
     match *_i {
         Struct(ref _binding_0, ref _binding_1, ) => {
@@ -1943,7 +1943,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_view_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ViewPath) {
+pub fn visit_view_path<V: Visitor + ?Sized>(_visitor: &mut V, _i: &ViewPath) {
     use ::ViewPath::*;
     match *_i {
         Simple(ref _binding_0, ) => {
@@ -1958,27 +1958,27 @@
     }
 }
 
-pub fn walk_vis_crate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisCrate) {
+pub fn visit_vis_crate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisCrate) {
     // Skipped field _i . pub_token;
     // Skipped field _i . paren_token;
     // Skipped field _i . crate_token;
 }
 
-pub fn walk_vis_inherited<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisInherited) {
+pub fn visit_vis_inherited<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisInherited) {
 }
 
-pub fn walk_vis_public<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisPublic) {
+pub fn visit_vis_public<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisPublic) {
     // Skipped field _i . pub_token;
 }
 
-pub fn walk_vis_restricted<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisRestricted) {
+pub fn visit_vis_restricted<V: Visitor + ?Sized>(_visitor: &mut V, _i: &VisRestricted) {
     // Skipped field _i . pub_token;
     // Skipped field _i . paren_token;
     // Skipped field _i . in_token;
     _visitor.visit_path(&_i . path);
 }
 
-pub fn walk_visibility<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Visibility) {
+pub fn visit_visibility<V: Visitor + ?Sized>(_visitor: &mut V, _i: &Visibility) {
     use ::Visibility::*;
     match *_i {
         Public(ref _binding_0, ) => {
@@ -1996,25 +1996,25 @@
     }
 }
 
-pub fn walk_where_bound_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereBoundPredicate) {
+pub fn visit_where_bound_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereBoundPredicate) {
     if let Some(ref it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes(&* it) };
     _visitor.visit_ty(&_i . bounded_ty);
     // Skipped field _i . colon_token;
     for el in (_i . bounds).iter() { let it = el.item(); _visitor.visit_ty_param_bound(&it) };
 }
 
-pub fn walk_where_clause<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereClause) {
+pub fn visit_where_clause<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereClause) {
     // Skipped field _i . where_token;
     for el in (_i . predicates).iter() { let it = el.item(); _visitor.visit_where_predicate(&it) };
 }
 
-pub fn walk_where_eq_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereEqPredicate) {
+pub fn visit_where_eq_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereEqPredicate) {
     _visitor.visit_ty(&_i . lhs_ty);
     // Skipped field _i . eq_token;
     _visitor.visit_ty(&_i . rhs_ty);
 }
 
-pub fn walk_where_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WherePredicate) {
+pub fn visit_where_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WherePredicate) {
     use ::WherePredicate::*;
     match *_i {
         BoundPredicate(ref _binding_0, ) => {
@@ -2029,7 +2029,7 @@
     }
 }
 
-pub fn walk_where_region_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereRegionPredicate) {
+pub fn visit_where_region_predicate<V: Visitor + ?Sized>(_visitor: &mut V, _i: &WhereRegionPredicate) {
     // Skipped field _i . lifetime;
     // Skipped field _i . colon_token;
     // Skipped field _i . bounds;
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index a0d7e73..bc4d28e 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -6,7 +6,7 @@
 //! call `visit::walk_*` to apply the default traversal algorithm, or prevent
 //! deeper traversal by doing nothing.
 
-use super::*;
+use *;
 
 
 #[cfg(feature = "full")]
@@ -31,355 +31,355 @@
 /// new default implementation gets introduced.)
 pub trait VisitorMut {
 
-fn visit_abi(&mut self, i: &mut Abi) { walk_abi(self, i) }
+fn visit_abi_mut(&mut self, i: &mut Abi) { visit_abi_mut(self, i) }
 
-fn visit_abi_kind(&mut self, i: &mut AbiKind) { walk_abi_kind(self, i) }
+fn visit_abi_kind_mut(&mut self, i: &mut AbiKind) { visit_abi_kind_mut(self, i) }
 
-fn visit_angle_bracketed_parameter_data(&mut self, i: &mut AngleBracketedParameterData) { walk_angle_bracketed_parameter_data(self, i) }
+fn visit_angle_bracketed_parameter_data_mut(&mut self, i: &mut AngleBracketedParameterData) { visit_angle_bracketed_parameter_data_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arg_captured(&mut self, i: &mut ArgCaptured) { walk_arg_captured(self, i) }
+fn visit_arg_captured_mut(&mut self, i: &mut ArgCaptured) { visit_arg_captured_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arg_self(&mut self, i: &mut ArgSelf) { walk_arg_self(self, i) }
+fn visit_arg_self_mut(&mut self, i: &mut ArgSelf) { visit_arg_self_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arg_self_ref(&mut self, i: &mut ArgSelfRef) { walk_arg_self_ref(self, i) }
+fn visit_arg_self_ref_mut(&mut self, i: &mut ArgSelfRef) { visit_arg_self_ref_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_arm(&mut self, i: &mut Arm) { walk_arm(self, i) }
+fn visit_arm_mut(&mut self, i: &mut Arm) { visit_arm_mut(self, i) }
 
-fn visit_attr_style(&mut self, i: &mut AttrStyle) { walk_attr_style(self, i) }
+fn visit_attr_style_mut(&mut self, i: &mut AttrStyle) { visit_attr_style_mut(self, i) }
 
-fn visit_attribute(&mut self, i: &mut Attribute) { walk_attribute(self, i) }
+fn visit_attribute_mut(&mut self, i: &mut Attribute) { visit_attribute_mut(self, i) }
 
-fn visit_bare_fn_arg(&mut self, i: &mut BareFnArg) { walk_bare_fn_arg(self, i) }
+fn visit_bare_fn_arg_mut(&mut self, i: &mut BareFnArg) { visit_bare_fn_arg_mut(self, i) }
 
-fn visit_bare_fn_arg_name(&mut self, i: &mut BareFnArgName) { walk_bare_fn_arg_name(self, i) }
+fn visit_bare_fn_arg_name_mut(&mut self, i: &mut BareFnArgName) { visit_bare_fn_arg_name_mut(self, i) }
 
-fn visit_bare_fn_ty(&mut self, i: &mut BareFnTy) { walk_bare_fn_ty(self, i) }
+fn visit_bare_fn_ty_mut(&mut self, i: &mut BareFnTy) { visit_bare_fn_ty_mut(self, i) }
 
-fn visit_bin_op(&mut self, i: &mut BinOp) { walk_bin_op(self, i) }
+fn visit_bin_op_mut(&mut self, i: &mut BinOp) { visit_bin_op_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_binding_mode(&mut self, i: &mut BindingMode) { walk_binding_mode(self, i) }
+fn visit_binding_mode_mut(&mut self, i: &mut BindingMode) { visit_binding_mode_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_block(&mut self, i: &mut Block) { walk_block(self, i) }
+fn visit_block_mut(&mut self, i: &mut Block) { visit_block_mut(self, i) }
 
-fn visit_body(&mut self, i: &mut Body) { walk_body(self, i) }
+fn visit_body_mut(&mut self, i: &mut Body) { visit_body_mut(self, i) }
 
-fn visit_body_enum(&mut self, i: &mut BodyEnum) { walk_body_enum(self, i) }
+fn visit_body_enum_mut(&mut self, i: &mut BodyEnum) { visit_body_enum_mut(self, i) }
 
-fn visit_body_struct(&mut self, i: &mut BodyStruct) { walk_body_struct(self, i) }
+fn visit_body_struct_mut(&mut self, i: &mut BodyStruct) { visit_body_struct_mut(self, i) }
 
-fn visit_bound_lifetimes(&mut self, i: &mut BoundLifetimes) { walk_bound_lifetimes(self, i) }
+fn visit_bound_lifetimes_mut(&mut self, i: &mut BoundLifetimes) { visit_bound_lifetimes_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_capture_by(&mut self, i: &mut CaptureBy) { walk_capture_by(self, i) }
+fn visit_capture_by_mut(&mut self, i: &mut CaptureBy) { visit_capture_by_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_constness(&mut self, i: &mut Constness) { walk_constness(self, i) }
+fn visit_constness_mut(&mut self, i: &mut Constness) { visit_constness_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_defaultness(&mut self, i: &mut Defaultness) { walk_defaultness(self, i) }
+fn visit_defaultness_mut(&mut self, i: &mut Defaultness) { visit_defaultness_mut(self, i) }
 
-fn visit_derive_input(&mut self, i: &mut DeriveInput) { walk_derive_input(self, i) }
+fn visit_derive_input_mut(&mut self, i: &mut DeriveInput) { visit_derive_input_mut(self, i) }
 
-fn visit_expr(&mut self, i: &mut Expr) { walk_expr(self, i) }
+fn visit_expr_mut(&mut self, i: &mut Expr) { visit_expr_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_addr_of(&mut self, i: &mut ExprAddrOf) { walk_expr_addr_of(self, i) }
+fn visit_expr_addr_of_mut(&mut self, i: &mut ExprAddrOf) { visit_expr_addr_of_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_array(&mut self, i: &mut ExprArray) { walk_expr_array(self, i) }
+fn visit_expr_array_mut(&mut self, i: &mut ExprArray) { visit_expr_array_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_assign(&mut self, i: &mut ExprAssign) { walk_expr_assign(self, i) }
+fn visit_expr_assign_mut(&mut self, i: &mut ExprAssign) { visit_expr_assign_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_assign_op(&mut self, i: &mut ExprAssignOp) { walk_expr_assign_op(self, i) }
+fn visit_expr_assign_op_mut(&mut self, i: &mut ExprAssignOp) { visit_expr_assign_op_mut(self, i) }
 
-fn visit_expr_binary(&mut self, i: &mut ExprBinary) { walk_expr_binary(self, i) }
+fn visit_expr_binary_mut(&mut self, i: &mut ExprBinary) { visit_expr_binary_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_block(&mut self, i: &mut ExprBlock) { walk_expr_block(self, i) }
+fn visit_expr_block_mut(&mut self, i: &mut ExprBlock) { visit_expr_block_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_box(&mut self, i: &mut ExprBox) { walk_expr_box(self, i) }
+fn visit_expr_box_mut(&mut self, i: &mut ExprBox) { visit_expr_box_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_break(&mut self, i: &mut ExprBreak) { walk_expr_break(self, i) }
+fn visit_expr_break_mut(&mut self, i: &mut ExprBreak) { visit_expr_break_mut(self, i) }
 
-fn visit_expr_call(&mut self, i: &mut ExprCall) { walk_expr_call(self, i) }
+fn visit_expr_call_mut(&mut self, i: &mut ExprCall) { visit_expr_call_mut(self, i) }
 
-fn visit_expr_cast(&mut self, i: &mut ExprCast) { walk_expr_cast(self, i) }
+fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) { visit_expr_cast_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_catch(&mut self, i: &mut ExprCatch) { walk_expr_catch(self, i) }
+fn visit_expr_catch_mut(&mut self, i: &mut ExprCatch) { visit_expr_catch_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_closure(&mut self, i: &mut ExprClosure) { walk_expr_closure(self, i) }
+fn visit_expr_closure_mut(&mut self, i: &mut ExprClosure) { visit_expr_closure_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_continue(&mut self, i: &mut ExprContinue) { walk_expr_continue(self, i) }
+fn visit_expr_continue_mut(&mut self, i: &mut ExprContinue) { visit_expr_continue_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_field(&mut self, i: &mut ExprField) { walk_expr_field(self, i) }
+fn visit_expr_field_mut(&mut self, i: &mut ExprField) { visit_expr_field_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_for_loop(&mut self, i: &mut ExprForLoop) { walk_expr_for_loop(self, i) }
+fn visit_expr_for_loop_mut(&mut self, i: &mut ExprForLoop) { visit_expr_for_loop_mut(self, i) }
 
-fn visit_expr_group(&mut self, i: &mut ExprGroup) { walk_expr_group(self, i) }
+fn visit_expr_group_mut(&mut self, i: &mut ExprGroup) { visit_expr_group_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_if(&mut self, i: &mut ExprIf) { walk_expr_if(self, i) }
+fn visit_expr_if_mut(&mut self, i: &mut ExprIf) { visit_expr_if_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_if_let(&mut self, i: &mut ExprIfLet) { walk_expr_if_let(self, i) }
+fn visit_expr_if_let_mut(&mut self, i: &mut ExprIfLet) { visit_expr_if_let_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_in_place(&mut self, i: &mut ExprInPlace) { walk_expr_in_place(self, i) }
+fn visit_expr_in_place_mut(&mut self, i: &mut ExprInPlace) { visit_expr_in_place_mut(self, i) }
 
-fn visit_expr_index(&mut self, i: &mut ExprIndex) { walk_expr_index(self, i) }
+fn visit_expr_index_mut(&mut self, i: &mut ExprIndex) { visit_expr_index_mut(self, i) }
 
-fn visit_expr_kind(&mut self, i: &mut ExprKind) { walk_expr_kind(self, i) }
+fn visit_expr_kind_mut(&mut self, i: &mut ExprKind) { visit_expr_kind_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_loop(&mut self, i: &mut ExprLoop) { walk_expr_loop(self, i) }
+fn visit_expr_loop_mut(&mut self, i: &mut ExprLoop) { visit_expr_loop_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_match(&mut self, i: &mut ExprMatch) { walk_expr_match(self, i) }
+fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) { visit_expr_match_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_method_call(&mut self, i: &mut ExprMethodCall) { walk_expr_method_call(self, i) }
+fn visit_expr_method_call_mut(&mut self, i: &mut ExprMethodCall) { visit_expr_method_call_mut(self, i) }
 
-fn visit_expr_paren(&mut self, i: &mut ExprParen) { walk_expr_paren(self, i) }
+fn visit_expr_paren_mut(&mut self, i: &mut ExprParen) { visit_expr_paren_mut(self, i) }
 
-fn visit_expr_path(&mut self, i: &mut ExprPath) { walk_expr_path(self, i) }
+fn visit_expr_path_mut(&mut self, i: &mut ExprPath) { visit_expr_path_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_range(&mut self, i: &mut ExprRange) { walk_expr_range(self, i) }
+fn visit_expr_range_mut(&mut self, i: &mut ExprRange) { visit_expr_range_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_repeat(&mut self, i: &mut ExprRepeat) { walk_expr_repeat(self, i) }
+fn visit_expr_repeat_mut(&mut self, i: &mut ExprRepeat) { visit_expr_repeat_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_ret(&mut self, i: &mut ExprRet) { walk_expr_ret(self, i) }
+fn visit_expr_ret_mut(&mut self, i: &mut ExprRet) { visit_expr_ret_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_struct(&mut self, i: &mut ExprStruct) { walk_expr_struct(self, i) }
+fn visit_expr_struct_mut(&mut self, i: &mut ExprStruct) { visit_expr_struct_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_try(&mut self, i: &mut ExprTry) { walk_expr_try(self, i) }
+fn visit_expr_try_mut(&mut self, i: &mut ExprTry) { visit_expr_try_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_tup(&mut self, i: &mut ExprTup) { walk_expr_tup(self, i) }
+fn visit_expr_tup_mut(&mut self, i: &mut ExprTup) { visit_expr_tup_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_tup_field(&mut self, i: &mut ExprTupField) { walk_expr_tup_field(self, i) }
+fn visit_expr_tup_field_mut(&mut self, i: &mut ExprTupField) { visit_expr_tup_field_mut(self, i) }
 
-fn visit_expr_type(&mut self, i: &mut ExprType) { walk_expr_type(self, i) }
+fn visit_expr_type_mut(&mut self, i: &mut ExprType) { visit_expr_type_mut(self, i) }
 
-fn visit_expr_unary(&mut self, i: &mut ExprUnary) { walk_expr_unary(self, i) }
+fn visit_expr_unary_mut(&mut self, i: &mut ExprUnary) { visit_expr_unary_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_while(&mut self, i: &mut ExprWhile) { walk_expr_while(self, i) }
+fn visit_expr_while_mut(&mut self, i: &mut ExprWhile) { visit_expr_while_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_while_let(&mut self, i: &mut ExprWhileLet) { walk_expr_while_let(self, i) }
+fn visit_expr_while_let_mut(&mut self, i: &mut ExprWhileLet) { visit_expr_while_let_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_yield(&mut self, i: &mut ExprYield) { walk_expr_yield(self, i) }
+fn visit_expr_yield_mut(&mut self, i: &mut ExprYield) { visit_expr_yield_mut(self, i) }
 
-fn visit_field(&mut self, i: &mut Field) { walk_field(self, i) }
+fn visit_field_mut(&mut self, i: &mut Field) { visit_field_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_field_pat(&mut self, i: &mut FieldPat) { walk_field_pat(self, i) }
+fn visit_field_pat_mut(&mut self, i: &mut FieldPat) { visit_field_pat_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_field_value(&mut self, i: &mut FieldValue) { walk_field_value(self, i) }
+fn visit_field_value_mut(&mut self, i: &mut FieldValue) { visit_field_value_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_file(&mut self, i: &mut File) { walk_file(self, i) }
+fn visit_file_mut(&mut self, i: &mut File) { visit_file_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_fn_arg(&mut self, i: &mut FnArg) { walk_fn_arg(self, i) }
+fn visit_fn_arg_mut(&mut self, i: &mut FnArg) { visit_fn_arg_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_fn_decl(&mut self, i: &mut FnDecl) { walk_fn_decl(self, i) }
+fn visit_fn_decl_mut(&mut self, i: &mut FnDecl) { visit_fn_decl_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item(&mut self, i: &mut ForeignItem) { walk_foreign_item(self, i) }
+fn visit_foreign_item_mut(&mut self, i: &mut ForeignItem) { visit_foreign_item_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item_fn(&mut self, i: &mut ForeignItemFn) { walk_foreign_item_fn(self, i) }
+fn visit_foreign_item_fn_mut(&mut self, i: &mut ForeignItemFn) { visit_foreign_item_fn_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item_kind(&mut self, i: &mut ForeignItemKind) { walk_foreign_item_kind(self, i) }
+fn visit_foreign_item_kind_mut(&mut self, i: &mut ForeignItemKind) { visit_foreign_item_kind_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_foreign_item_static(&mut self, i: &mut ForeignItemStatic) { walk_foreign_item_static(self, i) }
+fn visit_foreign_item_static_mut(&mut self, i: &mut ForeignItemStatic) { visit_foreign_item_static_mut(self, i) }
 
-fn visit_function_ret_ty(&mut self, i: &mut FunctionRetTy) { walk_function_ret_ty(self, i) }
+fn visit_function_ret_ty_mut(&mut self, i: &mut FunctionRetTy) { visit_function_ret_ty_mut(self, i) }
 
-fn visit_generics(&mut self, i: &mut Generics) { walk_generics(self, i) }
+fn visit_generics_mut(&mut self, i: &mut Generics) { visit_generics_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item(&mut self, i: &mut ImplItem) { walk_impl_item(self, i) }
+fn visit_impl_item_mut(&mut self, i: &mut ImplItem) { visit_impl_item_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_const(&mut self, i: &mut ImplItemConst) { walk_impl_item_const(self, i) }
+fn visit_impl_item_const_mut(&mut self, i: &mut ImplItemConst) { visit_impl_item_const_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_kind(&mut self, i: &mut ImplItemKind) { walk_impl_item_kind(self, i) }
+fn visit_impl_item_kind_mut(&mut self, i: &mut ImplItemKind) { visit_impl_item_kind_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_method(&mut self, i: &mut ImplItemMethod) { walk_impl_item_method(self, i) }
+fn visit_impl_item_method_mut(&mut self, i: &mut ImplItemMethod) { visit_impl_item_method_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_item_type(&mut self, i: &mut ImplItemType) { walk_impl_item_type(self, i) }
+fn visit_impl_item_type_mut(&mut self, i: &mut ImplItemType) { visit_impl_item_type_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_impl_polarity(&mut self, i: &mut ImplPolarity) { walk_impl_polarity(self, i) }
+fn visit_impl_polarity_mut(&mut self, i: &mut ImplPolarity) { visit_impl_polarity_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_in_place_kind(&mut self, i: &mut InPlaceKind) { walk_in_place_kind(self, i) }
+fn visit_in_place_kind_mut(&mut self, i: &mut InPlaceKind) { visit_in_place_kind_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item(&mut self, i: &mut Item) { walk_item(self, i) }
+fn visit_item_mut(&mut self, i: &mut Item) { visit_item_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_const(&mut self, i: &mut ItemConst) { walk_item_const(self, i) }
+fn visit_item_const_mut(&mut self, i: &mut ItemConst) { visit_item_const_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_default_impl(&mut self, i: &mut ItemDefaultImpl) { walk_item_default_impl(self, i) }
+fn visit_item_default_impl_mut(&mut self, i: &mut ItemDefaultImpl) { visit_item_default_impl_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_enum(&mut self, i: &mut ItemEnum) { walk_item_enum(self, i) }
+fn visit_item_enum_mut(&mut self, i: &mut ItemEnum) { visit_item_enum_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_extern_crate(&mut self, i: &mut ItemExternCrate) { walk_item_extern_crate(self, i) }
+fn visit_item_extern_crate_mut(&mut self, i: &mut ItemExternCrate) { visit_item_extern_crate_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_fn(&mut self, i: &mut ItemFn) { walk_item_fn(self, i) }
+fn visit_item_fn_mut(&mut self, i: &mut ItemFn) { visit_item_fn_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_foreign_mod(&mut self, i: &mut ItemForeignMod) { walk_item_foreign_mod(self, i) }
+fn visit_item_foreign_mod_mut(&mut self, i: &mut ItemForeignMod) { visit_item_foreign_mod_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_impl(&mut self, i: &mut ItemImpl) { walk_item_impl(self, i) }
+fn visit_item_impl_mut(&mut self, i: &mut ItemImpl) { visit_item_impl_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_kind(&mut self, i: &mut ItemKind) { walk_item_kind(self, i) }
+fn visit_item_kind_mut(&mut self, i: &mut ItemKind) { visit_item_kind_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_mod(&mut self, i: &mut ItemMod) { walk_item_mod(self, i) }
+fn visit_item_mod_mut(&mut self, i: &mut ItemMod) { visit_item_mod_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_static(&mut self, i: &mut ItemStatic) { walk_item_static(self, i) }
+fn visit_item_static_mut(&mut self, i: &mut ItemStatic) { visit_item_static_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_struct(&mut self, i: &mut ItemStruct) { walk_item_struct(self, i) }
+fn visit_item_struct_mut(&mut self, i: &mut ItemStruct) { visit_item_struct_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_trait(&mut self, i: &mut ItemTrait) { walk_item_trait(self, i) }
+fn visit_item_trait_mut(&mut self, i: &mut ItemTrait) { visit_item_trait_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_ty(&mut self, i: &mut ItemTy) { walk_item_ty(self, i) }
+fn visit_item_ty_mut(&mut self, i: &mut ItemTy) { visit_item_ty_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_union(&mut self, i: &mut ItemUnion) { walk_item_union(self, i) }
+fn visit_item_union_mut(&mut self, i: &mut ItemUnion) { visit_item_union_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_item_use(&mut self, i: &mut ItemUse) { walk_item_use(self, i) }
+fn visit_item_use_mut(&mut self, i: &mut ItemUse) { visit_item_use_mut(self, i) }
 
-fn visit_lifetime_def(&mut self, i: &mut LifetimeDef) { walk_lifetime_def(self, i) }
+fn visit_lifetime_def_mut(&mut self, i: &mut LifetimeDef) { visit_lifetime_def_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_local(&mut self, i: &mut Local) { walk_local(self, i) }
+fn visit_local_mut(&mut self, i: &mut Local) { visit_local_mut(self, i) }
 
-fn visit_mac(&mut self, i: &mut Mac) { walk_mac(self, i) }
+fn visit_mac_mut(&mut self, i: &mut Mac) { visit_mac_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_mac_stmt_style(&mut self, i: &mut MacStmtStyle) { walk_mac_stmt_style(self, i) }
+fn visit_mac_stmt_style_mut(&mut self, i: &mut MacStmtStyle) { visit_mac_stmt_style_mut(self, i) }
 
-fn visit_meta_item(&mut self, i: &mut MetaItem) { walk_meta_item(self, i) }
+fn visit_meta_item_mut(&mut self, i: &mut MetaItem) { visit_meta_item_mut(self, i) }
 
-fn visit_meta_item_list(&mut self, i: &mut MetaItemList) { walk_meta_item_list(self, i) }
+fn visit_meta_item_list_mut(&mut self, i: &mut MetaItemList) { visit_meta_item_list_mut(self, i) }
 
-fn visit_meta_name_value(&mut self, i: &mut MetaNameValue) { walk_meta_name_value(self, i) }
+fn visit_meta_name_value_mut(&mut self, i: &mut MetaNameValue) { visit_meta_name_value_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_method_sig(&mut self, i: &mut MethodSig) { walk_method_sig(self, i) }
+fn visit_method_sig_mut(&mut self, i: &mut MethodSig) { visit_method_sig_mut(self, i) }
 
-fn visit_mut_ty(&mut self, i: &mut MutTy) { walk_mut_ty(self, i) }
+fn visit_mut_ty_mut(&mut self, i: &mut MutTy) { visit_mut_ty_mut(self, i) }
 
-fn visit_mutability(&mut self, i: &mut Mutability) { walk_mutability(self, i) }
+fn visit_mutability_mut(&mut self, i: &mut Mutability) { visit_mutability_mut(self, i) }
 
-fn visit_nested_meta_item(&mut self, i: &mut NestedMetaItem) { walk_nested_meta_item(self, i) }
+fn visit_nested_meta_item_mut(&mut self, i: &mut NestedMetaItem) { visit_nested_meta_item_mut(self, i) }
 
-fn visit_parenthesized_parameter_data(&mut self, i: &mut ParenthesizedParameterData) { walk_parenthesized_parameter_data(self, i) }
+fn visit_parenthesized_parameter_data_mut(&mut self, i: &mut ParenthesizedParameterData) { visit_parenthesized_parameter_data_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat(&mut self, i: &mut Pat) { walk_pat(self, i) }
+fn visit_pat_mut(&mut self, i: &mut Pat) { visit_pat_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_box(&mut self, i: &mut PatBox) { walk_pat_box(self, i) }
+fn visit_pat_box_mut(&mut self, i: &mut PatBox) { visit_pat_box_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_ident(&mut self, i: &mut PatIdent) { walk_pat_ident(self, i) }
+fn visit_pat_ident_mut(&mut self, i: &mut PatIdent) { visit_pat_ident_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_lit(&mut self, i: &mut PatLit) { walk_pat_lit(self, i) }
+fn visit_pat_lit_mut(&mut self, i: &mut PatLit) { visit_pat_lit_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_path(&mut self, i: &mut PatPath) { walk_pat_path(self, i) }
+fn visit_pat_path_mut(&mut self, i: &mut PatPath) { visit_pat_path_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_range(&mut self, i: &mut PatRange) { walk_pat_range(self, i) }
+fn visit_pat_range_mut(&mut self, i: &mut PatRange) { visit_pat_range_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_ref(&mut self, i: &mut PatRef) { walk_pat_ref(self, i) }
+fn visit_pat_ref_mut(&mut self, i: &mut PatRef) { visit_pat_ref_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_slice(&mut self, i: &mut PatSlice) { walk_pat_slice(self, i) }
+fn visit_pat_slice_mut(&mut self, i: &mut PatSlice) { visit_pat_slice_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_struct(&mut self, i: &mut PatStruct) { walk_pat_struct(self, i) }
+fn visit_pat_struct_mut(&mut self, i: &mut PatStruct) { visit_pat_struct_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_tuple(&mut self, i: &mut PatTuple) { walk_pat_tuple(self, i) }
+fn visit_pat_tuple_mut(&mut self, i: &mut PatTuple) { visit_pat_tuple_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_tuple_struct(&mut self, i: &mut PatTupleStruct) { walk_pat_tuple_struct(self, i) }
+fn visit_pat_tuple_struct_mut(&mut self, i: &mut PatTupleStruct) { visit_pat_tuple_struct_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_pat_wild(&mut self, i: &mut PatWild) { walk_pat_wild(self, i) }
+fn visit_pat_wild_mut(&mut self, i: &mut PatWild) { visit_pat_wild_mut(self, i) }
 
-fn visit_path(&mut self, i: &mut Path) { walk_path(self, i) }
+fn visit_path_mut(&mut self, i: &mut Path) { visit_path_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_glob(&mut self, i: &mut PathGlob) { walk_path_glob(self, i) }
+fn visit_path_glob_mut(&mut self, i: &mut PathGlob) { visit_path_glob_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_list(&mut self, i: &mut PathList) { walk_path_list(self, i) }
+fn visit_path_list_mut(&mut self, i: &mut PathList) { visit_path_list_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_list_item(&mut self, i: &mut PathListItem) { walk_path_list_item(self, i) }
+fn visit_path_list_item_mut(&mut self, i: &mut PathListItem) { visit_path_list_item_mut(self, i) }
 
-fn visit_path_parameters(&mut self, i: &mut PathParameters) { walk_path_parameters(self, i) }
+fn visit_path_parameters_mut(&mut self, i: &mut PathParameters) { visit_path_parameters_mut(self, i) }
 
-fn visit_path_segment(&mut self, i: &mut PathSegment) { walk_path_segment(self, i) }
+fn visit_path_segment_mut(&mut self, i: &mut PathSegment) { visit_path_segment_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_path_simple(&mut self, i: &mut PathSimple) { walk_path_simple(self, i) }
+fn visit_path_simple_mut(&mut self, i: &mut PathSimple) { visit_path_simple_mut(self, i) }
 
-fn visit_poly_trait_ref(&mut self, i: &mut PolyTraitRef) { walk_poly_trait_ref(self, i) }
+fn visit_poly_trait_ref_mut(&mut self, i: &mut PolyTraitRef) { visit_poly_trait_ref_mut(self, i) }
 
-fn visit_qself(&mut self, i: &mut QSelf) { walk_qself(self, i) }
+fn visit_qself_mut(&mut self, i: &mut QSelf) { visit_qself_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_range_limits(&mut self, i: &mut RangeLimits) { walk_range_limits(self, i) }
+fn visit_range_limits_mut(&mut self, i: &mut RangeLimits) { visit_range_limits_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_stmt(&mut self, i: &mut Stmt) { walk_stmt(self, i) }
+fn visit_stmt_mut(&mut self, i: &mut Stmt) { visit_stmt_mut(self, i) }
 
-fn visit_trait_bound_modifier(&mut self, i: &mut TraitBoundModifier) { walk_trait_bound_modifier(self, i) }
+fn visit_trait_bound_modifier_mut(&mut self, i: &mut TraitBoundModifier) { visit_trait_bound_modifier_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item(&mut self, i: &mut TraitItem) { walk_trait_item(self, i) }
+fn visit_trait_item_mut(&mut self, i: &mut TraitItem) { visit_trait_item_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_const(&mut self, i: &mut TraitItemConst) { walk_trait_item_const(self, i) }
+fn visit_trait_item_const_mut(&mut self, i: &mut TraitItemConst) { visit_trait_item_const_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_kind(&mut self, i: &mut TraitItemKind) { walk_trait_item_kind(self, i) }
+fn visit_trait_item_kind_mut(&mut self, i: &mut TraitItemKind) { visit_trait_item_kind_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_method(&mut self, i: &mut TraitItemMethod) { walk_trait_item_method(self, i) }
+fn visit_trait_item_method_mut(&mut self, i: &mut TraitItemMethod) { visit_trait_item_method_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_trait_item_type(&mut self, i: &mut TraitItemType) { walk_trait_item_type(self, i) }
+fn visit_trait_item_type_mut(&mut self, i: &mut TraitItemType) { visit_trait_item_type_mut(self, i) }
 
-fn visit_ty(&mut self, i: &mut Ty) { walk_ty(self, i) }
+fn visit_ty_mut(&mut self, i: &mut Ty) { visit_ty_mut(self, i) }
 
-fn visit_ty_array(&mut self, i: &mut TyArray) { walk_ty_array(self, i) }
+fn visit_ty_array_mut(&mut self, i: &mut TyArray) { visit_ty_array_mut(self, i) }
 
-fn visit_ty_bare_fn(&mut self, i: &mut TyBareFn) { walk_ty_bare_fn(self, i) }
+fn visit_ty_bare_fn_mut(&mut self, i: &mut TyBareFn) { visit_ty_bare_fn_mut(self, i) }
 
-fn visit_ty_group(&mut self, i: &mut TyGroup) { walk_ty_group(self, i) }
+fn visit_ty_group_mut(&mut self, i: &mut TyGroup) { visit_ty_group_mut(self, i) }
 
-fn visit_ty_impl_trait(&mut self, i: &mut TyImplTrait) { walk_ty_impl_trait(self, i) }
+fn visit_ty_impl_trait_mut(&mut self, i: &mut TyImplTrait) { visit_ty_impl_trait_mut(self, i) }
 
-fn visit_ty_infer(&mut self, i: &mut TyInfer) { walk_ty_infer(self, i) }
+fn visit_ty_infer_mut(&mut self, i: &mut TyInfer) { visit_ty_infer_mut(self, i) }
 
-fn visit_ty_never(&mut self, i: &mut TyNever) { walk_ty_never(self, i) }
+fn visit_ty_never_mut(&mut self, i: &mut TyNever) { visit_ty_never_mut(self, i) }
 
-fn visit_ty_param(&mut self, i: &mut TyParam) { walk_ty_param(self, i) }
+fn visit_ty_param_mut(&mut self, i: &mut TyParam) { visit_ty_param_mut(self, i) }
 
-fn visit_ty_param_bound(&mut self, i: &mut TyParamBound) { walk_ty_param_bound(self, i) }
+fn visit_ty_param_bound_mut(&mut self, i: &mut TyParamBound) { visit_ty_param_bound_mut(self, i) }
 
-fn visit_ty_paren(&mut self, i: &mut TyParen) { walk_ty_paren(self, i) }
+fn visit_ty_paren_mut(&mut self, i: &mut TyParen) { visit_ty_paren_mut(self, i) }
 
-fn visit_ty_path(&mut self, i: &mut TyPath) { walk_ty_path(self, i) }
+fn visit_ty_path_mut(&mut self, i: &mut TyPath) { visit_ty_path_mut(self, i) }
 
-fn visit_ty_ptr(&mut self, i: &mut TyPtr) { walk_ty_ptr(self, i) }
+fn visit_ty_ptr_mut(&mut self, i: &mut TyPtr) { visit_ty_ptr_mut(self, i) }
 
-fn visit_ty_rptr(&mut self, i: &mut TyRptr) { walk_ty_rptr(self, i) }
+fn visit_ty_rptr_mut(&mut self, i: &mut TyRptr) { visit_ty_rptr_mut(self, i) }
 
-fn visit_ty_slice(&mut self, i: &mut TySlice) { walk_ty_slice(self, i) }
+fn visit_ty_slice_mut(&mut self, i: &mut TySlice) { visit_ty_slice_mut(self, i) }
 
-fn visit_ty_trait_object(&mut self, i: &mut TyTraitObject) { walk_ty_trait_object(self, i) }
+fn visit_ty_trait_object_mut(&mut self, i: &mut TyTraitObject) { visit_ty_trait_object_mut(self, i) }
 
-fn visit_ty_tup(&mut self, i: &mut TyTup) { walk_ty_tup(self, i) }
+fn visit_ty_tup_mut(&mut self, i: &mut TyTup) { visit_ty_tup_mut(self, i) }
 
-fn visit_type_binding(&mut self, i: &mut TypeBinding) { walk_type_binding(self, i) }
+fn visit_type_binding_mut(&mut self, i: &mut TypeBinding) { visit_type_binding_mut(self, i) }
 
-fn visit_un_op(&mut self, i: &mut UnOp) { walk_un_op(self, i) }
+fn visit_un_op_mut(&mut self, i: &mut UnOp) { visit_un_op_mut(self, i) }
 
-fn visit_unsafety(&mut self, i: &mut Unsafety) { walk_unsafety(self, i) }
+fn visit_unsafety_mut(&mut self, i: &mut Unsafety) { visit_unsafety_mut(self, i) }
 
-fn visit_variant(&mut self, i: &mut Variant) { walk_variant(self, i) }
+fn visit_variant_mut(&mut self, i: &mut Variant) { visit_variant_mut(self, i) }
 
-fn visit_variant_data(&mut self, i: &mut VariantData) { walk_variant_data(self, i) }
+fn visit_variant_data_mut(&mut self, i: &mut VariantData) { visit_variant_data_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_view_path(&mut self, i: &mut ViewPath) { walk_view_path(self, i) }
+fn visit_view_path_mut(&mut self, i: &mut ViewPath) { visit_view_path_mut(self, i) }
 
-fn visit_vis_crate(&mut self, i: &mut VisCrate) { walk_vis_crate(self, i) }
+fn visit_vis_crate_mut(&mut self, i: &mut VisCrate) { visit_vis_crate_mut(self, i) }
 
-fn visit_vis_inherited(&mut self, i: &mut VisInherited) { walk_vis_inherited(self, i) }
+fn visit_vis_inherited_mut(&mut self, i: &mut VisInherited) { visit_vis_inherited_mut(self, i) }
 
-fn visit_vis_public(&mut self, i: &mut VisPublic) { walk_vis_public(self, i) }
+fn visit_vis_public_mut(&mut self, i: &mut VisPublic) { visit_vis_public_mut(self, i) }
 
-fn visit_vis_restricted(&mut self, i: &mut VisRestricted) { walk_vis_restricted(self, i) }
+fn visit_vis_restricted_mut(&mut self, i: &mut VisRestricted) { visit_vis_restricted_mut(self, i) }
 
-fn visit_visibility(&mut self, i: &mut Visibility) { walk_visibility(self, i) }
+fn visit_visibility_mut(&mut self, i: &mut Visibility) { visit_visibility_mut(self, i) }
 
-fn visit_where_bound_predicate(&mut self, i: &mut WhereBoundPredicate) { walk_where_bound_predicate(self, i) }
+fn visit_where_bound_predicate_mut(&mut self, i: &mut WhereBoundPredicate) { visit_where_bound_predicate_mut(self, i) }
 
-fn visit_where_clause(&mut self, i: &mut WhereClause) { walk_where_clause(self, i) }
+fn visit_where_clause_mut(&mut self, i: &mut WhereClause) { visit_where_clause_mut(self, i) }
 
-fn visit_where_eq_predicate(&mut self, i: &mut WhereEqPredicate) { walk_where_eq_predicate(self, i) }
+fn visit_where_eq_predicate_mut(&mut self, i: &mut WhereEqPredicate) { visit_where_eq_predicate_mut(self, i) }
 
-fn visit_where_predicate(&mut self, i: &mut WherePredicate) { walk_where_predicate(self, i) }
+fn visit_where_predicate_mut(&mut self, i: &mut WherePredicate) { visit_where_predicate_mut(self, i) }
 
-fn visit_where_region_predicate(&mut self, i: &mut WhereRegionPredicate) { walk_where_region_predicate(self, i) }
+fn visit_where_region_predicate_mut(&mut self, i: &mut WhereRegionPredicate) { visit_where_region_predicate_mut(self, i) }
 
 }
 
 
-pub fn walk_abi<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Abi) {
+pub fn visit_abi_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Abi) {
     // Skipped field _i . extern_token;
-    _visitor.visit_abi_kind(&mut _i . kind);
+    _visitor.visit_abi_kind_mut(&mut _i . kind);
 }
 
-pub fn walk_abi_kind<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AbiKind) {
+pub fn visit_abi_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AbiKind) {
     use ::AbiKind::*;
     match *_i {
         Named(ref mut _binding_0, ) => {
@@ -389,44 +389,44 @@
     }
 }
 
-pub fn walk_angle_bracketed_parameter_data<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AngleBracketedParameterData) {
+pub fn visit_angle_bracketed_parameter_data_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AngleBracketedParameterData) {
     // Skipped field _i . turbofish;
     // Skipped field _i . lt_token;
     // Skipped field _i . lifetimes;
-    for mut el in (_i . types).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty(&mut it) };
-    for mut el in (_i . bindings).iter_mut() { let mut it = el.item_mut(); _visitor.visit_type_binding(&mut it) };
+    for mut el in (_i . types).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_mut(&mut it) };
+    for mut el in (_i . bindings).iter_mut() { let mut it = el.item_mut(); _visitor.visit_type_binding_mut(&mut it) };
     // Skipped field _i . gt_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_captured<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgCaptured) {
-    _visitor.visit_pat(&mut _i . pat);
+pub fn visit_arg_captured_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgCaptured) {
+    _visitor.visit_pat_mut(&mut _i . pat);
     // Skipped field _i . colon_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_self<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgSelf) {
-    _visitor.visit_mutability(&mut _i . mutbl);
+pub fn visit_arg_self_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgSelf) {
+    _visitor.visit_mutability_mut(&mut _i . mutbl);
     // Skipped field _i . self_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arg_self_ref<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgSelfRef) {
+pub fn visit_arg_self_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgSelfRef) {
     // Skipped field _i . and_token;
     // Skipped field _i . self_token;
     // Skipped field _i . lifetime;
-    _visitor.visit_mutability(&mut _i . mutbl);
+    _visitor.visit_mutability_mut(&mut _i . mutbl);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_arm<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Arm) {
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    for mut el in (_i . pats).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat(&mut it) };
+pub fn visit_arm_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Arm) {
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    for mut el in (_i . pats).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat_mut(&mut it) };
     // Skipped field _i . if_token;
-    if let Some(ref mut it) = _i . guard { _visitor.visit_expr(&mut * it) };
+    if let Some(ref mut it) = _i . guard { _visitor.visit_expr_mut(&mut * it) };
     // Skipped field _i . rocket_token;
-    _visitor.visit_expr(&mut _i . body);
+    _visitor.visit_expr_mut(&mut _i . body);
     // Skipped field _i . comma;
 }
 
-pub fn walk_attr_style<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AttrStyle) {
+pub fn visit_attr_style_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AttrStyle) {
     use ::AttrStyle::*;
     match *_i {
         Outer => { }
@@ -436,21 +436,21 @@
     }
 }
 
-pub fn walk_attribute<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Attribute) {
-    _visitor.visit_attr_style(&mut _i . style);
+pub fn visit_attribute_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Attribute) {
+    _visitor.visit_attr_style_mut(&mut _i . style);
     // Skipped field _i . pound_token;
     // Skipped field _i . bracket_token;
-    _visitor.visit_path(&mut _i . path);
+    _visitor.visit_path_mut(&mut _i . path);
     // Skipped field _i . tts;
     // Skipped field _i . is_sugared_doc;
 }
 
-pub fn walk_bare_fn_arg<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnArg) {
+pub fn visit_bare_fn_arg_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnArg) {
     // Skipped field _i . name;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_bare_fn_arg_name<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnArgName) {
+pub fn visit_bare_fn_arg_name_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnArgName) {
     use ::BareFnArgName::*;
     match *_i {
         Named(ref mut _binding_0, ) => {
@@ -462,18 +462,18 @@
     }
 }
 
-pub fn walk_bare_fn_ty<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnTy) {
-    if let Some(ref mut it) = _i . lifetimes { _visitor.visit_bound_lifetimes(&mut * it) };
-    _visitor.visit_unsafety(&mut _i . unsafety);
-    if let Some(ref mut it) = _i . abi { _visitor.visit_abi(&mut * it) };
+pub fn visit_bare_fn_ty_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnTy) {
+    if let Some(ref mut it) = _i . lifetimes { _visitor.visit_bound_lifetimes_mut(&mut * it) };
+    _visitor.visit_unsafety_mut(&mut _i . unsafety);
+    if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(&mut * it) };
     // Skipped field _i . fn_token;
     // Skipped field _i . paren_token;
-    for mut el in (_i . inputs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_bare_fn_arg(&mut it) };
+    for mut el in (_i . inputs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_bare_fn_arg_mut(&mut it) };
     // Skipped field _i . variadic;
-    _visitor.visit_function_ret_ty(&mut _i . output);
+    _visitor.visit_function_ret_ty_mut(&mut _i . output);
 }
 
-pub fn walk_bin_op<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BinOp) {
+pub fn visit_bin_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BinOp) {
     use ::BinOp::*;
     match *_i {
         Add(ref mut _binding_0, ) => {
@@ -563,56 +563,56 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_binding_mode<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BindingMode) {
+pub fn visit_binding_mode_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BindingMode) {
     use ::BindingMode::*;
     match *_i {
         ByRef(ref mut _binding_0, ref mut _binding_1, ) => {
             // Skipped field * _binding_0;
-            _visitor.visit_mutability(&mut * _binding_1);
+            _visitor.visit_mutability_mut(&mut * _binding_1);
         }
         ByValue(ref mut _binding_0, ) => {
-            _visitor.visit_mutability(&mut * _binding_0);
+            _visitor.visit_mutability_mut(&mut * _binding_0);
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_block<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Block) {
+pub fn visit_block_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Block) {
     // Skipped field _i . brace_token;
-    for mut it in (_i . stmts).iter_mut() { _visitor.visit_stmt(&mut it) };
+    for mut it in (_i . stmts).iter_mut() { _visitor.visit_stmt_mut(&mut it) };
 }
 
-pub fn walk_body<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Body) {
+pub fn visit_body_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Body) {
     use ::Body::*;
     match *_i {
         Enum(ref mut _binding_0, ) => {
-            _visitor.visit_body_enum(&mut * _binding_0);
+            _visitor.visit_body_enum_mut(&mut * _binding_0);
         }
         Struct(ref mut _binding_0, ) => {
-            _visitor.visit_body_struct(&mut * _binding_0);
+            _visitor.visit_body_struct_mut(&mut * _binding_0);
         }
     }
 }
 
-pub fn walk_body_enum<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BodyEnum) {
+pub fn visit_body_enum_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BodyEnum) {
     // Skipped field _i . enum_token;
     // Skipped field _i . brace_token;
-    for mut el in (_i . variants).iter_mut() { let mut it = el.item_mut(); _visitor.visit_variant(&mut it) };
+    for mut el in (_i . variants).iter_mut() { let mut it = el.item_mut(); _visitor.visit_variant_mut(&mut it) };
 }
 
-pub fn walk_body_struct<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BodyStruct) {
-    _visitor.visit_variant_data(&mut _i . data);
+pub fn visit_body_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BodyStruct) {
+    _visitor.visit_variant_data_mut(&mut _i . data);
     // Skipped field _i . struct_token;
     // Skipped field _i . semi_token;
 }
 
-pub fn walk_bound_lifetimes<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BoundLifetimes) {
+pub fn visit_bound_lifetimes_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BoundLifetimes) {
     // Skipped field _i . for_token;
     // Skipped field _i . lt_token;
-    for mut el in (_i . lifetimes).iter_mut() { let mut it = el.item_mut(); _visitor.visit_lifetime_def(&mut it) };
+    for mut el in (_i . lifetimes).iter_mut() { let mut it = el.item_mut(); _visitor.visit_lifetime_def_mut(&mut it) };
     // Skipped field _i . gt_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_capture_by<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut CaptureBy) {
+pub fn visit_capture_by_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut CaptureBy) {
     use ::CaptureBy::*;
     match *_i {
         Value(ref mut _binding_0, ) => {
@@ -622,7 +622,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_constness<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Constness) {
+pub fn visit_constness_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Constness) {
     use ::Constness::*;
     match *_i {
         Const(ref mut _binding_0, ) => {
@@ -632,7 +632,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_defaultness<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Defaultness) {
+pub fn visit_defaultness_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Defaultness) {
     use ::Defaultness::*;
     match *_i {
         Default(ref mut _binding_0, ) => {
@@ -642,289 +642,289 @@
     }
 }
 
-pub fn walk_derive_input<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut DeriveInput) {
+pub fn visit_derive_input_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut DeriveInput) {
     // Skipped field _i . ident;
-    _visitor.visit_visibility(&mut _i . vis);
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    _visitor.visit_generics(&mut _i . generics);
-    _visitor.visit_body(&mut _i . body);
+    _visitor.visit_visibility_mut(&mut _i . vis);
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    _visitor.visit_generics_mut(&mut _i . generics);
+    _visitor.visit_body_mut(&mut _i . body);
 }
 
-pub fn walk_expr<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Expr) {
-    _visitor.visit_expr_kind(&mut _i . node);
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
+pub fn visit_expr_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Expr) {
+    _visitor.visit_expr_kind_mut(&mut _i . node);
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_addr_of<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAddrOf) {
+pub fn visit_expr_addr_of_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAddrOf) {
     // Skipped field _i . and_token;
-    _visitor.visit_mutability(&mut _i . mutbl);
-    _visitor.visit_expr(&mut _i . expr);
+    _visitor.visit_mutability_mut(&mut _i . mutbl);
+    _visitor.visit_expr_mut(&mut _i . expr);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_array<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprArray) {
-    for mut el in (_i . exprs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr(&mut it) };
+pub fn visit_expr_array_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprArray) {
+    for mut el in (_i . exprs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr_mut(&mut it) };
     // Skipped field _i . bracket_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_assign<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssign) {
-    _visitor.visit_expr(&mut _i . left);
-    _visitor.visit_expr(&mut _i . right);
+pub fn visit_expr_assign_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssign) {
+    _visitor.visit_expr_mut(&mut _i . left);
+    _visitor.visit_expr_mut(&mut _i . right);
     // Skipped field _i . eq_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_assign_op<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssignOp) {
-    _visitor.visit_bin_op(&mut _i . op);
-    _visitor.visit_expr(&mut _i . left);
-    _visitor.visit_expr(&mut _i . right);
+pub fn visit_expr_assign_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssignOp) {
+    _visitor.visit_bin_op_mut(&mut _i . op);
+    _visitor.visit_expr_mut(&mut _i . left);
+    _visitor.visit_expr_mut(&mut _i . right);
 }
 
-pub fn walk_expr_binary<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBinary) {
-    _visitor.visit_bin_op(&mut _i . op);
-    _visitor.visit_expr(&mut _i . left);
-    _visitor.visit_expr(&mut _i . right);
+pub fn visit_expr_binary_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBinary) {
+    _visitor.visit_bin_op_mut(&mut _i . op);
+    _visitor.visit_expr_mut(&mut _i . left);
+    _visitor.visit_expr_mut(&mut _i . right);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_block<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBlock) {
-    _visitor.visit_unsafety(&mut _i . unsafety);
-    _visitor.visit_block(&mut _i . block);
+pub fn visit_expr_block_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBlock) {
+    _visitor.visit_unsafety_mut(&mut _i . unsafety);
+    _visitor.visit_block_mut(&mut _i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_box<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBox) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_box_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBox) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . box_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_break<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBreak) {
+pub fn visit_expr_break_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBreak) {
     // Skipped field _i . label;
-    if let Some(ref mut it) = _i . expr { _visitor.visit_expr(&mut * it) };
+    if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(&mut * it) };
     // Skipped field _i . break_token;
 }
 
-pub fn walk_expr_call<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCall) {
-    _visitor.visit_expr(&mut _i . func);
-    for mut el in (_i . args).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr(&mut it) };
+pub fn visit_expr_call_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCall) {
+    _visitor.visit_expr_mut(&mut _i . func);
+    for mut el in (_i . args).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr_mut(&mut it) };
     // Skipped field _i . paren_token;
 }
 
-pub fn walk_expr_cast<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCast) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_cast_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCast) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . as_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_catch<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCatch) {
+pub fn visit_expr_catch_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCatch) {
     // Skipped field _i . do_token;
     // Skipped field _i . catch_token;
-    _visitor.visit_block(&mut _i . block);
+    _visitor.visit_block_mut(&mut _i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_closure<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprClosure) {
-    _visitor.visit_capture_by(&mut _i . capture);
-    _visitor.visit_fn_decl(&mut _i . decl);
-    _visitor.visit_expr(&mut _i . body);
+pub fn visit_expr_closure_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprClosure) {
+    _visitor.visit_capture_by_mut(&mut _i . capture);
+    _visitor.visit_fn_decl_mut(&mut _i . decl);
+    _visitor.visit_expr_mut(&mut _i . body);
     // Skipped field _i . or1_token;
     // Skipped field _i . or2_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_continue<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprContinue) {
+pub fn visit_expr_continue_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprContinue) {
     // Skipped field _i . label;
     // Skipped field _i . continue_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_field<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprField) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprField) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . field;
     // Skipped field _i . dot_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_for_loop<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprForLoop) {
-    _visitor.visit_pat(&mut _i . pat);
-    _visitor.visit_expr(&mut _i . expr);
-    _visitor.visit_block(&mut _i . body);
+pub fn visit_expr_for_loop_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprForLoop) {
+    _visitor.visit_pat_mut(&mut _i . pat);
+    _visitor.visit_expr_mut(&mut _i . expr);
+    _visitor.visit_block_mut(&mut _i . body);
     // Skipped field _i . label;
     // Skipped field _i . for_token;
     // Skipped field _i . colon_token;
     // Skipped field _i . in_token;
 }
 
-pub fn walk_expr_group<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprGroup) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprGroup) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . group_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_if<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIf) {
-    _visitor.visit_expr(&mut _i . cond);
-    _visitor.visit_block(&mut _i . if_true);
-    if let Some(ref mut it) = _i . if_false { _visitor.visit_expr(&mut * it) };
+pub fn visit_expr_if_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIf) {
+    _visitor.visit_expr_mut(&mut _i . cond);
+    _visitor.visit_block_mut(&mut _i . if_true);
+    if let Some(ref mut it) = _i . if_false { _visitor.visit_expr_mut(&mut * it) };
     // Skipped field _i . if_token;
     // Skipped field _i . else_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_if_let<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIfLet) {
-    _visitor.visit_pat(&mut _i . pat);
-    _visitor.visit_expr(&mut _i . expr);
-    _visitor.visit_block(&mut _i . if_true);
-    if let Some(ref mut it) = _i . if_false { _visitor.visit_expr(&mut * it) };
+pub fn visit_expr_if_let_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIfLet) {
+    _visitor.visit_pat_mut(&mut _i . pat);
+    _visitor.visit_expr_mut(&mut _i . expr);
+    _visitor.visit_block_mut(&mut _i . if_true);
+    if let Some(ref mut it) = _i . if_false { _visitor.visit_expr_mut(&mut * it) };
     // Skipped field _i . if_token;
     // Skipped field _i . let_token;
     // Skipped field _i . eq_token;
     // Skipped field _i . else_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_in_place<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprInPlace) {
-    _visitor.visit_expr(&mut _i . place);
-    _visitor.visit_in_place_kind(&mut _i . kind);
-    _visitor.visit_expr(&mut _i . value);
+pub fn visit_expr_in_place_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprInPlace) {
+    _visitor.visit_expr_mut(&mut _i . place);
+    _visitor.visit_in_place_kind_mut(&mut _i . kind);
+    _visitor.visit_expr_mut(&mut _i . value);
 }
 
-pub fn walk_expr_index<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIndex) {
-    _visitor.visit_expr(&mut _i . expr);
-    _visitor.visit_expr(&mut _i . index);
+pub fn visit_expr_index_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIndex) {
+    _visitor.visit_expr_mut(&mut _i . expr);
+    _visitor.visit_expr_mut(&mut _i . index);
     // Skipped field _i . bracket_token;
 }
 
-pub fn walk_expr_kind<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprKind) {
+pub fn visit_expr_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprKind) {
     use ::ExprKind::*;
     match *_i {
         Box(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_box(&mut * _binding_0));
+            full!(_visitor.visit_expr_box_mut(&mut * _binding_0));
         }
         InPlace(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_in_place(&mut * _binding_0));
+            full!(_visitor.visit_expr_in_place_mut(&mut * _binding_0));
         }
         Array(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_array(&mut * _binding_0));
+            full!(_visitor.visit_expr_array_mut(&mut * _binding_0));
         }
         Call(ref mut _binding_0, ) => {
-            _visitor.visit_expr_call(&mut * _binding_0);
+            _visitor.visit_expr_call_mut(&mut * _binding_0);
         }
         MethodCall(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_method_call(&mut * _binding_0));
+            full!(_visitor.visit_expr_method_call_mut(&mut * _binding_0));
         }
         Tup(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_tup(&mut * _binding_0));
+            full!(_visitor.visit_expr_tup_mut(&mut * _binding_0));
         }
         Binary(ref mut _binding_0, ) => {
-            _visitor.visit_expr_binary(&mut * _binding_0);
+            _visitor.visit_expr_binary_mut(&mut * _binding_0);
         }
         Unary(ref mut _binding_0, ) => {
-            _visitor.visit_expr_unary(&mut * _binding_0);
+            _visitor.visit_expr_unary_mut(&mut * _binding_0);
         }
         Lit(ref mut _binding_0, ) => {
             // Skipped field * _binding_0;
         }
         Cast(ref mut _binding_0, ) => {
-            _visitor.visit_expr_cast(&mut * _binding_0);
+            _visitor.visit_expr_cast_mut(&mut * _binding_0);
         }
         Type(ref mut _binding_0, ) => {
-            _visitor.visit_expr_type(&mut * _binding_0);
+            _visitor.visit_expr_type_mut(&mut * _binding_0);
         }
         If(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_if(&mut * _binding_0));
+            full!(_visitor.visit_expr_if_mut(&mut * _binding_0));
         }
         IfLet(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_if_let(&mut * _binding_0));
+            full!(_visitor.visit_expr_if_let_mut(&mut * _binding_0));
         }
         While(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_while(&mut * _binding_0));
+            full!(_visitor.visit_expr_while_mut(&mut * _binding_0));
         }
         WhileLet(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_while_let(&mut * _binding_0));
+            full!(_visitor.visit_expr_while_let_mut(&mut * _binding_0));
         }
         ForLoop(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_for_loop(&mut * _binding_0));
+            full!(_visitor.visit_expr_for_loop_mut(&mut * _binding_0));
         }
         Loop(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_loop(&mut * _binding_0));
+            full!(_visitor.visit_expr_loop_mut(&mut * _binding_0));
         }
         Match(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_match(&mut * _binding_0));
+            full!(_visitor.visit_expr_match_mut(&mut * _binding_0));
         }
         Closure(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_closure(&mut * _binding_0));
+            full!(_visitor.visit_expr_closure_mut(&mut * _binding_0));
         }
         Block(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_block(&mut * _binding_0));
+            full!(_visitor.visit_expr_block_mut(&mut * _binding_0));
         }
         Assign(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_assign(&mut * _binding_0));
+            full!(_visitor.visit_expr_assign_mut(&mut * _binding_0));
         }
         AssignOp(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_assign_op(&mut * _binding_0));
+            full!(_visitor.visit_expr_assign_op_mut(&mut * _binding_0));
         }
         Field(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_field(&mut * _binding_0));
+            full!(_visitor.visit_expr_field_mut(&mut * _binding_0));
         }
         TupField(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_tup_field(&mut * _binding_0));
+            full!(_visitor.visit_expr_tup_field_mut(&mut * _binding_0));
         }
         Index(ref mut _binding_0, ) => {
-            _visitor.visit_expr_index(&mut * _binding_0);
+            _visitor.visit_expr_index_mut(&mut * _binding_0);
         }
         Range(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_range(&mut * _binding_0));
+            full!(_visitor.visit_expr_range_mut(&mut * _binding_0));
         }
         Path(ref mut _binding_0, ) => {
-            _visitor.visit_expr_path(&mut * _binding_0);
+            _visitor.visit_expr_path_mut(&mut * _binding_0);
         }
         AddrOf(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_addr_of(&mut * _binding_0));
+            full!(_visitor.visit_expr_addr_of_mut(&mut * _binding_0));
         }
         Break(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_break(&mut * _binding_0));
+            full!(_visitor.visit_expr_break_mut(&mut * _binding_0));
         }
         Continue(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_continue(&mut * _binding_0));
+            full!(_visitor.visit_expr_continue_mut(&mut * _binding_0));
         }
         Ret(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_ret(&mut * _binding_0));
+            full!(_visitor.visit_expr_ret_mut(&mut * _binding_0));
         }
         Mac(ref mut _binding_0, ) => {
-            _visitor.visit_mac(&mut * _binding_0);
+            _visitor.visit_mac_mut(&mut * _binding_0);
         }
         Struct(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_struct(&mut * _binding_0));
+            full!(_visitor.visit_expr_struct_mut(&mut * _binding_0));
         }
         Repeat(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_repeat(&mut * _binding_0));
+            full!(_visitor.visit_expr_repeat_mut(&mut * _binding_0));
         }
         Paren(ref mut _binding_0, ) => {
-            _visitor.visit_expr_paren(&mut * _binding_0);
+            _visitor.visit_expr_paren_mut(&mut * _binding_0);
         }
         Group(ref mut _binding_0, ) => {
-            _visitor.visit_expr_group(&mut * _binding_0);
+            _visitor.visit_expr_group_mut(&mut * _binding_0);
         }
         Try(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_try(&mut * _binding_0));
+            full!(_visitor.visit_expr_try_mut(&mut * _binding_0));
         }
         Catch(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_catch(&mut * _binding_0));
+            full!(_visitor.visit_expr_catch_mut(&mut * _binding_0));
         }
         Yield(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_yield(&mut * _binding_0));
+            full!(_visitor.visit_expr_yield_mut(&mut * _binding_0));
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_loop<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprLoop) {
-    _visitor.visit_block(&mut _i . body);
+pub fn visit_expr_loop_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprLoop) {
+    _visitor.visit_block_mut(&mut _i . body);
     // Skipped field _i . label;
     // Skipped field _i . loop_token;
     // Skipped field _i . colon_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_match<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMatch) {
+pub fn visit_expr_match_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMatch) {
     // Skipped field _i . match_token;
     // Skipped field _i . brace_token;
-    _visitor.visit_expr(&mut _i . expr);
-    for mut it in (_i . arms).iter_mut() { _visitor.visit_arm(&mut it) };
+    _visitor.visit_expr_mut(&mut _i . expr);
+    for mut it in (_i . arms).iter_mut() { _visitor.visit_arm_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_method_call<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMethodCall) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_method_call_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMethodCall) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . method;
-    for mut el in (_i . typarams).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty(&mut it) };
-    for mut el in (_i . args).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr(&mut it) };
+    for mut el in (_i . typarams).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_mut(&mut it) };
+    for mut el in (_i . args).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr_mut(&mut it) };
     // Skipped field _i . paren_token;
     // Skipped field _i . dot_token;
     // Skipped field _i . lt_token;
@@ -932,82 +932,82 @@
     // Skipped field _i . gt_token;
 }
 
-pub fn walk_expr_paren<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprParen) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprParen) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . paren_token;
 }
 
-pub fn walk_expr_path<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprPath) {
-    if let Some(ref mut it) = _i . qself { _visitor.visit_qself(&mut * it) };
-    _visitor.visit_path(&mut _i . path);
+pub fn visit_expr_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprPath) {
+    if let Some(ref mut it) = _i . qself { _visitor.visit_qself_mut(&mut * it) };
+    _visitor.visit_path_mut(&mut _i . path);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_range<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRange) {
-    if let Some(ref mut it) = _i . from { _visitor.visit_expr(&mut * it) };
-    if let Some(ref mut it) = _i . to { _visitor.visit_expr(&mut * it) };
-    _visitor.visit_range_limits(&mut _i . limits);
+pub fn visit_expr_range_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRange) {
+    if let Some(ref mut it) = _i . from { _visitor.visit_expr_mut(&mut * it) };
+    if let Some(ref mut it) = _i . to { _visitor.visit_expr_mut(&mut * it) };
+    _visitor.visit_range_limits_mut(&mut _i . limits);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_repeat<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRepeat) {
+pub fn visit_expr_repeat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRepeat) {
     // Skipped field _i . bracket_token;
     // Skipped field _i . semi_token;
-    _visitor.visit_expr(&mut _i . expr);
-    _visitor.visit_expr(&mut _i . amt);
+    _visitor.visit_expr_mut(&mut _i . expr);
+    _visitor.visit_expr_mut(&mut _i . amt);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_ret<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRet) {
-    if let Some(ref mut it) = _i . expr { _visitor.visit_expr(&mut * it) };
+pub fn visit_expr_ret_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRet) {
+    if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(&mut * it) };
     // Skipped field _i . return_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_struct<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprStruct) {
-    _visitor.visit_path(&mut _i . path);
-    for mut el in (_i . fields).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field_value(&mut it) };
-    if let Some(ref mut it) = _i . rest { _visitor.visit_expr(&mut * it) };
+pub fn visit_expr_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprStruct) {
+    _visitor.visit_path_mut(&mut _i . path);
+    for mut el in (_i . fields).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field_value_mut(&mut it) };
+    if let Some(ref mut it) = _i . rest { _visitor.visit_expr_mut(&mut * it) };
     // Skipped field _i . dot2_token;
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_try<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTry) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_try_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTry) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . question_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_tup<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTup) {
-    for mut el in (_i . args).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr(&mut it) };
+pub fn visit_expr_tup_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTup) {
+    for mut el in (_i . args).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr_mut(&mut it) };
     // Skipped field _i . paren_token;
     // Skipped field _i . lone_comma;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_tup_field<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTupField) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_tup_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTupField) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . field;
     // Skipped field _i . dot_token;
 }
 
-pub fn walk_expr_type<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprType) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprType) {
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . colon_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_expr_unary<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprUnary) {
-    _visitor.visit_un_op(&mut _i . op);
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_expr_unary_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprUnary) {
+    _visitor.visit_un_op_mut(&mut _i . op);
+    _visitor.visit_expr_mut(&mut _i . expr);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_while<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhile) {
-    _visitor.visit_expr(&mut _i . cond);
-    _visitor.visit_block(&mut _i . body);
+pub fn visit_expr_while_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhile) {
+    _visitor.visit_expr_mut(&mut _i . cond);
+    _visitor.visit_block_mut(&mut _i . body);
     // Skipped field _i . label;
     // Skipped field _i . colon_token;
     // Skipped field _i . while_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_while_let<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhileLet) {
-    _visitor.visit_pat(&mut _i . pat);
-    _visitor.visit_expr(&mut _i . expr);
-    _visitor.visit_block(&mut _i . body);
+pub fn visit_expr_while_let_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhileLet) {
+    _visitor.visit_pat_mut(&mut _i . pat);
+    _visitor.visit_expr_mut(&mut _i . expr);
+    _visitor.visit_block_mut(&mut _i . body);
     // Skipped field _i . label;
     // Skipped field _i . colon_token;
     // Skipped field _i . while_token;
@@ -1015,172 +1015,172 @@
     // Skipped field _i . eq_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_expr_yield<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprYield) {
+pub fn visit_expr_yield_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprYield) {
     // Skipped field _i . yield_token;
-    if let Some(ref mut it) = _i . expr { _visitor.visit_expr(&mut * it) };
+    if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(&mut * it) };
 }
 
-pub fn walk_field<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Field) {
+pub fn visit_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Field) {
     // Skipped field _i . ident;
-    _visitor.visit_visibility(&mut _i . vis);
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_visibility_mut(&mut _i . vis);
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . colon_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_field_pat<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldPat) {
+pub fn visit_field_pat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldPat) {
     // Skipped field _i . ident;
-    _visitor.visit_pat(&mut _i . pat);
+    _visitor.visit_pat_mut(&mut _i . pat);
     // Skipped field _i . is_shorthand;
     // Skipped field _i . colon_token;
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_field_value<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldValue) {
+pub fn visit_field_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldValue) {
     // Skipped field _i . ident;
-    _visitor.visit_expr(&mut _i . expr);
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . is_shorthand;
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     // Skipped field _i . colon_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_file<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut File) {
+pub fn visit_file_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut File) {
     // Skipped field _i . shebang;
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    for mut it in (_i . items).iter_mut() { _visitor.visit_item(&mut it) };
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    for mut it in (_i . items).iter_mut() { _visitor.visit_item_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_fn_arg<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FnArg) {
+pub fn visit_fn_arg_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FnArg) {
     use ::FnArg::*;
     match *_i {
         SelfRef(ref mut _binding_0, ) => {
-            _visitor.visit_arg_self_ref(&mut * _binding_0);
+            _visitor.visit_arg_self_ref_mut(&mut * _binding_0);
         }
         SelfValue(ref mut _binding_0, ) => {
-            _visitor.visit_arg_self(&mut * _binding_0);
+            _visitor.visit_arg_self_mut(&mut * _binding_0);
         }
         Captured(ref mut _binding_0, ) => {
-            _visitor.visit_arg_captured(&mut * _binding_0);
+            _visitor.visit_arg_captured_mut(&mut * _binding_0);
         }
         Ignored(ref mut _binding_0, ) => {
-            _visitor.visit_ty(&mut * _binding_0);
+            _visitor.visit_ty_mut(&mut * _binding_0);
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_fn_decl<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FnDecl) {
+pub fn visit_fn_decl_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FnDecl) {
     // Skipped field _i . fn_token;
     // Skipped field _i . paren_token;
-    for mut el in (_i . inputs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_fn_arg(&mut it) };
-    _visitor.visit_function_ret_ty(&mut _i . output);
-    _visitor.visit_generics(&mut _i . generics);
+    for mut el in (_i . inputs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_fn_arg_mut(&mut it) };
+    _visitor.visit_function_ret_ty_mut(&mut _i . output);
+    _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . variadic;
     // Skipped field _i . dot_tokens;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItem) {
+pub fn visit_foreign_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItem) {
     // Skipped field _i . ident;
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    _visitor.visit_foreign_item_kind(&mut _i . node);
-    _visitor.visit_visibility(&mut _i . vis);
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    _visitor.visit_foreign_item_kind_mut(&mut _i . node);
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_fn<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemFn) {
-    _visitor.visit_fn_decl(&mut _i . decl);
+pub fn visit_foreign_item_fn_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemFn) {
+    _visitor.visit_fn_decl_mut(&mut _i . decl);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_kind<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemKind) {
+pub fn visit_foreign_item_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemKind) {
     use ::ForeignItemKind::*;
     match *_i {
         Fn(ref mut _binding_0, ) => {
-            _visitor.visit_foreign_item_fn(&mut * _binding_0);
+            _visitor.visit_foreign_item_fn_mut(&mut * _binding_0);
         }
         Static(ref mut _binding_0, ) => {
-            _visitor.visit_foreign_item_static(&mut * _binding_0);
+            _visitor.visit_foreign_item_static_mut(&mut * _binding_0);
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_foreign_item_static<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemStatic) {
+pub fn visit_foreign_item_static_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemStatic) {
     // Skipped field _i . static_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . colon_token;
-    _visitor.visit_mutability(&mut _i . mutbl);
+    _visitor.visit_mutability_mut(&mut _i . mutbl);
 }
 
-pub fn walk_function_ret_ty<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FunctionRetTy) {
+pub fn visit_function_ret_ty_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FunctionRetTy) {
     use ::FunctionRetTy::*;
     match *_i {
         Default => { }
         Ty(ref mut _binding_0, ref mut _binding_1, ) => {
-            _visitor.visit_ty(&mut * _binding_0);
+            _visitor.visit_ty_mut(&mut * _binding_0);
             // Skipped field * _binding_1;
         }
     }
 }
 
-pub fn walk_generics<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Generics) {
+pub fn visit_generics_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Generics) {
     // Skipped field _i . lt_token;
     // Skipped field _i . gt_token;
-    for mut el in (_i . lifetimes).iter_mut() { let mut it = el.item_mut(); _visitor.visit_lifetime_def(&mut it) };
-    for mut el in (_i . ty_params).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param(&mut it) };
-    _visitor.visit_where_clause(&mut _i . where_clause);
+    for mut el in (_i . lifetimes).iter_mut() { let mut it = el.item_mut(); _visitor.visit_lifetime_def_mut(&mut it) };
+    for mut el in (_i . ty_params).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_mut(&mut it) };
+    _visitor.visit_where_clause_mut(&mut _i . where_clause);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItem) {
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    _visitor.visit_impl_item_kind(&mut _i . node);
+pub fn visit_impl_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItem) {
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    _visitor.visit_impl_item_kind_mut(&mut _i . node);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_const<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemConst) {
-    _visitor.visit_visibility(&mut _i . vis);
-    _visitor.visit_defaultness(&mut _i . defaultness);
+pub fn visit_impl_item_const_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemConst) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
+    _visitor.visit_defaultness_mut(&mut _i . defaultness);
     // Skipped field _i . const_token;
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . eq_token;
-    _visitor.visit_expr(&mut _i . expr);
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_kind<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemKind) {
+pub fn visit_impl_item_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemKind) {
     use ::ImplItemKind::*;
     match *_i {
         Const(ref mut _binding_0, ) => {
-            _visitor.visit_impl_item_const(&mut * _binding_0);
+            _visitor.visit_impl_item_const_mut(&mut * _binding_0);
         }
         Method(ref mut _binding_0, ) => {
-            _visitor.visit_impl_item_method(&mut * _binding_0);
+            _visitor.visit_impl_item_method_mut(&mut * _binding_0);
         }
         Type(ref mut _binding_0, ) => {
-            _visitor.visit_impl_item_type(&mut * _binding_0);
+            _visitor.visit_impl_item_type_mut(&mut * _binding_0);
         }
         Macro(ref mut _binding_0, ) => {
-            _visitor.visit_mac(&mut * _binding_0);
+            _visitor.visit_mac_mut(&mut * _binding_0);
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_method<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemMethod) {
-    _visitor.visit_visibility(&mut _i . vis);
-    _visitor.visit_defaultness(&mut _i . defaultness);
-    _visitor.visit_method_sig(&mut _i . sig);
-    _visitor.visit_block(&mut _i . block);
+pub fn visit_impl_item_method_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemMethod) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
+    _visitor.visit_defaultness_mut(&mut _i . defaultness);
+    _visitor.visit_method_sig_mut(&mut _i . sig);
+    _visitor.visit_block_mut(&mut _i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_item_type<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemType) {
-    _visitor.visit_visibility(&mut _i . vis);
-    _visitor.visit_defaultness(&mut _i . defaultness);
+pub fn visit_impl_item_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemType) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
+    _visitor.visit_defaultness_mut(&mut _i . defaultness);
     // Skipped field _i . type_token;
     // Skipped field _i . ident;
     // Skipped field _i . eq_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_impl_polarity<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplPolarity) {
+pub fn visit_impl_polarity_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplPolarity) {
     use ::ImplPolarity::*;
     match *_i {
         Positive => { }
@@ -1190,7 +1190,7 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_in_place_kind<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut InPlaceKind) {
+pub fn visit_in_place_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut InPlaceKind) {
     use ::InPlaceKind::*;
     match *_i {
         Arrow(ref mut _binding_0, ) => {
@@ -1202,42 +1202,42 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Item) {
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    _visitor.visit_item_kind(&mut _i . node);
+pub fn visit_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Item) {
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    _visitor.visit_item_kind_mut(&mut _i . node);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_const<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemConst) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_const_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemConst) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . const_token;
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . eq_token;
-    _visitor.visit_expr(&mut _i . expr);
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_default_impl<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemDefaultImpl) {
-    _visitor.visit_unsafety(&mut _i . unsafety);
+pub fn visit_item_default_impl_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemDefaultImpl) {
+    _visitor.visit_unsafety_mut(&mut _i . unsafety);
     // Skipped field _i . impl_token;
-    _visitor.visit_path(&mut _i . path);
+    _visitor.visit_path_mut(&mut _i . path);
     // Skipped field _i . for_token;
     // Skipped field _i . dot2_token;
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_enum<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemEnum) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_enum_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemEnum) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . enum_token;
     // Skipped field _i . ident;
-    _visitor.visit_generics(&mut _i . generics);
+    _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . brace_token;
-    for mut el in (_i . variants).iter_mut() { let mut it = el.item_mut(); _visitor.visit_variant(&mut it) };
+    for mut el in (_i . variants).iter_mut() { let mut it = el.item_mut(); _visitor.visit_variant_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_extern_crate<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemExternCrate) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_extern_crate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemExternCrate) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . extern_token;
     // Skipped field _i . crate_token;
     // Skipped field _i . ident;
@@ -1245,176 +1245,176 @@
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_fn<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemFn) {
-    _visitor.visit_visibility(&mut _i . vis);
-    _visitor.visit_constness(&mut _i . constness);
-    _visitor.visit_unsafety(&mut _i . unsafety);
-    if let Some(ref mut it) = _i . abi { _visitor.visit_abi(&mut * it) };
-    _visitor.visit_fn_decl(&mut _i . decl);
+pub fn visit_item_fn_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemFn) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
+    _visitor.visit_constness_mut(&mut _i . constness);
+    _visitor.visit_unsafety_mut(&mut _i . unsafety);
+    if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(&mut * it) };
+    _visitor.visit_fn_decl_mut(&mut _i . decl);
     // Skipped field _i . ident;
-    _visitor.visit_block(&mut _i . block);
+    _visitor.visit_block_mut(&mut _i . block);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_foreign_mod<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemForeignMod) {
-    _visitor.visit_abi(&mut _i . abi);
+pub fn visit_item_foreign_mod_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemForeignMod) {
+    _visitor.visit_abi_mut(&mut _i . abi);
     // Skipped field _i . brace_token;
-    for mut it in (_i . items).iter_mut() { _visitor.visit_foreign_item(&mut it) };
+    for mut it in (_i . items).iter_mut() { _visitor.visit_foreign_item_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_impl<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemImpl) {
-    _visitor.visit_defaultness(&mut _i . defaultness);
-    _visitor.visit_unsafety(&mut _i . unsafety);
+pub fn visit_item_impl_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemImpl) {
+    _visitor.visit_defaultness_mut(&mut _i . defaultness);
+    _visitor.visit_unsafety_mut(&mut _i . unsafety);
     // Skipped field _i . impl_token;
-    _visitor.visit_generics(&mut _i . generics);
+    _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . trait_;
-    _visitor.visit_ty(&mut _i . self_ty);
+    _visitor.visit_ty_mut(&mut _i . self_ty);
     // Skipped field _i . brace_token;
-    for mut it in (_i . items).iter_mut() { _visitor.visit_impl_item(&mut it) };
+    for mut it in (_i . items).iter_mut() { _visitor.visit_impl_item_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_kind<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemKind) {
+pub fn visit_item_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemKind) {
     use ::ItemKind::*;
     match *_i {
         ExternCrate(ref mut _binding_0, ) => {
-            _visitor.visit_item_extern_crate(&mut * _binding_0);
+            _visitor.visit_item_extern_crate_mut(&mut * _binding_0);
         }
         Use(ref mut _binding_0, ) => {
-            _visitor.visit_item_use(&mut * _binding_0);
+            _visitor.visit_item_use_mut(&mut * _binding_0);
         }
         Static(ref mut _binding_0, ) => {
-            _visitor.visit_item_static(&mut * _binding_0);
+            _visitor.visit_item_static_mut(&mut * _binding_0);
         }
         Const(ref mut _binding_0, ) => {
-            _visitor.visit_item_const(&mut * _binding_0);
+            _visitor.visit_item_const_mut(&mut * _binding_0);
         }
         Fn(ref mut _binding_0, ) => {
-            _visitor.visit_item_fn(&mut * _binding_0);
+            _visitor.visit_item_fn_mut(&mut * _binding_0);
         }
         Mod(ref mut _binding_0, ) => {
-            _visitor.visit_item_mod(&mut * _binding_0);
+            _visitor.visit_item_mod_mut(&mut * _binding_0);
         }
         ForeignMod(ref mut _binding_0, ) => {
-            _visitor.visit_item_foreign_mod(&mut * _binding_0);
+            _visitor.visit_item_foreign_mod_mut(&mut * _binding_0);
         }
         Ty(ref mut _binding_0, ) => {
-            _visitor.visit_item_ty(&mut * _binding_0);
+            _visitor.visit_item_ty_mut(&mut * _binding_0);
         }
         Enum(ref mut _binding_0, ) => {
-            _visitor.visit_item_enum(&mut * _binding_0);
+            _visitor.visit_item_enum_mut(&mut * _binding_0);
         }
         Struct(ref mut _binding_0, ) => {
-            _visitor.visit_item_struct(&mut * _binding_0);
+            _visitor.visit_item_struct_mut(&mut * _binding_0);
         }
         Union(ref mut _binding_0, ) => {
-            _visitor.visit_item_union(&mut * _binding_0);
+            _visitor.visit_item_union_mut(&mut * _binding_0);
         }
         Trait(ref mut _binding_0, ) => {
-            _visitor.visit_item_trait(&mut * _binding_0);
+            _visitor.visit_item_trait_mut(&mut * _binding_0);
         }
         DefaultImpl(ref mut _binding_0, ) => {
-            _visitor.visit_item_default_impl(&mut * _binding_0);
+            _visitor.visit_item_default_impl_mut(&mut * _binding_0);
         }
         Impl(ref mut _binding_0, ) => {
-            _visitor.visit_item_impl(&mut * _binding_0);
+            _visitor.visit_item_impl_mut(&mut * _binding_0);
         }
         Mac(ref mut _binding_0, ) => {
-            _visitor.visit_mac(&mut * _binding_0);
+            _visitor.visit_mac_mut(&mut * _binding_0);
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_mod<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemMod) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_mod_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemMod) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . mod_token;
     // Skipped field _i . ident;
     // Skipped field _i . content;
     // Skipped field _i . semi;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_static<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemStatic) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_static_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemStatic) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . static_token;
-    _visitor.visit_mutability(&mut _i . mutbl);
+    _visitor.visit_mutability_mut(&mut _i . mutbl);
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . eq_token;
-    _visitor.visit_expr(&mut _i . expr);
+    _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_struct<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemStruct) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemStruct) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . struct_token;
     // Skipped field _i . ident;
-    _visitor.visit_generics(&mut _i . generics);
-    _visitor.visit_variant_data(&mut _i . data);
+    _visitor.visit_generics_mut(&mut _i . generics);
+    _visitor.visit_variant_data_mut(&mut _i . data);
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_trait<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemTrait) {
-    _visitor.visit_visibility(&mut _i . vis);
-    _visitor.visit_unsafety(&mut _i . unsafety);
+pub fn visit_item_trait_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemTrait) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
+    _visitor.visit_unsafety_mut(&mut _i . unsafety);
     // Skipped field _i . trait_token;
     // Skipped field _i . ident;
-    _visitor.visit_generics(&mut _i . generics);
+    _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . colon_token;
-    for mut el in (_i . supertraits).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound(&mut it) };
+    for mut el in (_i . supertraits).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound_mut(&mut it) };
     // Skipped field _i . brace_token;
-    for mut it in (_i . items).iter_mut() { _visitor.visit_trait_item(&mut it) };
+    for mut it in (_i . items).iter_mut() { _visitor.visit_trait_item_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_ty<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemTy) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_ty_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemTy) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . type_token;
     // Skipped field _i . ident;
-    _visitor.visit_generics(&mut _i . generics);
+    _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . eq_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_union<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemUnion) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_union_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemUnion) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . union_token;
     // Skipped field _i . ident;
-    _visitor.visit_generics(&mut _i . generics);
-    _visitor.visit_variant_data(&mut _i . data);
+    _visitor.visit_generics_mut(&mut _i . generics);
+    _visitor.visit_variant_data_mut(&mut _i . data);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_item_use<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemUse) {
-    _visitor.visit_visibility(&mut _i . vis);
+pub fn visit_item_use_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemUse) {
+    _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . use_token;
-    _visitor.visit_view_path(&mut _i . path);
+    _visitor.visit_view_path_mut(&mut _i . path);
     // Skipped field _i . semi_token;
 }
 
-pub fn walk_lifetime_def<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut LifetimeDef) {
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
+pub fn visit_lifetime_def_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut LifetimeDef) {
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     // Skipped field _i . lifetime;
     // Skipped field _i . colon_token;
     // Skipped field _i . bounds;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_local<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Local) {
+pub fn visit_local_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Local) {
     // Skipped field _i . let_token;
     // Skipped field _i . colon_token;
     // Skipped field _i . eq_token;
     // Skipped field _i . semi_token;
-    _visitor.visit_pat(&mut _i . pat);
-    if let Some(ref mut it) = _i . ty { _visitor.visit_ty(&mut * it) };
-    if let Some(ref mut it) = _i . init { _visitor.visit_expr(&mut * it) };
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
+    _visitor.visit_pat_mut(&mut _i . pat);
+    if let Some(ref mut it) = _i . ty { _visitor.visit_ty_mut(&mut * it) };
+    if let Some(ref mut it) = _i . init { _visitor.visit_expr_mut(&mut * it) };
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
 }
 
-pub fn walk_mac<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Mac) {
-    _visitor.visit_path(&mut _i . path);
+pub fn visit_mac_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Mac) {
+    _visitor.visit_path_mut(&mut _i . path);
     // Skipped field _i . bang_token;
     // Skipped field _i . ident;
     // Skipped field _i . tokens;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_mac_stmt_style<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MacStmtStyle) {
+pub fn visit_mac_stmt_style_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MacStmtStyle) {
     use ::MacStmtStyle::*;
     match *_i {
         Semicolon(ref mut _binding_0, ) => {
@@ -1425,47 +1425,47 @@
     }
 }
 
-pub fn walk_meta_item<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItem) {
+pub fn visit_meta_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItem) {
     use ::MetaItem::*;
     match *_i {
         Term(ref mut _binding_0, ) => {
             // Skipped field * _binding_0;
         }
         List(ref mut _binding_0, ) => {
-            _visitor.visit_meta_item_list(&mut * _binding_0);
+            _visitor.visit_meta_item_list_mut(&mut * _binding_0);
         }
         NameValue(ref mut _binding_0, ) => {
-            _visitor.visit_meta_name_value(&mut * _binding_0);
+            _visitor.visit_meta_name_value_mut(&mut * _binding_0);
         }
     }
 }
 
-pub fn walk_meta_item_list<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItemList) {
+pub fn visit_meta_item_list_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItemList) {
     // Skipped field _i . ident;
     // Skipped field _i . paren_token;
-    for mut el in (_i . nested).iter_mut() { let mut it = el.item_mut(); _visitor.visit_nested_meta_item(&mut it) };
+    for mut el in (_i . nested).iter_mut() { let mut it = el.item_mut(); _visitor.visit_nested_meta_item_mut(&mut it) };
 }
 
-pub fn walk_meta_name_value<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaNameValue) {
+pub fn visit_meta_name_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaNameValue) {
     // Skipped field _i . ident;
     // Skipped field _i . eq_token;
     // Skipped field _i . lit;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_method_sig<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MethodSig) {
-    _visitor.visit_constness(&mut _i . constness);
-    _visitor.visit_unsafety(&mut _i . unsafety);
-    if let Some(ref mut it) = _i . abi { _visitor.visit_abi(&mut * it) };
+pub fn visit_method_sig_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MethodSig) {
+    _visitor.visit_constness_mut(&mut _i . constness);
+    _visitor.visit_unsafety_mut(&mut _i . unsafety);
+    if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(&mut * it) };
     // Skipped field _i . ident;
-    _visitor.visit_fn_decl(&mut _i . decl);
+    _visitor.visit_fn_decl_mut(&mut _i . decl);
 }
 
-pub fn walk_mut_ty<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MutTy) {
-    _visitor.visit_ty(&mut _i . ty);
-    _visitor.visit_mutability(&mut _i . mutability);
+pub fn visit_mut_ty_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MutTy) {
+    _visitor.visit_ty_mut(&mut _i . ty);
+    _visitor.visit_mutability_mut(&mut _i . mutability);
 }
 
-pub fn walk_mutability<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Mutability) {
+pub fn visit_mutability_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Mutability) {
     use ::Mutability::*;
     match *_i {
         Mutable(ref mut _binding_0, ) => {
@@ -1475,11 +1475,11 @@
     }
 }
 
-pub fn walk_nested_meta_item<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut NestedMetaItem) {
+pub fn visit_nested_meta_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut NestedMetaItem) {
     use ::NestedMetaItem::*;
     match *_i {
         MetaItem(ref mut _binding_0, ) => {
-            _visitor.visit_meta_item(&mut * _binding_0);
+            _visitor.visit_meta_item_mut(&mut * _binding_0);
         }
         Literal(ref mut _binding_0, ) => {
             // Skipped field * _binding_0;
@@ -1487,182 +1487,182 @@
     }
 }
 
-pub fn walk_parenthesized_parameter_data<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ParenthesizedParameterData) {
+pub fn visit_parenthesized_parameter_data_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ParenthesizedParameterData) {
     // Skipped field _i . paren_token;
-    for mut el in (_i . inputs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty(&mut it) };
-    _visitor.visit_function_ret_ty(&mut _i . output);
+    for mut el in (_i . inputs).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_mut(&mut it) };
+    _visitor.visit_function_ret_ty_mut(&mut _i . output);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Pat) {
+pub fn visit_pat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Pat) {
     use ::Pat::*;
     match *_i {
         Wild(ref mut _binding_0, ) => {
-            _visitor.visit_pat_wild(&mut * _binding_0);
+            _visitor.visit_pat_wild_mut(&mut * _binding_0);
         }
         Ident(ref mut _binding_0, ) => {
-            _visitor.visit_pat_ident(&mut * _binding_0);
+            _visitor.visit_pat_ident_mut(&mut * _binding_0);
         }
         Struct(ref mut _binding_0, ) => {
-            _visitor.visit_pat_struct(&mut * _binding_0);
+            _visitor.visit_pat_struct_mut(&mut * _binding_0);
         }
         TupleStruct(ref mut _binding_0, ) => {
-            _visitor.visit_pat_tuple_struct(&mut * _binding_0);
+            _visitor.visit_pat_tuple_struct_mut(&mut * _binding_0);
         }
         Path(ref mut _binding_0, ) => {
-            _visitor.visit_pat_path(&mut * _binding_0);
+            _visitor.visit_pat_path_mut(&mut * _binding_0);
         }
         Tuple(ref mut _binding_0, ) => {
-            _visitor.visit_pat_tuple(&mut * _binding_0);
+            _visitor.visit_pat_tuple_mut(&mut * _binding_0);
         }
         Box(ref mut _binding_0, ) => {
-            _visitor.visit_pat_box(&mut * _binding_0);
+            _visitor.visit_pat_box_mut(&mut * _binding_0);
         }
         Ref(ref mut _binding_0, ) => {
-            _visitor.visit_pat_ref(&mut * _binding_0);
+            _visitor.visit_pat_ref_mut(&mut * _binding_0);
         }
         Lit(ref mut _binding_0, ) => {
-            _visitor.visit_pat_lit(&mut * _binding_0);
+            _visitor.visit_pat_lit_mut(&mut * _binding_0);
         }
         Range(ref mut _binding_0, ) => {
-            _visitor.visit_pat_range(&mut * _binding_0);
+            _visitor.visit_pat_range_mut(&mut * _binding_0);
         }
         Slice(ref mut _binding_0, ) => {
-            _visitor.visit_pat_slice(&mut * _binding_0);
+            _visitor.visit_pat_slice_mut(&mut * _binding_0);
         }
         Mac(ref mut _binding_0, ) => {
-            _visitor.visit_mac(&mut * _binding_0);
+            _visitor.visit_mac_mut(&mut * _binding_0);
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_box<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatBox) {
-    _visitor.visit_pat(&mut _i . pat);
+pub fn visit_pat_box_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatBox) {
+    _visitor.visit_pat_mut(&mut _i . pat);
     // Skipped field _i . box_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_ident<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatIdent) {
-    _visitor.visit_binding_mode(&mut _i . mode);
+pub fn visit_pat_ident_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatIdent) {
+    _visitor.visit_binding_mode_mut(&mut _i . mode);
     // Skipped field _i . ident;
-    if let Some(ref mut it) = _i . subpat { _visitor.visit_pat(&mut * it) };
+    if let Some(ref mut it) = _i . subpat { _visitor.visit_pat_mut(&mut * it) };
     // Skipped field _i . at_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_lit<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatLit) {
-    _visitor.visit_expr(&mut _i . expr);
+pub fn visit_pat_lit_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatLit) {
+    _visitor.visit_expr_mut(&mut _i . expr);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_path<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatPath) {
-    if let Some(ref mut it) = _i . qself { _visitor.visit_qself(&mut * it) };
-    _visitor.visit_path(&mut _i . path);
+pub fn visit_pat_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatPath) {
+    if let Some(ref mut it) = _i . qself { _visitor.visit_qself_mut(&mut * it) };
+    _visitor.visit_path_mut(&mut _i . path);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_range<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatRange) {
-    _visitor.visit_expr(&mut _i . lo);
-    _visitor.visit_expr(&mut _i . hi);
-    _visitor.visit_range_limits(&mut _i . limits);
+pub fn visit_pat_range_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatRange) {
+    _visitor.visit_expr_mut(&mut _i . lo);
+    _visitor.visit_expr_mut(&mut _i . hi);
+    _visitor.visit_range_limits_mut(&mut _i . limits);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_ref<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatRef) {
-    _visitor.visit_pat(&mut _i . pat);
-    _visitor.visit_mutability(&mut _i . mutbl);
+pub fn visit_pat_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatRef) {
+    _visitor.visit_pat_mut(&mut _i . pat);
+    _visitor.visit_mutability_mut(&mut _i . mutbl);
     // Skipped field _i . and_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_slice<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatSlice) {
-    for mut el in (_i . front).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat(&mut it) };
-    if let Some(ref mut it) = _i . middle { _visitor.visit_pat(&mut * it) };
-    for mut el in (_i . back).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat(&mut it) };
+pub fn visit_pat_slice_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatSlice) {
+    for mut el in (_i . front).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat_mut(&mut it) };
+    if let Some(ref mut it) = _i . middle { _visitor.visit_pat_mut(&mut * it) };
+    for mut el in (_i . back).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat_mut(&mut it) };
     // Skipped field _i . dot2_token;
     // Skipped field _i . comma_token;
     // Skipped field _i . bracket_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_struct<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatStruct) {
-    _visitor.visit_path(&mut _i . path);
-    for mut el in (_i . fields).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field_pat(&mut it) };
+pub fn visit_pat_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatStruct) {
+    _visitor.visit_path_mut(&mut _i . path);
+    for mut el in (_i . fields).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field_pat_mut(&mut it) };
     // Skipped field _i . brace_token;
     // Skipped field _i . dot2_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_tuple<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatTuple) {
-    for mut el in (_i . pats).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat(&mut it) };
+pub fn visit_pat_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatTuple) {
+    for mut el in (_i . pats).iter_mut() { let mut it = el.item_mut(); _visitor.visit_pat_mut(&mut it) };
     // Skipped field _i . dots_pos;
     // Skipped field _i . paren_token;
     // Skipped field _i . dot2_token;
     // Skipped field _i . comma_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_tuple_struct<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatTupleStruct) {
-    _visitor.visit_path(&mut _i . path);
-    _visitor.visit_pat_tuple(&mut _i . pat);
+pub fn visit_pat_tuple_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatTupleStruct) {
+    _visitor.visit_path_mut(&mut _i . path);
+    _visitor.visit_pat_tuple_mut(&mut _i . pat);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_pat_wild<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatWild) {
+pub fn visit_pat_wild_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatWild) {
     // Skipped field _i . underscore_token;
 }
 
-pub fn walk_path<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Path) {
+pub fn visit_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Path) {
     // Skipped field _i . leading_colon;
-    for mut el in (_i . segments).iter_mut() { let mut it = el.item_mut(); _visitor.visit_path_segment(&mut it) };
+    for mut el in (_i . segments).iter_mut() { let mut it = el.item_mut(); _visitor.visit_path_segment_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_glob<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathGlob) {
-    _visitor.visit_path(&mut _i . path);
+pub fn visit_path_glob_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathGlob) {
+    _visitor.visit_path_mut(&mut _i . path);
     // Skipped field _i . colon2_token;
     // Skipped field _i . star_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_list<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathList) {
-    _visitor.visit_path(&mut _i . path);
+pub fn visit_path_list_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathList) {
+    _visitor.visit_path_mut(&mut _i . path);
     // Skipped field _i . colon2_token;
     // Skipped field _i . brace_token;
-    for mut el in (_i . items).iter_mut() { let mut it = el.item_mut(); _visitor.visit_path_list_item(&mut it) };
+    for mut el in (_i . items).iter_mut() { let mut it = el.item_mut(); _visitor.visit_path_list_item_mut(&mut it) };
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_list_item<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathListItem) {
+pub fn visit_path_list_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathListItem) {
     // Skipped field _i . name;
     // Skipped field _i . rename;
     // Skipped field _i . as_token;
 }
 
-pub fn walk_path_parameters<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathParameters) {
+pub fn visit_path_parameters_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathParameters) {
     use ::PathParameters::*;
     match *_i {
         None => { }
         AngleBracketed(ref mut _binding_0, ) => {
-            _visitor.visit_angle_bracketed_parameter_data(&mut * _binding_0);
+            _visitor.visit_angle_bracketed_parameter_data_mut(&mut * _binding_0);
         }
         Parenthesized(ref mut _binding_0, ) => {
-            _visitor.visit_parenthesized_parameter_data(&mut * _binding_0);
+            _visitor.visit_parenthesized_parameter_data_mut(&mut * _binding_0);
         }
     }
 }
 
-pub fn walk_path_segment<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathSegment) {
+pub fn visit_path_segment_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathSegment) {
     // Skipped field _i . ident;
-    _visitor.visit_path_parameters(&mut _i . parameters);
+    _visitor.visit_path_parameters_mut(&mut _i . parameters);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_path_simple<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathSimple) {
-    _visitor.visit_path(&mut _i . path);
+pub fn visit_path_simple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathSimple) {
+    _visitor.visit_path_mut(&mut _i . path);
     // Skipped field _i . as_token;
     // Skipped field _i . rename;
 }
 
-pub fn walk_poly_trait_ref<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PolyTraitRef) {
-    if let Some(ref mut it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes(&mut * it) };
-    _visitor.visit_path(&mut _i . trait_ref);
+pub fn visit_poly_trait_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PolyTraitRef) {
+    if let Some(ref mut it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes_mut(&mut * it) };
+    _visitor.visit_path_mut(&mut _i . trait_ref);
 }
 
-pub fn walk_qself<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut QSelf) {
+pub fn visit_qself_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut QSelf) {
     // Skipped field _i . lt_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . position;
     // Skipped field _i . as_token;
     // Skipped field _i . gt_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_range_limits<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut RangeLimits) {
+pub fn visit_range_limits_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut RangeLimits) {
     use ::RangeLimits::*;
     match *_i {
         HalfOpen(ref mut _binding_0, ) => {
@@ -1674,20 +1674,20 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_stmt<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Stmt) {
+pub fn visit_stmt_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Stmt) {
     use ::Stmt::*;
     match *_i {
         Local(ref mut _binding_0, ) => {
-            _visitor.visit_local(&mut * _binding_0);
+            _visitor.visit_local_mut(&mut * _binding_0);
         }
         Item(ref mut _binding_0, ) => {
-            _visitor.visit_item(&mut * _binding_0);
+            _visitor.visit_item_mut(&mut * _binding_0);
         }
         Expr(ref mut _binding_0, ) => {
-            _visitor.visit_expr(&mut * _binding_0);
+            _visitor.visit_expr_mut(&mut * _binding_0);
         }
         Semi(ref mut _binding_0, ref mut _binding_1, ) => {
-            _visitor.visit_expr(&mut * _binding_0);
+            _visitor.visit_expr_mut(&mut * _binding_0);
             // Skipped field * _binding_1;
         }
         Mac(ref mut _binding_0, ) => {
@@ -1696,7 +1696,7 @@
     }
 }
 
-pub fn walk_trait_bound_modifier<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitBoundModifier) {
+pub fn visit_trait_bound_modifier_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitBoundModifier) {
     use ::TraitBoundModifier::*;
     match *_i {
         None => { }
@@ -1706,145 +1706,145 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItem) {
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    _visitor.visit_trait_item_kind(&mut _i . node);
+pub fn visit_trait_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItem) {
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    _visitor.visit_trait_item_kind_mut(&mut _i . node);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_const<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemConst) {
+pub fn visit_trait_item_const_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemConst) {
     // Skipped field _i . const_token;
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . default;
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_kind<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemKind) {
+pub fn visit_trait_item_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemKind) {
     use ::TraitItemKind::*;
     match *_i {
         Const(ref mut _binding_0, ) => {
-            _visitor.visit_trait_item_const(&mut * _binding_0);
+            _visitor.visit_trait_item_const_mut(&mut * _binding_0);
         }
         Method(ref mut _binding_0, ) => {
-            _visitor.visit_trait_item_method(&mut * _binding_0);
+            _visitor.visit_trait_item_method_mut(&mut * _binding_0);
         }
         Type(ref mut _binding_0, ) => {
-            _visitor.visit_trait_item_type(&mut * _binding_0);
+            _visitor.visit_trait_item_type_mut(&mut * _binding_0);
         }
         Macro(ref mut _binding_0, ) => {
-            _visitor.visit_mac(&mut * _binding_0);
+            _visitor.visit_mac_mut(&mut * _binding_0);
         }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_method<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemMethod) {
-    _visitor.visit_method_sig(&mut _i . sig);
-    if let Some(ref mut it) = _i . default { _visitor.visit_block(&mut * it) };
+pub fn visit_trait_item_method_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemMethod) {
+    _visitor.visit_method_sig_mut(&mut _i . sig);
+    if let Some(ref mut it) = _i . default { _visitor.visit_block_mut(&mut * it) };
     // Skipped field _i . semi_token;
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_trait_item_type<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemType) {
+pub fn visit_trait_item_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemType) {
     // Skipped field _i . type_token;
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
-    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound(&mut it) };
+    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound_mut(&mut it) };
     // Skipped field _i . default;
     // Skipped field _i . semi_token;
 }
 
-pub fn walk_ty<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Ty) {
+pub fn visit_ty_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Ty) {
     use ::Ty::*;
     match *_i {
         Slice(ref mut _binding_0, ) => {
-            _visitor.visit_ty_slice(&mut * _binding_0);
+            _visitor.visit_ty_slice_mut(&mut * _binding_0);
         }
         Array(ref mut _binding_0, ) => {
-            _visitor.visit_ty_array(&mut * _binding_0);
+            _visitor.visit_ty_array_mut(&mut * _binding_0);
         }
         Ptr(ref mut _binding_0, ) => {
-            _visitor.visit_ty_ptr(&mut * _binding_0);
+            _visitor.visit_ty_ptr_mut(&mut * _binding_0);
         }
         Rptr(ref mut _binding_0, ) => {
-            _visitor.visit_ty_rptr(&mut * _binding_0);
+            _visitor.visit_ty_rptr_mut(&mut * _binding_0);
         }
         BareFn(ref mut _binding_0, ) => {
-            _visitor.visit_ty_bare_fn(&mut * _binding_0);
+            _visitor.visit_ty_bare_fn_mut(&mut * _binding_0);
         }
         Never(ref mut _binding_0, ) => {
-            _visitor.visit_ty_never(&mut * _binding_0);
+            _visitor.visit_ty_never_mut(&mut * _binding_0);
         }
         Tup(ref mut _binding_0, ) => {
-            _visitor.visit_ty_tup(&mut * _binding_0);
+            _visitor.visit_ty_tup_mut(&mut * _binding_0);
         }
         Path(ref mut _binding_0, ) => {
-            _visitor.visit_ty_path(&mut * _binding_0);
+            _visitor.visit_ty_path_mut(&mut * _binding_0);
         }
         TraitObject(ref mut _binding_0, ) => {
-            _visitor.visit_ty_trait_object(&mut * _binding_0);
+            _visitor.visit_ty_trait_object_mut(&mut * _binding_0);
         }
         ImplTrait(ref mut _binding_0, ) => {
-            _visitor.visit_ty_impl_trait(&mut * _binding_0);
+            _visitor.visit_ty_impl_trait_mut(&mut * _binding_0);
         }
         Paren(ref mut _binding_0, ) => {
-            _visitor.visit_ty_paren(&mut * _binding_0);
+            _visitor.visit_ty_paren_mut(&mut * _binding_0);
         }
         Group(ref mut _binding_0, ) => {
-            _visitor.visit_ty_group(&mut * _binding_0);
+            _visitor.visit_ty_group_mut(&mut * _binding_0);
         }
         Infer(ref mut _binding_0, ) => {
-            _visitor.visit_ty_infer(&mut * _binding_0);
+            _visitor.visit_ty_infer_mut(&mut * _binding_0);
         }
         Mac(ref mut _binding_0, ) => {
-            _visitor.visit_mac(&mut * _binding_0);
+            _visitor.visit_mac_mut(&mut * _binding_0);
         }
     }
 }
 
-pub fn walk_ty_array<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyArray) {
+pub fn visit_ty_array_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyArray) {
     // Skipped field _i . bracket_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . semi_token;
-    _visitor.visit_expr(&mut _i . amt);
+    _visitor.visit_expr_mut(&mut _i . amt);
 }
 
-pub fn walk_ty_bare_fn<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyBareFn) {
-    _visitor.visit_bare_fn_ty(&mut _i . ty);
+pub fn visit_ty_bare_fn_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyBareFn) {
+    _visitor.visit_bare_fn_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_ty_group<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyGroup) {
+pub fn visit_ty_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyGroup) {
     // Skipped field _i . group_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_ty_impl_trait<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyImplTrait) {
+pub fn visit_ty_impl_trait_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyImplTrait) {
     // Skipped field _i . impl_token;
-    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound(&mut it) };
+    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound_mut(&mut it) };
 }
 
-pub fn walk_ty_infer<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyInfer) {
+pub fn visit_ty_infer_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyInfer) {
     // Skipped field _i . underscore_token;
 }
 
-pub fn walk_ty_never<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyNever) {
+pub fn visit_ty_never_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyNever) {
     // Skipped field _i . bang_token;
 }
 
-pub fn walk_ty_param<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyParam) {
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
+pub fn visit_ty_param_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyParam) {
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     // Skipped field _i . ident;
     // Skipped field _i . colon_token;
-    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound(&mut it) };
+    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound_mut(&mut it) };
     // Skipped field _i . eq_token;
-    if let Some(ref mut it) = _i . default { _visitor.visit_ty(&mut * it) };
+    if let Some(ref mut it) = _i . default { _visitor.visit_ty_mut(&mut * it) };
 }
 
-pub fn walk_ty_param_bound<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyParamBound) {
+pub fn visit_ty_param_bound_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyParamBound) {
     use ::TyParamBound::*;
     match *_i {
         Trait(ref mut _binding_0, ref mut _binding_1, ) => {
-            _visitor.visit_poly_trait_ref(&mut * _binding_0);
-            _visitor.visit_trait_bound_modifier(&mut * _binding_1);
+            _visitor.visit_poly_trait_ref_mut(&mut * _binding_0);
+            _visitor.visit_trait_bound_modifier_mut(&mut * _binding_1);
         }
         Region(ref mut _binding_0, ) => {
             // Skipped field * _binding_0;
@@ -1852,50 +1852,50 @@
     }
 }
 
-pub fn walk_ty_paren<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyParen) {
+pub fn visit_ty_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyParen) {
     // Skipped field _i . paren_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_ty_path<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyPath) {
-    if let Some(ref mut it) = _i . qself { _visitor.visit_qself(&mut * it) };
-    _visitor.visit_path(&mut _i . path);
+pub fn visit_ty_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyPath) {
+    if let Some(ref mut it) = _i . qself { _visitor.visit_qself_mut(&mut * it) };
+    _visitor.visit_path_mut(&mut _i . path);
 }
 
-pub fn walk_ty_ptr<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyPtr) {
+pub fn visit_ty_ptr_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyPtr) {
     // Skipped field _i . star_token;
     // Skipped field _i . const_token;
-    _visitor.visit_mut_ty(&mut _i . ty);
+    _visitor.visit_mut_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_ty_rptr<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyRptr) {
+pub fn visit_ty_rptr_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyRptr) {
     // Skipped field _i . and_token;
     // Skipped field _i . lifetime;
-    _visitor.visit_mut_ty(&mut _i . ty);
+    _visitor.visit_mut_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_ty_slice<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TySlice) {
-    _visitor.visit_ty(&mut _i . ty);
+pub fn visit_ty_slice_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TySlice) {
+    _visitor.visit_ty_mut(&mut _i . ty);
     // Skipped field _i . bracket_token;
 }
 
-pub fn walk_ty_trait_object<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyTraitObject) {
-    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound(&mut it) };
+pub fn visit_ty_trait_object_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyTraitObject) {
+    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound_mut(&mut it) };
 }
 
-pub fn walk_ty_tup<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyTup) {
+pub fn visit_ty_tup_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TyTup) {
     // Skipped field _i . paren_token;
-    for mut el in (_i . tys).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty(&mut it) };
+    for mut el in (_i . tys).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_mut(&mut it) };
     // Skipped field _i . lone_comma;
 }
 
-pub fn walk_type_binding<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeBinding) {
+pub fn visit_type_binding_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeBinding) {
     // Skipped field _i . ident;
     // Skipped field _i . eq_token;
-    _visitor.visit_ty(&mut _i . ty);
+    _visitor.visit_ty_mut(&mut _i . ty);
 }
 
-pub fn walk_un_op<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut UnOp) {
+pub fn visit_un_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut UnOp) {
     use ::UnOp::*;
     match *_i {
         Deref(ref mut _binding_0, ) => {
@@ -1910,7 +1910,7 @@
     }
 }
 
-pub fn walk_unsafety<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Unsafety) {
+pub fn visit_unsafety_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Unsafety) {
     use ::Unsafety::*;
     match *_i {
         Unsafe(ref mut _binding_0, ) => {
@@ -1920,116 +1920,116 @@
     }
 }
 
-pub fn walk_variant<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Variant) {
+pub fn visit_variant_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Variant) {
     // Skipped field _i . ident;
-    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute(&mut it) };
-    _visitor.visit_variant_data(&mut _i . data);
-    if let Some(ref mut it) = _i . discriminant { _visitor.visit_expr(&mut * it) };
+    for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
+    _visitor.visit_variant_data_mut(&mut _i . data);
+    if let Some(ref mut it) = _i . discriminant { _visitor.visit_expr_mut(&mut * it) };
     // Skipped field _i . eq_token;
 }
 
-pub fn walk_variant_data<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VariantData) {
+pub fn visit_variant_data_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VariantData) {
     use ::VariantData::*;
     match *_i {
         Struct(ref mut _binding_0, ref mut _binding_1, ) => {
-            for mut el in (* _binding_0).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field(&mut it) };
+            for mut el in (* _binding_0).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field_mut(&mut it) };
             // Skipped field * _binding_1;
         }
         Tuple(ref mut _binding_0, ref mut _binding_1, ) => {
-            for mut el in (* _binding_0).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field(&mut it) };
+            for mut el in (* _binding_0).iter_mut() { let mut it = el.item_mut(); _visitor.visit_field_mut(&mut it) };
             // Skipped field * _binding_1;
         }
         Unit => { }
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn walk_view_path<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ViewPath) {
+pub fn visit_view_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ViewPath) {
     use ::ViewPath::*;
     match *_i {
         Simple(ref mut _binding_0, ) => {
-            _visitor.visit_path_simple(&mut * _binding_0);
+            _visitor.visit_path_simple_mut(&mut * _binding_0);
         }
         Glob(ref mut _binding_0, ) => {
-            _visitor.visit_path_glob(&mut * _binding_0);
+            _visitor.visit_path_glob_mut(&mut * _binding_0);
         }
         List(ref mut _binding_0, ) => {
-            _visitor.visit_path_list(&mut * _binding_0);
+            _visitor.visit_path_list_mut(&mut * _binding_0);
         }
     }
 }
 
-pub fn walk_vis_crate<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisCrate) {
+pub fn visit_vis_crate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisCrate) {
     // Skipped field _i . pub_token;
     // Skipped field _i . paren_token;
     // Skipped field _i . crate_token;
 }
 
-pub fn walk_vis_inherited<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisInherited) {
+pub fn visit_vis_inherited_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisInherited) {
 }
 
-pub fn walk_vis_public<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisPublic) {
+pub fn visit_vis_public_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisPublic) {
     // Skipped field _i . pub_token;
 }
 
-pub fn walk_vis_restricted<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisRestricted) {
+pub fn visit_vis_restricted_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisRestricted) {
     // Skipped field _i . pub_token;
     // Skipped field _i . paren_token;
     // Skipped field _i . in_token;
-    _visitor.visit_path(&mut _i . path);
+    _visitor.visit_path_mut(&mut _i . path);
 }
 
-pub fn walk_visibility<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Visibility) {
+pub fn visit_visibility_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Visibility) {
     use ::Visibility::*;
     match *_i {
         Public(ref mut _binding_0, ) => {
-            _visitor.visit_vis_public(&mut * _binding_0);
+            _visitor.visit_vis_public_mut(&mut * _binding_0);
         }
         Crate(ref mut _binding_0, ) => {
-            _visitor.visit_vis_crate(&mut * _binding_0);
+            _visitor.visit_vis_crate_mut(&mut * _binding_0);
         }
         Restricted(ref mut _binding_0, ) => {
-            _visitor.visit_vis_restricted(&mut * _binding_0);
+            _visitor.visit_vis_restricted_mut(&mut * _binding_0);
         }
         Inherited(ref mut _binding_0, ) => {
-            _visitor.visit_vis_inherited(&mut * _binding_0);
+            _visitor.visit_vis_inherited_mut(&mut * _binding_0);
         }
     }
 }
 
-pub fn walk_where_bound_predicate<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereBoundPredicate) {
-    if let Some(ref mut it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes(&mut * it) };
-    _visitor.visit_ty(&mut _i . bounded_ty);
+pub fn visit_where_bound_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereBoundPredicate) {
+    if let Some(ref mut it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes_mut(&mut * it) };
+    _visitor.visit_ty_mut(&mut _i . bounded_ty);
     // Skipped field _i . colon_token;
-    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound(&mut it) };
+    for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_ty_param_bound_mut(&mut it) };
 }
 
-pub fn walk_where_clause<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereClause) {
+pub fn visit_where_clause_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereClause) {
     // Skipped field _i . where_token;
-    for mut el in (_i . predicates).iter_mut() { let mut it = el.item_mut(); _visitor.visit_where_predicate(&mut it) };
+    for mut el in (_i . predicates).iter_mut() { let mut it = el.item_mut(); _visitor.visit_where_predicate_mut(&mut it) };
 }
 
-pub fn walk_where_eq_predicate<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereEqPredicate) {
-    _visitor.visit_ty(&mut _i . lhs_ty);
+pub fn visit_where_eq_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereEqPredicate) {
+    _visitor.visit_ty_mut(&mut _i . lhs_ty);
     // Skipped field _i . eq_token;
-    _visitor.visit_ty(&mut _i . rhs_ty);
+    _visitor.visit_ty_mut(&mut _i . rhs_ty);
 }
 
-pub fn walk_where_predicate<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WherePredicate) {
+pub fn visit_where_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WherePredicate) {
     use ::WherePredicate::*;
     match *_i {
         BoundPredicate(ref mut _binding_0, ) => {
-            _visitor.visit_where_bound_predicate(&mut * _binding_0);
+            _visitor.visit_where_bound_predicate_mut(&mut * _binding_0);
         }
         RegionPredicate(ref mut _binding_0, ) => {
-            _visitor.visit_where_region_predicate(&mut * _binding_0);
+            _visitor.visit_where_region_predicate_mut(&mut * _binding_0);
         }
         EqPredicate(ref mut _binding_0, ) => {
-            _visitor.visit_where_eq_predicate(&mut * _binding_0);
+            _visitor.visit_where_eq_predicate_mut(&mut * _binding_0);
         }
     }
 }
 
-pub fn walk_where_region_predicate<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereRegionPredicate) {
+pub fn visit_where_region_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereRegionPredicate) {
     // Skipped field _i . lifetime;
     // Skipped field _i . colon_token;
     // Skipped field _i . bounds;
diff --git a/src/lib.rs b/src/lib.rs
index 2fedda9..c30515d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -95,17 +95,17 @@
 pub use synom::tokens;
 pub use synom::delimited;
 
-#[cfg(feature = "visit")]
-#[path = "gen/visit.rs"]
-pub mod visit;
+mod gen {
+    #[cfg(feature = "visit")]
+    pub mod visit;
 
-#[cfg(feature = "visit")]
-#[path = "gen/visit_mut.rs"]
-pub mod visit_mut;
+    #[cfg(feature = "visit_mut")]
+    pub mod visit_mut;
 
-#[cfg(feature = "fold")]
-#[path = "gen/fold.rs"]
-pub mod fold;
+    #[cfg(feature = "fold")]
+    pub mod fold;
+}
+pub use gen::*;
 
 ////////////////////////////////////////////////////////////////////////////////
 
diff --git a/syn_codegen/src/main.rs b/syn_codegen/src/main.rs
index 95fc2bc..4567545 100644
--- a/syn_codegen/src/main.rs
+++ b/syn_codegen/src/main.rs
@@ -334,7 +334,7 @@
                     name = name,
                 ),
                 Kind::VisitMut => format!(
-                    "_visitor.visit_{under_name}(&mut {name})",
+                    "_visitor.visit_{under_name}_mut(&mut {name})",
                     under_name = under_name(type_name),
                     name = name,
                 ),
@@ -519,7 +519,7 @@
         state.visit_trait.push_str(&format!(
             "{features}\n\
              fn visit_{under_name}(&mut self, i: &{ty}) {{ \
-               walk_{under_name}(self, i) \
+               visit_{under_name}(self, i) \
              }}\n",
             features = s.features,
             under_name = under_name,
@@ -527,8 +527,8 @@
         ));
         state.visit_mut_trait.push_str(&format!(
             "{features}\n\
-             fn visit_{under_name}(&mut self, i: &mut {ty}) {{ \
-               walk_{under_name}(self, i) \
+             fn visit_{under_name}_mut(&mut self, i: &mut {ty}) {{ \
+               visit_{under_name}_mut(self, i) \
              }}\n",
             features = s.features,
             under_name = under_name,
@@ -537,7 +537,7 @@
         state.fold_trait.push_str(&format!(
             "{features}\n\
              fn fold_{under_name}(&mut self, i: {ty}) -> {ty} {{ \
-               walk_{under_name}(self, i) \
+               fold_{under_name}(self, i) \
              }}\n",
             features = s.features,
             under_name = under_name,
@@ -546,7 +546,7 @@
 
         state.visit_impl.push_str(&format!(
             "{features}\n\
-             pub fn walk_{under_name}<V: Visitor + ?Sized>(\
+             pub fn visit_{under_name}<V: Visitor + ?Sized>(\
                _visitor: &mut V, _i: &{ty}) {{\n",
             features = s.features,
             under_name = under_name,
@@ -554,7 +554,7 @@
         ));
         state.visit_mut_impl.push_str(&format!(
             "{features}\n\
-             pub fn walk_{under_name}<V: VisitorMut + ?Sized>(\
+             pub fn visit_{under_name}_mut<V: VisitorMut + ?Sized>(\
                _visitor: &mut V, _i: &mut {ty}) {{\n",
             features = s.features,
             under_name = under_name,
@@ -562,7 +562,7 @@
         ));
         state.fold_impl.push_str(&format!(
             "{features}\n\
-             pub fn walk_{under_name}<V: Folder + ?Sized>(\
+             pub fn fold_{under_name}<V: Folder + ?Sized>(\
                _visitor: &mut V, _i: {ty}) -> {ty} {{\n",
             features = s.features,
             under_name = under_name,
@@ -747,7 +747,7 @@
 // Unreachable code is generated sometimes without the full feature.
 #![allow(unreachable_code)]
 
-use super::*;
+use *;
 use synom::delimited::Delimited;
 
 trait FoldHelper {{
@@ -805,7 +805,7 @@
 //! call `visit::walk_*` to apply the default traversal algorithm, or prevent
 //! deeper traversal by doing nothing.
 
-use super::*;
+use *;
 
 {full_macro}
 
@@ -837,7 +837,7 @@
 //! call `visit::walk_*` to apply the default traversal algorithm, or prevent
 //! deeper traversal by doing nothing.
 
-use super::*;
+use *;
 
 {full_macro}
 
diff --git a/tests/test_precedence.rs b/tests/test_precedence.rs
index 4442ecb..87dada8 100644
--- a/tests/test_precedence.rs
+++ b/tests/test_precedence.rs
@@ -297,7 +297,7 @@
 
     fn paren(folder: &mut BracketsFolder, node: ExprKind) -> ExprKind {
         ExprKind::Paren(ExprParen {
-            expr: Box::new(walk_expr(folder, Expr {
+            expr: Box::new(fold_expr(folder, Expr {
                 node: node,
                 attrs: vec![],
             })),
@@ -314,7 +314,7 @@
                 ExprKind::If(..) |
                 ExprKind::Block(..) |
                 ExprKind::IfLet(..) => {
-                    return walk_expr(self, expr);
+                    return fold_expr(self, expr);
                 }
                 node => paren(self, node),
             };
@@ -329,10 +329,10 @@
             match stmt {
                 // Don't wrap toplevel expressions in statements.
                 Stmt::Expr(e) => {
-                    Stmt::Expr(Box::new(walk_expr(self, *e)))
+                    Stmt::Expr(Box::new(fold_expr(self, *e)))
                 }
                 Stmt::Semi(e, semi) => {
-                    Stmt::Semi(Box::new(walk_expr(self, *e)), semi)
+                    Stmt::Semi(Box::new(fold_expr(self, *e)), semi)
                 }
                 s => s,
             }
