diff --git a/Cargo.toml b/Cargo.toml
index af5d676..3bcd8cc 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,7 +16,8 @@
 required-features = ["full", "parsing", "extra-traits"]
 
 [features]
-default = ["parsing", "printing", "clone-impls"]
+default = ["derive", "parsing", "printing", "clone-impls"]
+derive = []
 full = []
 parsing = []
 printing = ["quote"]
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 5d4dc7d..7a94df8 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -39,9 +39,9 @@
 /// to monitor future changes to `Folder` in case a new method with a
 /// new default implementation gets introduced.)
 pub trait Folder {
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_abi(&mut self, i: Abi) -> Abi { fold_abi(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_angle_bracketed_generic_arguments(&mut self, i: AngleBracketedGenericArguments) -> AngleBracketedGenericArguments { fold_angle_bracketed_generic_arguments(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_arg_captured(&mut self, i: ArgCaptured) -> ArgCaptured { fold_arg_captured(self, i) }
@@ -49,129 +49,129 @@
 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 { fold_arg_self_ref(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_arm(&mut self, i: Arm) -> Arm { fold_arm(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_attr_style(&mut self, i: AttrStyle) -> AttrStyle { fold_attr_style(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_attribute(&mut self, i: Attribute) -> Attribute { fold_attribute(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_bare_fn_arg(&mut self, i: BareFnArg) -> BareFnArg { fold_bare_fn_arg(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_bare_fn_arg_name(&mut self, i: BareFnArgName) -> BareFnArgName { fold_bare_fn_arg_name(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_bin_op(&mut self, i: BinOp) -> BinOp { fold_bin_op(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_binding(&mut self, i: Binding) -> Binding { fold_binding(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_block(&mut self, i: Block) -> Block { fold_block(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_bound_lifetimes(&mut self, i: BoundLifetimes) -> BoundLifetimes { fold_bound_lifetimes(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_const_param(&mut self, i: ConstParam) -> ConstParam { fold_const_param(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_data(&mut self, i: Data) -> Data { fold_data(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_data_enum(&mut self, i: DataEnum) -> DataEnum { fold_data_enum(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_data_struct(&mut self, i: DataStruct) -> DataStruct { fold_data_struct(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_data_union(&mut self, i: DataUnion) -> DataUnion { fold_data_union(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_derive_input(&mut self, i: DeriveInput) -> DeriveInput { fold_derive_input(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr(&mut self, i: Expr) -> Expr { fold_expr(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_addr_of(&mut self, i: ExprAddrOf) -> ExprAddrOf { fold_expr_addr_of(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_array(&mut self, i: ExprArray) -> ExprArray { fold_expr_array(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_assign(&mut self, i: ExprAssign) -> ExprAssign { fold_expr_assign(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_assign_op(&mut self, i: ExprAssignOp) -> ExprAssignOp { fold_expr_assign_op(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_binary(&mut self, i: ExprBinary) -> ExprBinary { fold_expr_binary(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_block(&mut self, i: ExprBlock) -> ExprBlock { fold_expr_block(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_box(&mut self, i: ExprBox) -> ExprBox { fold_expr_box(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_break(&mut self, i: ExprBreak) -> ExprBreak { fold_expr_break(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_call(&mut self, i: ExprCall) -> ExprCall { fold_expr_call(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_cast(&mut self, i: ExprCast) -> ExprCast { fold_expr_cast(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_catch(&mut self, i: ExprCatch) -> ExprCatch { fold_expr_catch(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_closure(&mut self, i: ExprClosure) -> ExprClosure { fold_expr_closure(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_continue(&mut self, i: ExprContinue) -> ExprContinue { fold_expr_continue(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_field(&mut self, i: ExprField) -> ExprField { fold_expr_field(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_for_loop(&mut self, i: ExprForLoop) -> ExprForLoop { fold_expr_for_loop(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_group(&mut self, i: ExprGroup) -> ExprGroup { fold_expr_group(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_if(&mut self, i: ExprIf) -> ExprIf { fold_expr_if(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_if_let(&mut self, i: ExprIfLet) -> ExprIfLet { fold_expr_if_let(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_in_place(&mut self, i: ExprInPlace) -> ExprInPlace { fold_expr_in_place(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_index(&mut self, i: ExprIndex) -> ExprIndex { fold_expr_index(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_lit(&mut self, i: ExprLit) -> ExprLit { fold_expr_lit(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_loop(&mut self, i: ExprLoop) -> ExprLoop { fold_expr_loop(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_macro(&mut self, i: ExprMacro) -> ExprMacro { fold_expr_macro(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_match(&mut self, i: ExprMatch) -> ExprMatch { fold_expr_match(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_method_call(&mut self, i: ExprMethodCall) -> ExprMethodCall { fold_expr_method_call(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_paren(&mut self, i: ExprParen) -> ExprParen { fold_expr_paren(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_path(&mut self, i: ExprPath) -> ExprPath { fold_expr_path(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_range(&mut self, i: ExprRange) -> ExprRange { fold_expr_range(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_repeat(&mut self, i: ExprRepeat) -> ExprRepeat { fold_expr_repeat(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_return(&mut self, i: ExprReturn) -> ExprReturn { fold_expr_return(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_struct(&mut self, i: ExprStruct) -> ExprStruct { fold_expr_struct(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_try(&mut self, i: ExprTry) -> ExprTry { fold_expr_try(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_tuple(&mut self, i: ExprTuple) -> ExprTuple { fold_expr_tuple(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_type(&mut self, i: ExprType) -> ExprType { fold_expr_type(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_unary(&mut self, i: ExprUnary) -> ExprUnary { fold_expr_unary(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_unsafe(&mut self, i: ExprUnsafe) -> ExprUnsafe { fold_expr_unsafe(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_verbatim(&mut self, i: ExprVerbatim) -> ExprVerbatim { fold_expr_verbatim(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_while(&mut self, i: ExprWhile) -> ExprWhile { fold_expr_while(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_while_let(&mut self, i: ExprWhileLet) -> ExprWhileLet { fold_expr_while_let(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_expr_yield(&mut self, i: ExprYield) -> ExprYield { fold_expr_yield(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_field(&mut self, i: Field) -> Field { fold_field(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_field_pat(&mut self, i: FieldPat) -> FieldPat { fold_field_pat(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_field_value(&mut self, i: FieldValue) -> FieldValue { fold_field_value(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_fields(&mut self, i: Fields) -> Fields { fold_fields(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_fields_named(&mut self, i: FieldsNamed) -> FieldsNamed { fold_fields_named(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_fields_unnamed(&mut self, i: FieldsUnnamed) -> FieldsUnnamed { fold_fields_unnamed(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_file(&mut self, i: File) -> File { fold_file(self, i) }
@@ -189,13 +189,13 @@
 fn fold_foreign_item_type(&mut self, i: ForeignItemType) -> ForeignItemType { fold_foreign_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_foreign_item_verbatim(&mut self, i: ForeignItemVerbatim) -> ForeignItemVerbatim { fold_foreign_item_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_generic_argument(&mut self, i: GenericArgument) -> GenericArgument { fold_generic_argument(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_generic_method_argument(&mut self, i: GenericMethodArgument) -> GenericMethodArgument { fold_generic_method_argument(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_generic_param(&mut self, i: GenericParam) -> GenericParam { fold_generic_param(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_generics(&mut self, i: Generics) -> Generics { fold_generics(self, i) }
 
 fn fold_ident(&mut self, i: Ident) -> Ident { fold_ident(self, i) }
@@ -211,7 +211,7 @@
 fn fold_impl_item_type(&mut self, i: ImplItemType) -> ImplItemType { fold_impl_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_impl_item_verbatim(&mut self, i: ImplItemVerbatim) -> ImplItemVerbatim { fold_impl_item_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_index(&mut self, i: Index) -> Index { fold_index(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_item(&mut self, i: Item) -> Item { fold_item(self, i) }
@@ -247,89 +247,89 @@
 fn fold_item_use(&mut self, i: ItemUse) -> ItemUse { fold_item_use(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_item_verbatim(&mut self, i: ItemVerbatim) -> ItemVerbatim { fold_item_verbatim(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_label(&mut self, i: Label) -> Label { fold_label(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_lifetime(&mut self, i: Lifetime) -> Lifetime { fold_lifetime(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef { fold_lifetime_def(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_lit(&mut self, i: Lit) -> Lit { fold_lit(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_local(&mut self, i: Local) -> Local { fold_local(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_macro(&mut self, i: Macro) -> Macro { fold_macro(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_macro_delimiter(&mut self, i: MacroDelimiter) -> MacroDelimiter { fold_macro_delimiter(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_member(&mut self, i: Member) -> Member { fold_member(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_meta_item(&mut self, i: MetaItem) -> MetaItem { fold_meta_item(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_meta_item_list(&mut self, i: MetaItemList) -> MetaItemList { fold_meta_item_list(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 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 { fold_method_sig(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_method_turbofish(&mut self, i: MethodTurbofish) -> MethodTurbofish { fold_method_turbofish(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_nested_meta_item(&mut self, i: NestedMetaItem) -> NestedMetaItem { fold_nested_meta_item(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_parenthesized_generic_arguments(&mut self, i: ParenthesizedGenericArguments) -> ParenthesizedGenericArguments { fold_parenthesized_generic_arguments(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat(&mut self, i: Pat) -> Pat { fold_pat(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_box(&mut self, i: PatBox) -> PatBox { fold_pat_box(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_ident(&mut self, i: PatIdent) -> PatIdent { fold_pat_ident(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_lit(&mut self, i: PatLit) -> PatLit { fold_pat_lit(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_macro(&mut self, i: PatMacro) -> PatMacro { fold_pat_macro(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_path(&mut self, i: PatPath) -> PatPath { fold_pat_path(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_range(&mut self, i: PatRange) -> PatRange { fold_pat_range(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_ref(&mut self, i: PatRef) -> PatRef { fold_pat_ref(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_slice(&mut self, i: PatSlice) -> PatSlice { fold_pat_slice(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_struct(&mut self, i: PatStruct) -> PatStruct { fold_pat_struct(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_tuple(&mut self, i: PatTuple) -> PatTuple { fold_pat_tuple(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_tuple_struct(&mut self, i: PatTupleStruct) -> PatTupleStruct { fold_pat_tuple_struct(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_verbatim(&mut self, i: PatVerbatim) -> PatVerbatim { fold_pat_verbatim(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_pat_wild(&mut self, i: PatWild) -> PatWild { fold_pat_wild(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_path(&mut self, i: Path) -> Path { fold_path(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_path_arguments(&mut self, i: PathArguments) -> PathArguments { fold_path_arguments(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_path_segment(&mut self, i: PathSegment) -> PathSegment { fold_path_segment(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_predicate_eq(&mut self, i: PredicateEq) -> PredicateEq { fold_predicate_eq(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_predicate_lifetime(&mut self, i: PredicateLifetime) -> PredicateLifetime { fold_predicate_lifetime(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_predicate_type(&mut self, i: PredicateType) -> PredicateType { fold_predicate_type(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_qself(&mut self, i: QSelf) -> QSelf { fold_qself(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_range_limits(&mut self, i: RangeLimits) -> RangeLimits { fold_range_limits(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_return_type(&mut self, i: ReturnType) -> ReturnType { fold_return_type(self, i) }
 
 fn fold_span(&mut self, i: Span) -> Span { fold_span(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn fold_stmt(&mut self, i: Stmt) -> Stmt { fold_stmt(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_trait_bound(&mut self, i: TraitBound) -> TraitBound { fold_trait_bound(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 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 { fold_trait_item(self, i) }
@@ -343,43 +343,43 @@
 fn fold_trait_item_type(&mut self, i: TraitItemType) -> TraitItemType { fold_trait_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_trait_item_verbatim(&mut self, i: TraitItemVerbatim) -> TraitItemVerbatim { fold_trait_item_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type(&mut self, i: Type) -> Type { fold_type(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_array(&mut self, i: TypeArray) -> TypeArray { fold_type_array(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_bare_fn(&mut self, i: TypeBareFn) -> TypeBareFn { fold_type_bare_fn(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_group(&mut self, i: TypeGroup) -> TypeGroup { fold_type_group(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_impl_trait(&mut self, i: TypeImplTrait) -> TypeImplTrait { fold_type_impl_trait(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_infer(&mut self, i: TypeInfer) -> TypeInfer { fold_type_infer(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_macro(&mut self, i: TypeMacro) -> TypeMacro { fold_type_macro(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_never(&mut self, i: TypeNever) -> TypeNever { fold_type_never(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_param(&mut self, i: TypeParam) -> TypeParam { fold_type_param(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_param_bound(&mut self, i: TypeParamBound) -> TypeParamBound { fold_type_param_bound(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_paren(&mut self, i: TypeParen) -> TypeParen { fold_type_paren(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_path(&mut self, i: TypePath) -> TypePath { fold_type_path(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_ptr(&mut self, i: TypePtr) -> TypePtr { fold_type_ptr(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_reference(&mut self, i: TypeReference) -> TypeReference { fold_type_reference(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_slice(&mut self, i: TypeSlice) -> TypeSlice { fold_type_slice(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_trait_object(&mut self, i: TypeTraitObject) -> TypeTraitObject { fold_type_trait_object(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_tuple(&mut self, i: TypeTuple) -> TypeTuple { fold_type_tuple(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_type_verbatim(&mut self, i: TypeVerbatim) -> TypeVerbatim { fold_type_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_un_op(&mut self, i: UnOp) -> UnOp { fold_un_op(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_use_glob(&mut self, i: UseGlob) -> UseGlob { fold_use_glob(self, i) }
@@ -389,19 +389,19 @@
 fn fold_use_path(&mut self, i: UsePath) -> UsePath { fold_use_path(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_use_tree(&mut self, i: UseTree) -> UseTree { fold_use_tree(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_variant(&mut self, i: Variant) -> Variant { fold_variant(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_vis_crate(&mut self, i: VisCrate) -> VisCrate { fold_vis_crate(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_vis_public(&mut self, i: VisPublic) -> VisPublic { fold_vis_public(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_vis_restricted(&mut self, i: VisRestricted) -> VisRestricted { fold_vis_restricted(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_visibility(&mut self, i: Visibility) -> Visibility { fold_visibility(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_where_clause(&mut self, i: WhereClause) -> WhereClause { fold_where_clause(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_where_predicate(&mut self, i: WherePredicate) -> WherePredicate { fold_where_predicate(self, i) }
 
 }
@@ -416,14 +416,14 @@
     _i
 }
 
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_abi<V: Folder + ?Sized>(_visitor: &mut V, _i: Abi) -> Abi {
     Abi {
         extern_token: Token ! [ extern ](tokens_helper(_visitor, &(_i . extern_token).0)),
         name: (_i . name).map(|it| { _visitor.fold_lit(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_angle_bracketed_generic_arguments<V: Folder + ?Sized>(_visitor: &mut V, _i: AngleBracketedGenericArguments) -> AngleBracketedGenericArguments {
     AngleBracketedGenericArguments {
         colon2_token: (_i . colon2_token).map(|it| { Token ! [ :: ](tokens_helper(_visitor, &(it).0)) }),
@@ -456,7 +456,7 @@
         self_token: Token ! [ self ](tokens_helper(_visitor, &(_i . self_token).0)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_arm<V: Folder + ?Sized>(_visitor: &mut V, _i: Arm) -> Arm {
     Arm {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -470,7 +470,7 @@
         comma: (_i . comma).map(|it| { Token ! [ , ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_attr_style<V: Folder + ?Sized>(_visitor: &mut V, _i: AttrStyle) -> AttrStyle {
     match _i {
         AttrStyle::Outer => { AttrStyle::Outer }
@@ -481,7 +481,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_attribute<V: Folder + ?Sized>(_visitor: &mut V, _i: Attribute) -> Attribute {
     Attribute {
         pound_token: Token ! [ # ](tokens_helper(_visitor, &(_i . pound_token).0)),
@@ -492,7 +492,7 @@
         is_sugared_doc: _i . is_sugared_doc,
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_bare_fn_arg<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnArg) -> BareFnArg {
     BareFnArg {
         name: (_i . name).map(|it| { (
@@ -502,7 +502,7 @@
         ty: _visitor.fold_type(_i . ty),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_bare_fn_arg_name<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnArgName) -> BareFnArgName {
     match _i {
         BareFnArgName::Named(_binding_0, ) => {
@@ -517,7 +517,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_bin_op<V: Folder + ?Sized>(_visitor: &mut V, _i: BinOp) -> BinOp {
     match _i {
         BinOp::Add(_binding_0, ) => {
@@ -662,7 +662,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_binding<V: Folder + ?Sized>(_visitor: &mut V, _i: Binding) -> Binding {
     Binding {
         ident: _visitor.fold_ident(_i . ident),
@@ -670,14 +670,14 @@
         ty: _visitor.fold_type(_i . ty),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_block<V: Folder + ?Sized>(_visitor: &mut V, _i: Block) -> Block {
     Block {
         brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         stmts: FoldHelper::lift(_i . stmts, |it| { _visitor.fold_stmt(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_bound_lifetimes<V: Folder + ?Sized>(_visitor: &mut V, _i: BoundLifetimes) -> BoundLifetimes {
     BoundLifetimes {
         for_token: Token ! [ for ](tokens_helper(_visitor, &(_i . for_token).0)),
@@ -686,7 +686,7 @@
         gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i . gt_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_const_param<V: Folder + ?Sized>(_visitor: &mut V, _i: ConstParam) -> ConstParam {
     ConstParam {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -698,7 +698,7 @@
         default: (_i . default).map(|it| { _visitor.fold_expr(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_data<V: Folder + ?Sized>(_visitor: &mut V, _i: Data) -> Data {
     match _i {
         Data::Struct(_binding_0, ) => {
@@ -718,7 +718,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_data_enum<V: Folder + ?Sized>(_visitor: &mut V, _i: DataEnum) -> DataEnum {
     DataEnum {
         enum_token: Token ! [ enum ](tokens_helper(_visitor, &(_i . enum_token).0)),
@@ -726,7 +726,7 @@
         variants: FoldHelper::lift(_i . variants, |it| { _visitor.fold_variant(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_data_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: DataStruct) -> DataStruct {
     DataStruct {
         struct_token: Token ! [ struct ](tokens_helper(_visitor, &(_i . struct_token).0)),
@@ -734,14 +734,14 @@
         semi_token: (_i . semi_token).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_data_union<V: Folder + ?Sized>(_visitor: &mut V, _i: DataUnion) -> DataUnion {
     DataUnion {
         union_token: Token ! [ union ](tokens_helper(_visitor, &(_i . union_token).0)),
         fields: _visitor.fold_fields_named(_i . fields),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_derive_input<V: Folder + ?Sized>(_visitor: &mut V, _i: DeriveInput) -> DeriveInput {
     DeriveInput {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -751,7 +751,7 @@
         data: _visitor.fold_data(_i . data),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr<V: Folder + ?Sized>(_visitor: &mut V, _i: Expr) -> Expr {
     match _i {
         Expr::Box(_binding_0, ) => {
@@ -956,7 +956,7 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_addr_of<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAddrOf) -> ExprAddrOf {
     ExprAddrOf {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -965,7 +965,7 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_array<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprArray) -> ExprArray {
     ExprArray {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -973,7 +973,7 @@
         elems: FoldHelper::lift(_i . elems, |it| { _visitor.fold_expr(it) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_assign<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAssign) -> ExprAssign {
     ExprAssign {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -982,7 +982,7 @@
         right: Box::new(_visitor.fold_expr(* _i . right)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_assign_op<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAssignOp) -> ExprAssignOp {
     ExprAssignOp {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -991,7 +991,7 @@
         right: Box::new(_visitor.fold_expr(* _i . right)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_binary<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBinary) -> ExprBinary {
     ExprBinary {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1000,14 +1000,14 @@
         right: Box::new(_visitor.fold_expr(* _i . right)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_block<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBlock) -> ExprBlock {
     ExprBlock {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         block: _visitor.fold_block(_i . block),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_box<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBox) -> ExprBox {
     ExprBox {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1015,7 +1015,7 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_break<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBreak) -> ExprBreak {
     ExprBreak {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1024,7 +1024,7 @@
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_call<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCall) -> ExprCall {
     ExprCall {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1033,7 +1033,7 @@
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_cast<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCast) -> ExprCast {
     ExprCast {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1042,7 +1042,7 @@
         ty: Box::new(_visitor.fold_type(* _i . ty)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_catch<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCatch) -> ExprCatch {
     ExprCatch {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1051,7 +1051,7 @@
         block: _visitor.fold_block(_i . block),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_closure<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprClosure) -> ExprClosure {
     ExprClosure {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1063,7 +1063,7 @@
         body: Box::new(_visitor.fold_expr(* _i . body)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_continue<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprContinue) -> ExprContinue {
     ExprContinue {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1071,7 +1071,7 @@
         label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_field<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprField) -> ExprField {
     ExprField {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1080,7 +1080,7 @@
         member: _visitor.fold_member(_i . member),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_for_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprForLoop) -> ExprForLoop {
     ExprForLoop {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1092,7 +1092,7 @@
         body: _visitor.fold_block(_i . body),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_group<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprGroup) -> ExprGroup {
     ExprGroup {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1100,7 +1100,7 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_if<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIf) -> ExprIf {
     ExprIf {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1113,7 +1113,7 @@
         ) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_if_let<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIfLet) -> ExprIfLet {
     ExprIfLet {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1129,7 +1129,7 @@
         ) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_in_place<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprInPlace) -> ExprInPlace {
     ExprInPlace {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1138,7 +1138,7 @@
         value: Box::new(_visitor.fold_expr(* _i . value)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_index<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprIndex) -> ExprIndex {
     ExprIndex {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1147,14 +1147,14 @@
         index: Box::new(_visitor.fold_expr(* _i . index)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_lit<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprLit) -> ExprLit {
     ExprLit {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         lit: _visitor.fold_lit(_i . lit),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprLoop) -> ExprLoop {
     ExprLoop {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1163,14 +1163,14 @@
         body: _visitor.fold_block(_i . body),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_macro<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMacro) -> ExprMacro {
     ExprMacro {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         mac: _visitor.fold_macro(_i . mac),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_match<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMatch) -> ExprMatch {
     ExprMatch {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1180,7 +1180,7 @@
         arms: FoldHelper::lift(_i . arms, |it| { _visitor.fold_arm(it) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_method_call<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMethodCall) -> ExprMethodCall {
     ExprMethodCall {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1192,7 +1192,7 @@
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprParen) -> ExprParen {
     ExprParen {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1200,7 +1200,7 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_path<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprPath) -> ExprPath {
     ExprPath {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1208,7 +1208,7 @@
         path: _visitor.fold_path(_i . path),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_range<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRange) -> ExprRange {
     ExprRange {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1217,7 +1217,7 @@
         to: (_i . to).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_repeat<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRepeat) -> ExprRepeat {
     ExprRepeat {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1227,7 +1227,7 @@
         amt: Box::new(_visitor.fold_expr(* _i . amt)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_return<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprReturn) -> ExprReturn {
     ExprReturn {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1235,7 +1235,7 @@
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprStruct) -> ExprStruct {
     ExprStruct {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1246,7 +1246,7 @@
         rest: (_i . rest).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_try<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTry) -> ExprTry {
     ExprTry {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1254,7 +1254,7 @@
         question_token: Token ! [ ? ](tokens_helper(_visitor, &(_i . question_token).0)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_tuple<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTuple) -> ExprTuple {
     ExprTuple {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1262,7 +1262,7 @@
         elems: FoldHelper::lift(_i . elems, |it| { _visitor.fold_expr(it) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_type<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprType) -> ExprType {
     ExprType {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1271,7 +1271,7 @@
         ty: Box::new(_visitor.fold_type(* _i . ty)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_unary<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprUnary) -> ExprUnary {
     ExprUnary {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1279,7 +1279,7 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_unsafe<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprUnsafe) -> ExprUnsafe {
     ExprUnsafe {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1287,13 +1287,13 @@
         block: _visitor.fold_block(_i . block),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_verbatim<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprVerbatim) -> ExprVerbatim {
     ExprVerbatim {
         tts: _i . tts,
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_while<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhile) -> ExprWhile {
     ExprWhile {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1303,7 +1303,7 @@
         body: _visitor.fold_block(_i . body),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_while_let<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhileLet) -> ExprWhileLet {
     ExprWhileLet {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1316,7 +1316,7 @@
         body: _visitor.fold_block(_i . body),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_expr_yield<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprYield) -> ExprYield {
     ExprYield {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1324,7 +1324,7 @@
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_field<V: Folder + ?Sized>(_visitor: &mut V, _i: Field) -> Field {
     Field {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1334,7 +1334,7 @@
         ty: _visitor.fold_type(_i . ty),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_field_pat<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldPat) -> FieldPat {
     FieldPat {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1343,7 +1343,7 @@
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_field_value<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldValue) -> FieldValue {
     FieldValue {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1352,7 +1352,7 @@
         expr: _visitor.fold_expr(_i . expr),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_fields<V: Folder + ?Sized>(_visitor: &mut V, _i: Fields) -> Fields {
     match _i {
         Fields::Named(_binding_0, ) => {
@@ -1368,14 +1368,14 @@
         Fields::Unit => { Fields::Unit }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_fields_named<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldsNamed) -> FieldsNamed {
     FieldsNamed {
         brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         named: FoldHelper::lift(_i . named, |it| { _visitor.fold_field(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_fields_unnamed<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldsUnnamed) -> FieldsUnnamed {
     FieldsUnnamed {
         paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
@@ -1495,7 +1495,7 @@
         tts: _i . tts,
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_generic_argument<V: Folder + ?Sized>(_visitor: &mut V, _i: GenericArgument) -> GenericArgument {
     match _i {
         GenericArgument::Lifetime(_binding_0, ) => {
@@ -1520,7 +1520,7 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_generic_method_argument<V: Folder + ?Sized>(_visitor: &mut V, _i: GenericMethodArgument) -> GenericMethodArgument {
     match _i {
         GenericMethodArgument::Type(_binding_0, ) => {
@@ -1535,7 +1535,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_generic_param<V: Folder + ?Sized>(_visitor: &mut V, _i: GenericParam) -> GenericParam {
     match _i {
         GenericParam::Type(_binding_0, ) => {
@@ -1555,7 +1555,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_generics<V: Folder + ?Sized>(_visitor: &mut V, _i: Generics) -> Generics {
     Generics {
         lt_token: (_i . lt_token).map(|it| { Token ! [ < ](tokens_helper(_visitor, &(it).0)) }),
@@ -1647,7 +1647,7 @@
         tts: _i . tts,
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_index<V: Folder + ?Sized>(_visitor: &mut V, _i: Index) -> Index {
     Index {
         index: _i . index,
@@ -1941,14 +1941,14 @@
         tts: _i . tts,
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_label<V: Folder + ?Sized>(_visitor: &mut V, _i: Label) -> Label {
     Label {
         name: _visitor.fold_lifetime(_i . name),
         colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 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) }),
@@ -1957,14 +1957,14 @@
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_lit<V: Folder + ?Sized>(_visitor: &mut V, _i: Lit) -> Lit {
     Lit {
         value: _i . value,
         span: _visitor.fold_span(_i . span),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_local<V: Folder + ?Sized>(_visitor: &mut V, _i: Local) -> Local {
     Local {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1981,7 +1981,7 @@
         semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_macro<V: Folder + ?Sized>(_visitor: &mut V, _i: Macro) -> Macro {
     Macro {
         path: _visitor.fold_path(_i . path),
@@ -1990,7 +1990,7 @@
         tts: _i . tts,
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_macro_delimiter<V: Folder + ?Sized>(_visitor: &mut V, _i: MacroDelimiter) -> MacroDelimiter {
     match _i {
         MacroDelimiter::Paren(_binding_0, ) => {
@@ -2010,7 +2010,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_member<V: Folder + ?Sized>(_visitor: &mut V, _i: Member) -> Member {
     match _i {
         Member::Named(_binding_0, ) => {
@@ -2025,7 +2025,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_meta_item<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItem) -> MetaItem {
     match _i {
         MetaItem::Term(_binding_0, ) => {
@@ -2045,7 +2045,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_meta_item_list<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItemList) -> MetaItemList {
     MetaItemList {
         ident: _visitor.fold_ident(_i . ident),
@@ -2053,7 +2053,7 @@
         nested: FoldHelper::lift(_i . nested, |it| { _visitor.fold_nested_meta_item(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_meta_name_value<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaNameValue) -> MetaNameValue {
     MetaNameValue {
         ident: _visitor.fold_ident(_i . ident),
@@ -2071,7 +2071,7 @@
         decl: _visitor.fold_fn_decl(_i . decl),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_method_turbofish<V: Folder + ?Sized>(_visitor: &mut V, _i: MethodTurbofish) -> MethodTurbofish {
     MethodTurbofish {
         colon2_token: Token ! [ :: ](tokens_helper(_visitor, &(_i . colon2_token).0)),
@@ -2080,7 +2080,7 @@
         gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i . gt_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_nested_meta_item<V: Folder + ?Sized>(_visitor: &mut V, _i: NestedMetaItem) -> NestedMetaItem {
     match _i {
         NestedMetaItem::MetaItem(_binding_0, ) => {
@@ -2095,7 +2095,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_parenthesized_generic_arguments<V: Folder + ?Sized>(_visitor: &mut V, _i: ParenthesizedGenericArguments) -> ParenthesizedGenericArguments {
     ParenthesizedGenericArguments {
         paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
@@ -2103,7 +2103,7 @@
         output: _visitor.fold_return_type(_i . output),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat<V: Folder + ?Sized>(_visitor: &mut V, _i: Pat) -> Pat {
     match _i {
         Pat::Wild(_binding_0, ) => {
@@ -2173,14 +2173,14 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_box<V: Folder + ?Sized>(_visitor: &mut V, _i: PatBox) -> PatBox {
     PatBox {
         box_token: Token ! [ box ](tokens_helper(_visitor, &(_i . box_token).0)),
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_ident<V: Folder + ?Sized>(_visitor: &mut V, _i: PatIdent) -> PatIdent {
     PatIdent {
         by_ref: (_i . by_ref).map(|it| { Token ! [ ref ](tokens_helper(_visitor, &(it).0)) }),
@@ -2192,26 +2192,26 @@
         ) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 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" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_macro<V: Folder + ?Sized>(_visitor: &mut V, _i: PatMacro) -> PatMacro {
     PatMacro {
         mac: _visitor.fold_macro(_i . mac),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 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" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_range<V: Folder + ?Sized>(_visitor: &mut V, _i: PatRange) -> PatRange {
     PatRange {
         lo: Box::new(_visitor.fold_expr(* _i . lo)),
@@ -2219,7 +2219,7 @@
         hi: Box::new(_visitor.fold_expr(* _i . hi)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: PatRef) -> PatRef {
     PatRef {
         and_token: Token ! [ & ](tokens_helper(_visitor, &(_i . and_token).0)),
@@ -2227,7 +2227,7 @@
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_slice<V: Folder + ?Sized>(_visitor: &mut V, _i: PatSlice) -> PatSlice {
     PatSlice {
         bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
@@ -2238,7 +2238,7 @@
         back: FoldHelper::lift(_i . back, |it| { _visitor.fold_pat(it) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: PatStruct) -> PatStruct {
     PatStruct {
         path: _visitor.fold_path(_i . path),
@@ -2247,7 +2247,7 @@
         dot2_token: (_i . dot2_token).map(|it| { Token ! [ .. ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_tuple<V: Folder + ?Sized>(_visitor: &mut V, _i: PatTuple) -> PatTuple {
     PatTuple {
         paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
@@ -2257,33 +2257,33 @@
         back: FoldHelper::lift(_i . back, |it| { _visitor.fold_pat(it) }),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 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" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_verbatim<V: Folder + ?Sized>(_visitor: &mut V, _i: PatVerbatim) -> PatVerbatim {
     PatVerbatim {
         tts: _i . tts,
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_wild<V: Folder + ?Sized>(_visitor: &mut V, _i: PatWild) -> PatWild {
     PatWild {
         underscore_token: Token ! [ _ ](tokens_helper(_visitor, &(_i . underscore_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_path<V: Folder + ?Sized>(_visitor: &mut V, _i: Path) -> Path {
     Path {
         leading_colon: (_i . leading_colon).map(|it| { Token ! [ :: ](tokens_helper(_visitor, &(it).0)) }),
         segments: FoldHelper::lift(_i . segments, |it| { _visitor.fold_path_segment(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_path_arguments<V: Folder + ?Sized>(_visitor: &mut V, _i: PathArguments) -> PathArguments {
     match _i {
         PathArguments::None => { PathArguments::None }
@@ -2299,14 +2299,14 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_path_segment<V: Folder + ?Sized>(_visitor: &mut V, _i: PathSegment) -> PathSegment {
     PathSegment {
         ident: _visitor.fold_ident(_i . ident),
         arguments: _visitor.fold_path_arguments(_i . arguments),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_predicate_eq<V: Folder + ?Sized>(_visitor: &mut V, _i: PredicateEq) -> PredicateEq {
     PredicateEq {
         lhs_ty: _visitor.fold_type(_i . lhs_ty),
@@ -2314,7 +2314,7 @@
         rhs_ty: _visitor.fold_type(_i . rhs_ty),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_predicate_lifetime<V: Folder + ?Sized>(_visitor: &mut V, _i: PredicateLifetime) -> PredicateLifetime {
     PredicateLifetime {
         lifetime: _visitor.fold_lifetime(_i . lifetime),
@@ -2322,7 +2322,7 @@
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_predicate_type<V: Folder + ?Sized>(_visitor: &mut V, _i: PredicateType) -> PredicateType {
     PredicateType {
         lifetimes: (_i . lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
@@ -2331,7 +2331,7 @@
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_qself<V: Folder + ?Sized>(_visitor: &mut V, _i: QSelf) -> QSelf {
     QSelf {
         lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i . lt_token).0)),
@@ -2341,7 +2341,7 @@
         gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i . gt_token).0)),
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_range_limits<V: Folder + ?Sized>(_visitor: &mut V, _i: RangeLimits) -> RangeLimits {
     match _i {
         RangeLimits::HalfOpen(_binding_0, ) => {
@@ -2356,7 +2356,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_return_type<V: Folder + ?Sized>(_visitor: &mut V, _i: ReturnType) -> ReturnType {
     match _i {
         ReturnType::Default => { ReturnType::Default }
@@ -2372,7 +2372,7 @@
 pub fn fold_span<V: Folder + ?Sized>(_visitor: &mut V, _i: Span) -> Span {
     _i
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn fold_stmt<V: Folder + ?Sized>(_visitor: &mut V, _i: Stmt) -> Stmt {
     match _i {
         Stmt::Local(_binding_0, ) => {
@@ -2398,7 +2398,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_trait_bound<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitBound) -> TraitBound {
     TraitBound {
         modifier: _visitor.fold_trait_bound_modifier(_i . modifier),
@@ -2406,7 +2406,7 @@
         path: _visitor.fold_path(_i . path),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_trait_bound_modifier<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitBoundModifier) -> TraitBoundModifier {
     match _i {
         TraitBoundModifier::None => { TraitBoundModifier::None }
@@ -2501,7 +2501,7 @@
         tts: _i . tts,
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type<V: Folder + ?Sized>(_visitor: &mut V, _i: Type) -> Type {
     match _i {
         Type::Slice(_binding_0, ) => {
@@ -2581,7 +2581,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_array<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeArray) -> TypeArray {
     TypeArray {
         bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
@@ -2590,7 +2590,7 @@
         len: _visitor.fold_expr(_i . len),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_bare_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeBareFn) -> TypeBareFn {
     TypeBareFn {
         unsafety: (_i . unsafety).map(|it| { Token ! [ unsafe ](tokens_helper(_visitor, &(it).0)) }),
@@ -2603,39 +2603,39 @@
         output: _visitor.fold_return_type(_i . output),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_group<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeGroup) -> TypeGroup {
     TypeGroup {
         group_token: Group(tokens_helper(_visitor, &(_i . group_token).0)),
         elem: Box::new(_visitor.fold_type(* _i . elem)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_impl_trait<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeImplTrait) -> TypeImplTrait {
     TypeImplTrait {
         impl_token: Token ! [ impl ](tokens_helper(_visitor, &(_i . impl_token).0)),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_infer<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeInfer) -> TypeInfer {
     TypeInfer {
         underscore_token: Token ! [ _ ](tokens_helper(_visitor, &(_i . underscore_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_macro<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeMacro) -> TypeMacro {
     TypeMacro {
         mac: _visitor.fold_macro(_i . mac),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_never<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeNever) -> TypeNever {
     TypeNever {
         bang_token: Token ! [ ! ](tokens_helper(_visitor, &(_i . bang_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_param<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeParam) -> TypeParam {
     TypeParam {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -2646,7 +2646,7 @@
         default: (_i . default).map(|it| { _visitor.fold_type(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_param_bound<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeParamBound) -> TypeParamBound {
     match _i {
         TypeParamBound::Trait(_binding_0, ) => {
@@ -2661,21 +2661,21 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeParen) -> TypeParen {
     TypeParen {
         paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         elem: Box::new(_visitor.fold_type(* _i . elem)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_path<V: Folder + ?Sized>(_visitor: &mut V, _i: TypePath) -> TypePath {
     TypePath {
         qself: (_i . qself).map(|it| { _visitor.fold_qself(it) }),
         path: _visitor.fold_path(_i . path),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_ptr<V: Folder + ?Sized>(_visitor: &mut V, _i: TypePtr) -> TypePtr {
     TypePtr {
         star_token: Token ! [ * ](tokens_helper(_visitor, &(_i . star_token).0)),
@@ -2684,7 +2684,7 @@
         elem: Box::new(_visitor.fold_type(* _i . elem)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_reference<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeReference) -> TypeReference {
     TypeReference {
         and_token: Token ! [ & ](tokens_helper(_visitor, &(_i . and_token).0)),
@@ -2693,34 +2693,34 @@
         elem: Box::new(_visitor.fold_type(* _i . elem)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_slice<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeSlice) -> TypeSlice {
     TypeSlice {
         bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
         elem: Box::new(_visitor.fold_type(* _i . elem)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_trait_object<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeTraitObject) -> TypeTraitObject {
     TypeTraitObject {
         dyn_token: (_i . dyn_token).map(|it| { Token ! [ dyn ](tokens_helper(_visitor, &(it).0)) }),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_tuple<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeTuple) -> TypeTuple {
     TypeTuple {
         paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         elems: FoldHelper::lift(_i . elems, |it| { _visitor.fold_type(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_type_verbatim<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeVerbatim) -> TypeVerbatim {
     TypeVerbatim {
         tts: _i . tts,
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_un_op<V: Folder + ?Sized>(_visitor: &mut V, _i: UnOp) -> UnOp {
     match _i {
         UnOp::Deref(_binding_0, ) => {
@@ -2783,7 +2783,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_variant<V: Folder + ?Sized>(_visitor: &mut V, _i: Variant) -> Variant {
     Variant {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -2795,7 +2795,7 @@
         ) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_vis_crate<V: Folder + ?Sized>(_visitor: &mut V, _i: VisCrate) -> VisCrate {
     VisCrate {
         pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
@@ -2803,13 +2803,13 @@
         crate_token: Token ! [ crate ](tokens_helper(_visitor, &(_i . crate_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_vis_public<V: Folder + ?Sized>(_visitor: &mut V, _i: VisPublic) -> VisPublic {
     VisPublic {
         pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_vis_restricted<V: Folder + ?Sized>(_visitor: &mut V, _i: VisRestricted) -> VisRestricted {
     VisRestricted {
         pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
@@ -2818,7 +2818,7 @@
         path: Box::new(_visitor.fold_path(* _i . path)),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_visibility<V: Folder + ?Sized>(_visitor: &mut V, _i: Visibility) -> Visibility {
     match _i {
         Visibility::Public(_binding_0, ) => {
@@ -2839,14 +2839,14 @@
         Visibility::Inherited => { Visibility::Inherited }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_where_clause<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereClause) -> WhereClause {
     WhereClause {
         where_token: Token ! [ where ](tokens_helper(_visitor, &(_i . where_token).0)),
         predicates: FoldHelper::lift(_i . predicates, |it| { _visitor.fold_where_predicate(it) }),
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn fold_where_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WherePredicate) -> WherePredicate {
     match _i {
         WherePredicate::Type(_binding_0, ) => {
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index a14a24f..b9338a5 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -36,9 +36,9 @@
 /// to monitor future changes to `Visitor` in case a new method with a
 /// new default implementation gets introduced.)
 pub trait Visitor<'ast> {
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_abi(&mut self, i: &'ast Abi) { visit_abi(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_angle_bracketed_generic_arguments(&mut self, i: &'ast AngleBracketedGenericArguments) { visit_angle_bracketed_generic_arguments(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_arg_captured(&mut self, i: &'ast ArgCaptured) { visit_arg_captured(self, i) }
@@ -46,129 +46,129 @@
 fn visit_arg_self(&mut self, i: &'ast ArgSelf) { visit_arg_self(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_arg_self_ref(&mut self, i: &'ast ArgSelfRef) { visit_arg_self_ref(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_arm(&mut self, i: &'ast Arm) { visit_arm(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_attr_style(&mut self, i: &'ast AttrStyle) { visit_attr_style(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_attribute(&mut self, i: &'ast Attribute) { visit_attribute(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bare_fn_arg(&mut self, i: &'ast BareFnArg) { visit_bare_fn_arg(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bare_fn_arg_name(&mut self, i: &'ast BareFnArgName) { visit_bare_fn_arg_name(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bin_op(&mut self, i: &'ast BinOp) { visit_bin_op(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_binding(&mut self, i: &'ast Binding) { visit_binding(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_block(&mut self, i: &'ast Block) { visit_block(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bound_lifetimes(&mut self, i: &'ast BoundLifetimes) { visit_bound_lifetimes(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_const_param(&mut self, i: &'ast ConstParam) { visit_const_param(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data(&mut self, i: &'ast Data) { visit_data(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data_enum(&mut self, i: &'ast DataEnum) { visit_data_enum(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data_struct(&mut self, i: &'ast DataStruct) { visit_data_struct(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data_union(&mut self, i: &'ast DataUnion) { visit_data_union(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_derive_input(&mut self, i: &'ast DeriveInput) { visit_derive_input(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr(&mut self, i: &'ast Expr) { visit_expr(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_addr_of(&mut self, i: &'ast ExprAddrOf) { visit_expr_addr_of(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_array(&mut self, i: &'ast ExprArray) { visit_expr_array(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_assign(&mut self, i: &'ast ExprAssign) { visit_expr_assign(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_assign_op(&mut self, i: &'ast ExprAssignOp) { visit_expr_assign_op(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_binary(&mut self, i: &'ast ExprBinary) { visit_expr_binary(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_block(&mut self, i: &'ast ExprBlock) { visit_expr_block(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_box(&mut self, i: &'ast ExprBox) { visit_expr_box(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_break(&mut self, i: &'ast ExprBreak) { visit_expr_break(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_call(&mut self, i: &'ast ExprCall) { visit_expr_call(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_cast(&mut self, i: &'ast ExprCast) { visit_expr_cast(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_catch(&mut self, i: &'ast ExprCatch) { visit_expr_catch(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_closure(&mut self, i: &'ast ExprClosure) { visit_expr_closure(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_continue(&mut self, i: &'ast ExprContinue) { visit_expr_continue(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_field(&mut self, i: &'ast ExprField) { visit_expr_field(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_for_loop(&mut self, i: &'ast ExprForLoop) { visit_expr_for_loop(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_group(&mut self, i: &'ast ExprGroup) { visit_expr_group(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_if(&mut self, i: &'ast ExprIf) { visit_expr_if(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_if_let(&mut self, i: &'ast ExprIfLet) { visit_expr_if_let(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_in_place(&mut self, i: &'ast ExprInPlace) { visit_expr_in_place(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_index(&mut self, i: &'ast ExprIndex) { visit_expr_index(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_lit(&mut self, i: &'ast ExprLit) { visit_expr_lit(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_loop(&mut self, i: &'ast ExprLoop) { visit_expr_loop(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_macro(&mut self, i: &'ast ExprMacro) { visit_expr_macro(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_match(&mut self, i: &'ast ExprMatch) { visit_expr_match(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_method_call(&mut self, i: &'ast ExprMethodCall) { visit_expr_method_call(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_paren(&mut self, i: &'ast ExprParen) { visit_expr_paren(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_path(&mut self, i: &'ast ExprPath) { visit_expr_path(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_range(&mut self, i: &'ast ExprRange) { visit_expr_range(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_repeat(&mut self, i: &'ast ExprRepeat) { visit_expr_repeat(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_return(&mut self, i: &'ast ExprReturn) { visit_expr_return(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_struct(&mut self, i: &'ast ExprStruct) { visit_expr_struct(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_try(&mut self, i: &'ast ExprTry) { visit_expr_try(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_tuple(&mut self, i: &'ast ExprTuple) { visit_expr_tuple(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_type(&mut self, i: &'ast ExprType) { visit_expr_type(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_unary(&mut self, i: &'ast ExprUnary) { visit_expr_unary(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_unsafe(&mut self, i: &'ast ExprUnsafe) { visit_expr_unsafe(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_verbatim(&mut self, i: &'ast ExprVerbatim) { visit_expr_verbatim(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_while(&mut self, i: &'ast ExprWhile) { visit_expr_while(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_while_let(&mut self, i: &'ast ExprWhileLet) { visit_expr_while_let(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_yield(&mut self, i: &'ast ExprYield) { visit_expr_yield(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_field(&mut self, i: &'ast Field) { visit_field(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_field_pat(&mut self, i: &'ast FieldPat) { visit_field_pat(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_field_value(&mut self, i: &'ast FieldValue) { visit_field_value(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_fields(&mut self, i: &'ast Fields) { visit_fields(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_fields_named(&mut self, i: &'ast FieldsNamed) { visit_fields_named(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_fields_unnamed(&mut self, i: &'ast FieldsUnnamed) { visit_fields_unnamed(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_file(&mut self, i: &'ast File) { visit_file(self, i) }
@@ -186,13 +186,13 @@
 fn visit_foreign_item_type(&mut self, i: &'ast ForeignItemType) { visit_foreign_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_foreign_item_verbatim(&mut self, i: &'ast ForeignItemVerbatim) { visit_foreign_item_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_generic_argument(&mut self, i: &'ast GenericArgument) { visit_generic_argument(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_generic_method_argument(&mut self, i: &'ast GenericMethodArgument) { visit_generic_method_argument(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_generic_param(&mut self, i: &'ast GenericParam) { visit_generic_param(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_generics(&mut self, i: &'ast Generics) { visit_generics(self, i) }
 
 fn visit_ident(&mut self, i: &'ast Ident) { visit_ident(self, i) }
@@ -208,7 +208,7 @@
 fn visit_impl_item_type(&mut self, i: &'ast ImplItemType) { visit_impl_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_impl_item_verbatim(&mut self, i: &'ast ImplItemVerbatim) { visit_impl_item_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_index(&mut self, i: &'ast Index) { visit_index(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_item(&mut self, i: &'ast Item) { visit_item(self, i) }
@@ -244,89 +244,89 @@
 fn visit_item_use(&mut self, i: &'ast ItemUse) { visit_item_use(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_item_verbatim(&mut self, i: &'ast ItemVerbatim) { visit_item_verbatim(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_label(&mut self, i: &'ast Label) { visit_label(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_lifetime(&mut self, i: &'ast Lifetime) { visit_lifetime(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_lifetime_def(&mut self, i: &'ast LifetimeDef) { visit_lifetime_def(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_lit(&mut self, i: &'ast Lit) { visit_lit(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_local(&mut self, i: &'ast Local) { visit_local(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_macro(&mut self, i: &'ast Macro) { visit_macro(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_macro_delimiter(&mut self, i: &'ast MacroDelimiter) { visit_macro_delimiter(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_member(&mut self, i: &'ast Member) { visit_member(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_meta_item(&mut self, i: &'ast MetaItem) { visit_meta_item(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_meta_item_list(&mut self, i: &'ast MetaItemList) { visit_meta_item_list(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_meta_name_value(&mut self, i: &'ast MetaNameValue) { visit_meta_name_value(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_method_sig(&mut self, i: &'ast MethodSig) { visit_method_sig(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_method_turbofish(&mut self, i: &'ast MethodTurbofish) { visit_method_turbofish(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_nested_meta_item(&mut self, i: &'ast NestedMetaItem) { visit_nested_meta_item(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_parenthesized_generic_arguments(&mut self, i: &'ast ParenthesizedGenericArguments) { visit_parenthesized_generic_arguments(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat(&mut self, i: &'ast Pat) { visit_pat(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_box(&mut self, i: &'ast PatBox) { visit_pat_box(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_ident(&mut self, i: &'ast PatIdent) { visit_pat_ident(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_lit(&mut self, i: &'ast PatLit) { visit_pat_lit(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_macro(&mut self, i: &'ast PatMacro) { visit_pat_macro(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_path(&mut self, i: &'ast PatPath) { visit_pat_path(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_range(&mut self, i: &'ast PatRange) { visit_pat_range(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_ref(&mut self, i: &'ast PatRef) { visit_pat_ref(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_slice(&mut self, i: &'ast PatSlice) { visit_pat_slice(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_struct(&mut self, i: &'ast PatStruct) { visit_pat_struct(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_tuple(&mut self, i: &'ast PatTuple) { visit_pat_tuple(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_tuple_struct(&mut self, i: &'ast PatTupleStruct) { visit_pat_tuple_struct(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_verbatim(&mut self, i: &'ast PatVerbatim) { visit_pat_verbatim(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_wild(&mut self, i: &'ast PatWild) { visit_pat_wild(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_path(&mut self, i: &'ast Path) { visit_path(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_path_arguments(&mut self, i: &'ast PathArguments) { visit_path_arguments(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_path_segment(&mut self, i: &'ast PathSegment) { visit_path_segment(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_predicate_eq(&mut self, i: &'ast PredicateEq) { visit_predicate_eq(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_predicate_lifetime(&mut self, i: &'ast PredicateLifetime) { visit_predicate_lifetime(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_predicate_type(&mut self, i: &'ast PredicateType) { visit_predicate_type(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_qself(&mut self, i: &'ast QSelf) { visit_qself(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_range_limits(&mut self, i: &'ast RangeLimits) { visit_range_limits(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_return_type(&mut self, i: &'ast ReturnType) { visit_return_type(self, i) }
 
 fn visit_span(&mut self, i: &'ast Span) { visit_span(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_stmt(&mut self, i: &'ast Stmt) { visit_stmt(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_trait_bound(&mut self, i: &'ast TraitBound) { visit_trait_bound(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_trait_bound_modifier(&mut self, i: &'ast TraitBoundModifier) { visit_trait_bound_modifier(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_trait_item(&mut self, i: &'ast TraitItem) { visit_trait_item(self, i) }
@@ -340,43 +340,43 @@
 fn visit_trait_item_type(&mut self, i: &'ast TraitItemType) { visit_trait_item_type(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_trait_item_verbatim(&mut self, i: &'ast TraitItemVerbatim) { visit_trait_item_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type(&mut self, i: &'ast Type) { visit_type(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_array(&mut self, i: &'ast TypeArray) { visit_type_array(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_bare_fn(&mut self, i: &'ast TypeBareFn) { visit_type_bare_fn(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_group(&mut self, i: &'ast TypeGroup) { visit_type_group(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_impl_trait(&mut self, i: &'ast TypeImplTrait) { visit_type_impl_trait(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_infer(&mut self, i: &'ast TypeInfer) { visit_type_infer(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_macro(&mut self, i: &'ast TypeMacro) { visit_type_macro(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_never(&mut self, i: &'ast TypeNever) { visit_type_never(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_param(&mut self, i: &'ast TypeParam) { visit_type_param(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_param_bound(&mut self, i: &'ast TypeParamBound) { visit_type_param_bound(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_paren(&mut self, i: &'ast TypeParen) { visit_type_paren(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_path(&mut self, i: &'ast TypePath) { visit_type_path(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_ptr(&mut self, i: &'ast TypePtr) { visit_type_ptr(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_reference(&mut self, i: &'ast TypeReference) { visit_type_reference(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_slice(&mut self, i: &'ast TypeSlice) { visit_type_slice(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_trait_object(&mut self, i: &'ast TypeTraitObject) { visit_type_trait_object(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_tuple(&mut self, i: &'ast TypeTuple) { visit_type_tuple(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_verbatim(&mut self, i: &'ast TypeVerbatim) { visit_type_verbatim(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_un_op(&mut self, i: &'ast UnOp) { visit_un_op(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_use_glob(&mut self, i: &'ast UseGlob) { visit_use_glob(self, i) }
@@ -386,29 +386,29 @@
 fn visit_use_path(&mut self, i: &'ast UsePath) { visit_use_path(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_use_tree(&mut self, i: &'ast UseTree) { visit_use_tree(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_variant(&mut self, i: &'ast Variant) { visit_variant(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_vis_crate(&mut self, i: &'ast VisCrate) { visit_vis_crate(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_vis_public(&mut self, i: &'ast VisPublic) { visit_vis_public(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_vis_restricted(&mut self, i: &'ast VisRestricted) { visit_vis_restricted(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_visibility(&mut self, i: &'ast Visibility) { visit_visibility(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_where_clause(&mut self, i: &'ast WhereClause) { visit_where_clause(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_where_predicate(&mut self, i: &'ast WherePredicate) { visit_where_predicate(self, i) }
 
 }
 
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_abi<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Abi) {
     tokens_helper(_visitor, &(& _i . extern_token).0);
     if let Some(ref it) = _i . name { _visitor.visit_lit(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_angle_bracketed_generic_arguments<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast AngleBracketedGenericArguments) {
     if let Some(ref it) = _i . colon2_token { tokens_helper(_visitor, &(it).0) };
     tokens_helper(_visitor, &(& _i . lt_token).0);
@@ -433,7 +433,7 @@
     if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
     tokens_helper(_visitor, &(& _i . self_token).0);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_arm<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Arm) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     for el in Punctuated::elements(& _i . pats) { let it = el.item(); _visitor.visit_pat(it) };
@@ -445,7 +445,7 @@
     _visitor.visit_expr(& * _i . body);
     if let Some(ref it) = _i . comma { tokens_helper(_visitor, &(it).0) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_attr_style<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast AttrStyle) {
     match *_i {
         AttrStyle::Outer => { }
@@ -454,7 +454,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_attribute<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Attribute) {
     tokens_helper(_visitor, &(& _i . pound_token).0);
     _visitor.visit_attr_style(& _i . style);
@@ -463,7 +463,7 @@
     // Skipped field _i . tts;
     // Skipped field _i . is_sugared_doc;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bare_fn_arg<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BareFnArg) {
     if let Some(ref it) = _i . name { 
             _visitor.visit_bare_fn_arg_name(& ( it ) . 0);
@@ -471,7 +471,7 @@
          };
     _visitor.visit_type(& _i . ty);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bare_fn_arg_name<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BareFnArgName) {
     match *_i {
         BareFnArgName::Named(ref _binding_0, ) => {
@@ -482,7 +482,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bin_op<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BinOp) {
     match *_i {
         BinOp::Add(ref _binding_0, ) => {
@@ -571,25 +571,25 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_binding<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Binding) {
     _visitor.visit_ident(& _i . ident);
     tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_type(& _i . ty);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_block<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Block) {
     tokens_helper(_visitor, &(& _i . brace_token).0);
     for it in & _i . stmts { _visitor.visit_stmt(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bound_lifetimes<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BoundLifetimes) {
     tokens_helper(_visitor, &(& _i . for_token).0);
     tokens_helper(_visitor, &(& _i . lt_token).0);
     for el in Punctuated::elements(& _i . lifetimes) { let it = el.item(); _visitor.visit_lifetime_def(it) };
     tokens_helper(_visitor, &(& _i . gt_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_const_param<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ConstParam) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . const_token).0);
@@ -599,7 +599,7 @@
     if let Some(ref it) = _i . eq_token { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . default { _visitor.visit_expr(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Data) {
     match *_i {
         Data::Struct(ref _binding_0, ) => {
@@ -613,24 +613,24 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data_enum<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast DataEnum) {
     tokens_helper(_visitor, &(& _i . enum_token).0);
     tokens_helper(_visitor, &(& _i . brace_token).0);
     for el in Punctuated::elements(& _i . variants) { let it = el.item(); _visitor.visit_variant(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast DataStruct) {
     tokens_helper(_visitor, &(& _i . struct_token).0);
     _visitor.visit_fields(& _i . fields);
     if let Some(ref it) = _i . semi_token { tokens_helper(_visitor, &(it).0) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data_union<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast DataUnion) {
     tokens_helper(_visitor, &(& _i . union_token).0);
     _visitor.visit_fields_named(& _i . fields);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_derive_input<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast DeriveInput) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
@@ -638,7 +638,7 @@
     _visitor.visit_generics(& _i . generics);
     _visitor.visit_data(& _i . data);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Expr) {
     match *_i {
         Expr::Box(ref _binding_0, ) => {
@@ -763,80 +763,80 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_addr_of<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprAddrOf) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . and_token).0);
     if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_expr(& * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_array<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprArray) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . bracket_token).0);
     for el in Punctuated::elements(& _i . elems) { let it = el.item(); _visitor.visit_expr(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_assign<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprAssign) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . left);
     tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_expr(& * _i . right);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_assign_op<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprAssignOp) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . left);
     _visitor.visit_bin_op(& _i . op);
     _visitor.visit_expr(& * _i . right);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_binary<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprBinary) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . left);
     _visitor.visit_bin_op(& _i . op);
     _visitor.visit_expr(& * _i . right);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_block<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprBlock) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_block(& _i . block);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_box<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprBox) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . box_token).0);
     _visitor.visit_expr(& * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_break<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprBreak) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . break_token).0);
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     if let Some(ref it) = _i . expr { _visitor.visit_expr(& * * it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_call<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCall) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . func);
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . args) { let it = el.item(); _visitor.visit_expr(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_cast<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCast) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . expr);
     tokens_helper(_visitor, &(& _i . as_token).0);
     _visitor.visit_type(& * _i . ty);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_catch<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCatch) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . do_token).0);
     tokens_helper(_visitor, &(& _i . catch_token).0);
     _visitor.visit_block(& _i . block);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_closure<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprClosure) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . capture { tokens_helper(_visitor, &(it).0) };
@@ -846,20 +846,20 @@
     _visitor.visit_return_type(& _i . output);
     _visitor.visit_expr(& * _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_continue<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprContinue) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . continue_token).0);
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_field<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprField) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . base);
     tokens_helper(_visitor, &(& _i . dot_token).0);
     _visitor.visit_member(& _i . member);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_for_loop<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprForLoop) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . label { _visitor.visit_label(it) };
@@ -869,13 +869,13 @@
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_block(& _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_group<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprGroup) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . group_token).0);
     _visitor.visit_expr(& * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_if<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprIf) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . if_token).0);
@@ -886,7 +886,7 @@
             _visitor.visit_expr(& * ( it ) . 1);
          };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_if_let<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprIfLet) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . if_token).0);
@@ -900,38 +900,38 @@
             _visitor.visit_expr(& * ( it ) . 1);
          };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_in_place<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprInPlace) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . place);
     tokens_helper(_visitor, &(& _i . arrow_token).0);
     _visitor.visit_expr(& * _i . value);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_index<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprIndex) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . expr);
     tokens_helper(_visitor, &(& _i . bracket_token).0);
     _visitor.visit_expr(& * _i . index);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_lit<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprLit) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_lit(& _i . lit);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_loop<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprLoop) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . label { _visitor.visit_label(it) };
     tokens_helper(_visitor, &(& _i . loop_token).0);
     _visitor.visit_block(& _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprMacro) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_macro(& _i . mac);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_match<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprMatch) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . match_token).0);
@@ -939,7 +939,7 @@
     tokens_helper(_visitor, &(& _i . brace_token).0);
     for it in & _i . arms { _visitor.visit_arm(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_method_call<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprMethodCall) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . receiver);
@@ -949,26 +949,26 @@
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . args) { let it = el.item(); _visitor.visit_expr(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_paren<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprParen) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . paren_token).0);
     _visitor.visit_expr(& * _i . expr);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_path<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprPath) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . qself { _visitor.visit_qself(it) };
     _visitor.visit_path(& _i . path);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_range<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprRange) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . from { _visitor.visit_expr(& * * it) };
     _visitor.visit_range_limits(& _i . limits);
     if let Some(ref it) = _i . to { _visitor.visit_expr(& * * it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_repeat<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprRepeat) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . bracket_token).0);
@@ -976,13 +976,13 @@
     tokens_helper(_visitor, &(& _i . semi_token).0);
     _visitor.visit_expr(& * _i . amt);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_return<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprReturn) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . return_token).0);
     if let Some(ref it) = _i . expr { _visitor.visit_expr(& * * it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprStruct) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_path(& _i . path);
@@ -991,42 +991,42 @@
     if let Some(ref it) = _i . dot2_token { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . rest { _visitor.visit_expr(& * * it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_try<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprTry) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . expr);
     tokens_helper(_visitor, &(& _i . question_token).0);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_tuple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprTuple) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . elems) { let it = el.item(); _visitor.visit_expr(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprType) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_expr(& * _i . expr);
     tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& * _i . ty);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_unary<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprUnary) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_un_op(& _i . op);
     _visitor.visit_expr(& * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_unsafe<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprUnsafe) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . unsafe_token).0);
     _visitor.visit_block(& _i . block);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_verbatim<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprVerbatim) {
     // Skipped field _i . tts;
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_while<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprWhile) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . label { _visitor.visit_label(it) };
@@ -1034,7 +1034,7 @@
     _visitor.visit_expr(& * _i . cond);
     _visitor.visit_block(& _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_while_let<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprWhileLet) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . label { _visitor.visit_label(it) };
@@ -1045,13 +1045,13 @@
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_block(& _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_yield<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprYield) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . yield_token).0);
     if let Some(ref it) = _i . expr { _visitor.visit_expr(& * * it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_field<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Field) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
@@ -1059,21 +1059,21 @@
     if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_type(& _i . ty);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_field_pat<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FieldPat) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_member(& _i . member);
     if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_pat(& * _i . pat);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_field_value<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FieldValue) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_member(& _i . member);
     if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_expr(& _i . expr);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_fields<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Fields) {
     match *_i {
         Fields::Named(ref _binding_0, ) => {
@@ -1085,12 +1085,12 @@
         Fields::Unit => { }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_fields_named<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FieldsNamed) {
     tokens_helper(_visitor, &(& _i . brace_token).0);
     for el in Punctuated::elements(& _i . named) { let it = el.item(); _visitor.visit_field(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_fields_unnamed<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FieldsUnnamed) {
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . unnamed) { let it = el.item(); _visitor.visit_field(it) };
@@ -1178,7 +1178,7 @@
 pub fn visit_foreign_item_verbatim<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ForeignItemVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_generic_argument<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast GenericArgument) {
     match *_i {
         GenericArgument::Lifetime(ref _binding_0, ) => {
@@ -1195,7 +1195,7 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_generic_method_argument<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast GenericMethodArgument) {
     match *_i {
         GenericMethodArgument::Type(ref _binding_0, ) => {
@@ -1206,7 +1206,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_generic_param<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast GenericParam) {
     match *_i {
         GenericParam::Type(ref _binding_0, ) => {
@@ -1220,7 +1220,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_generics<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Generics) {
     if let Some(ref it) = _i . lt_token { tokens_helper(_visitor, &(it).0) };
     for el in Punctuated::elements(& _i . params) { let it = el.item(); _visitor.visit_generic_param(it) };
@@ -1295,7 +1295,7 @@
 pub fn visit_impl_item_verbatim<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ImplItemVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_index<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Index) {
     // Skipped field _i . index;
     _visitor.visit_span(& _i . span);
@@ -1523,29 +1523,29 @@
 pub fn visit_item_verbatim<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemVerbatim) {
     // Skipped field _i . tts;
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_label<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Label) {
     _visitor.visit_lifetime(& _i . name);
     tokens_helper(_visitor, &(& _i . colon_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_lifetime<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Lifetime) {
     // Skipped field _i . term;
     _visitor.visit_span(& _i . span);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_lifetime_def<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast LifetimeDef) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_lifetime(& _i . lifetime);
     if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for el in Punctuated::elements(& _i . bounds) { let it = el.item(); _visitor.visit_lifetime(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_lit<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Lit) {
     // Skipped field _i . value;
     _visitor.visit_span(& _i . span);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_local<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Local) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . let_token).0);
@@ -1560,14 +1560,14 @@
          };
     tokens_helper(_visitor, &(& _i . semi_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Macro) {
     _visitor.visit_path(& _i . path);
     tokens_helper(_visitor, &(& _i . bang_token).0);
     _visitor.visit_macro_delimiter(& _i . delimiter);
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_macro_delimiter<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MacroDelimiter) {
     match *_i {
         MacroDelimiter::Paren(ref _binding_0, ) => {
@@ -1581,7 +1581,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_member<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Member) {
     match *_i {
         Member::Named(ref _binding_0, ) => {
@@ -1592,7 +1592,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_meta_item<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaItem) {
     match *_i {
         MetaItem::Term(ref _binding_0, ) => {
@@ -1606,13 +1606,13 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_meta_item_list<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaItemList) {
     _visitor.visit_ident(& _i . ident);
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . nested) { let it = el.item(); _visitor.visit_nested_meta_item(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_meta_name_value<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaNameValue) {
     _visitor.visit_ident(& _i . ident);
     tokens_helper(_visitor, &(& _i . eq_token).0);
@@ -1626,14 +1626,14 @@
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_fn_decl(& _i . decl);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_method_turbofish<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MethodTurbofish) {
     tokens_helper(_visitor, &(& _i . colon2_token).0);
     tokens_helper(_visitor, &(& _i . lt_token).0);
     for el in Punctuated::elements(& _i . args) { let it = el.item(); _visitor.visit_generic_method_argument(it) };
     tokens_helper(_visitor, &(& _i . gt_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_nested_meta_item<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast NestedMetaItem) {
     match *_i {
         NestedMetaItem::MetaItem(ref _binding_0, ) => {
@@ -1644,13 +1644,13 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_parenthesized_generic_arguments<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ParenthesizedGenericArguments) {
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . inputs) { let it = el.item(); _visitor.visit_type(it) };
     _visitor.visit_return_type(& _i . output);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Pat) {
     match *_i {
         Pat::Wild(ref _binding_0, ) => {
@@ -1694,12 +1694,12 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_box<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatBox) {
     tokens_helper(_visitor, &(& _i . box_token).0);
     _visitor.visit_pat(& * _i . pat);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ident<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatIdent) {
     if let Some(ref it) = _i . by_ref { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
@@ -1709,32 +1709,32 @@
             _visitor.visit_pat(& * ( it ) . 1);
          };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_lit<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatLit) {
     _visitor.visit_expr(& * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatMacro) {
     _visitor.visit_macro(& _i . mac);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_path<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatPath) {
     if let Some(ref it) = _i . qself { _visitor.visit_qself(it) };
     _visitor.visit_path(& _i . path);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_range<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatRange) {
     _visitor.visit_expr(& * _i . lo);
     _visitor.visit_range_limits(& _i . limits);
     _visitor.visit_expr(& * _i . hi);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ref<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatRef) {
     tokens_helper(_visitor, &(& _i . and_token).0);
     if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_pat(& * _i . pat);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_slice<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatSlice) {
     tokens_helper(_visitor, &(& _i . bracket_token).0);
     for el in Punctuated::elements(& _i . front) { let it = el.item(); _visitor.visit_pat(it) };
@@ -1743,14 +1743,14 @@
     if let Some(ref it) = _i . comma_token { tokens_helper(_visitor, &(it).0) };
     for el in Punctuated::elements(& _i . back) { let it = el.item(); _visitor.visit_pat(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatStruct) {
     _visitor.visit_path(& _i . path);
     tokens_helper(_visitor, &(& _i . brace_token).0);
     for el in Punctuated::elements(& _i . fields) { let it = el.item(); _visitor.visit_field_pat(it) };
     if let Some(ref it) = _i . dot2_token { tokens_helper(_visitor, &(it).0) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_tuple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatTuple) {
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . front) { let it = el.item(); _visitor.visit_pat(it) };
@@ -1758,25 +1758,25 @@
     if let Some(ref it) = _i . comma_token { tokens_helper(_visitor, &(it).0) };
     for el in Punctuated::elements(& _i . back) { let it = el.item(); _visitor.visit_pat(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_tuple_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatTupleStruct) {
     _visitor.visit_path(& _i . path);
     _visitor.visit_pat_tuple(& _i . pat);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_verbatim<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatVerbatim) {
     // Skipped field _i . tts;
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_wild<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatWild) {
     tokens_helper(_visitor, &(& _i . underscore_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_path<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Path) {
     if let Some(ref it) = _i . leading_colon { tokens_helper(_visitor, &(it).0) };
     for el in Punctuated::elements(& _i . segments) { let it = el.item(); _visitor.visit_path_segment(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_path_arguments<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PathArguments) {
     match *_i {
         PathArguments::None => { }
@@ -1788,31 +1788,31 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_path_segment<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PathSegment) {
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_path_arguments(& _i . arguments);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_predicate_eq<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PredicateEq) {
     _visitor.visit_type(& _i . lhs_ty);
     tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_type(& _i . rhs_ty);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_predicate_lifetime<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PredicateLifetime) {
     _visitor.visit_lifetime(& _i . lifetime);
     if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for el in Punctuated::elements(& _i . bounds) { let it = el.item(); _visitor.visit_lifetime(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_predicate_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PredicateType) {
     if let Some(ref it) = _i . lifetimes { _visitor.visit_bound_lifetimes(it) };
     _visitor.visit_type(& _i . bounded_ty);
     tokens_helper(_visitor, &(& _i . colon_token).0);
     for el in Punctuated::elements(& _i . bounds) { let it = el.item(); _visitor.visit_type_param_bound(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_qself<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast QSelf) {
     tokens_helper(_visitor, &(& _i . lt_token).0);
     _visitor.visit_type(& * _i . ty);
@@ -1820,7 +1820,7 @@
     if let Some(ref it) = _i . as_token { tokens_helper(_visitor, &(it).0) };
     tokens_helper(_visitor, &(& _i . gt_token).0);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_range_limits<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast RangeLimits) {
     match *_i {
         RangeLimits::HalfOpen(ref _binding_0, ) => {
@@ -1831,7 +1831,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_return_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ReturnType) {
     match *_i {
         ReturnType::Default => { }
@@ -1844,7 +1844,7 @@
 
 pub fn visit_span<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Span) {
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_stmt<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Stmt) {
     match *_i {
         Stmt::Local(ref _binding_0, ) => {
@@ -1862,13 +1862,13 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_trait_bound<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitBound) {
     _visitor.visit_trait_bound_modifier(& _i . modifier);
     if let Some(ref it) = _i . lifetimes { _visitor.visit_bound_lifetimes(it) };
     _visitor.visit_path(& _i . path);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_trait_bound_modifier<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitBoundModifier) {
     match *_i {
         TraitBoundModifier::None => { }
@@ -1941,7 +1941,7 @@
 pub fn visit_trait_item_verbatim<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitItemVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Type) {
     match *_i {
         Type::Slice(ref _binding_0, ) => {
@@ -1991,14 +1991,14 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_array<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeArray) {
     tokens_helper(_visitor, &(& _i . bracket_token).0);
     _visitor.visit_type(& * _i . elem);
     tokens_helper(_visitor, &(& _i . semi_token).0);
     _visitor.visit_expr(& _i . len);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_bare_fn<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeBareFn) {
     if let Some(ref it) = _i . unsafety { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . abi { _visitor.visit_abi(it) };
@@ -2009,29 +2009,29 @@
     if let Some(ref it) = _i . variadic { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_return_type(& _i . output);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_group<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeGroup) {
     tokens_helper(_visitor, &(& _i . group_token).0);
     _visitor.visit_type(& * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_impl_trait<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeImplTrait) {
     tokens_helper(_visitor, &(& _i . impl_token).0);
     for el in Punctuated::elements(& _i . bounds) { let it = el.item(); _visitor.visit_type_param_bound(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_infer<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeInfer) {
     tokens_helper(_visitor, &(& _i . underscore_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeMacro) {
     _visitor.visit_macro(& _i . mac);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_never<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeNever) {
     tokens_helper(_visitor, &(& _i . bang_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_param<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeParam) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_ident(& _i . ident);
@@ -2040,7 +2040,7 @@
     if let Some(ref it) = _i . eq_token { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . default { _visitor.visit_type(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_param_bound<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeParamBound) {
     match *_i {
         TypeParamBound::Trait(ref _binding_0, ) => {
@@ -2051,50 +2051,50 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_paren<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeParen) {
     tokens_helper(_visitor, &(& _i . paren_token).0);
     _visitor.visit_type(& * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_path<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypePath) {
     if let Some(ref it) = _i . qself { _visitor.visit_qself(it) };
     _visitor.visit_path(& _i . path);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_ptr<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypePtr) {
     tokens_helper(_visitor, &(& _i . star_token).0);
     if let Some(ref it) = _i . const_token { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_type(& * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_reference<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeReference) {
     tokens_helper(_visitor, &(& _i . and_token).0);
     if let Some(ref it) = _i . lifetime { _visitor.visit_lifetime(it) };
     if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_type(& * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_slice<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeSlice) {
     tokens_helper(_visitor, &(& _i . bracket_token).0);
     _visitor.visit_type(& * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_trait_object<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeTraitObject) {
     if let Some(ref it) = _i . dyn_token { tokens_helper(_visitor, &(it).0) };
     for el in Punctuated::elements(& _i . bounds) { let it = el.item(); _visitor.visit_type_param_bound(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_tuple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeTuple) {
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in Punctuated::elements(& _i . elems) { let it = el.item(); _visitor.visit_type(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_verbatim<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_un_op<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UnOp) {
     match *_i {
         UnOp::Deref(ref _binding_0, ) => {
@@ -2139,7 +2139,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_variant<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Variant) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_ident(& _i . ident);
@@ -2149,24 +2149,24 @@
             _visitor.visit_expr(& ( it ) . 1);
          };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_vis_crate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisCrate) {
     tokens_helper(_visitor, &(& _i . pub_token).0);
     tokens_helper(_visitor, &(& _i . paren_token).0);
     tokens_helper(_visitor, &(& _i . crate_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_vis_public<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisPublic) {
     tokens_helper(_visitor, &(& _i . pub_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_vis_restricted<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisRestricted) {
     tokens_helper(_visitor, &(& _i . pub_token).0);
     tokens_helper(_visitor, &(& _i . paren_token).0);
     if let Some(ref it) = _i . in_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_path(& * _i . path);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_visibility<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Visibility) {
     match *_i {
         Visibility::Public(ref _binding_0, ) => {
@@ -2181,12 +2181,12 @@
         Visibility::Inherited => { }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_where_clause<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereClause) {
     tokens_helper(_visitor, &(& _i . where_token).0);
     for el in Punctuated::elements(& _i . predicates) { let it = el.item(); _visitor.visit_where_predicate(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_where_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WherePredicate) {
     match *_i {
         WherePredicate::Type(ref _binding_0, ) => {
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 250ce97..77556bd 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -36,9 +36,9 @@
 /// to monitor future changes to `VisitorMut` in case a new method with a
 /// new default implementation gets introduced.)
 pub trait VisitorMut {
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_abi_mut(&mut self, i: &mut Abi) { visit_abi_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_angle_bracketed_generic_arguments_mut(&mut self, i: &mut AngleBracketedGenericArguments) { visit_angle_bracketed_generic_arguments_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_arg_captured_mut(&mut self, i: &mut ArgCaptured) { visit_arg_captured_mut(self, i) }
@@ -46,129 +46,129 @@
 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(&mut self, i: &mut ArgSelfRef) { visit_arg_self_ref_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_arm_mut(&mut self, i: &mut Arm) { visit_arm_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_attr_style_mut(&mut self, i: &mut AttrStyle) { visit_attr_style_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_attribute_mut(&mut self, i: &mut Attribute) { visit_attribute_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bare_fn_arg_mut(&mut self, i: &mut BareFnArg) { visit_bare_fn_arg_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bare_fn_arg_name_mut(&mut self, i: &mut BareFnArgName) { visit_bare_fn_arg_name_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bin_op_mut(&mut self, i: &mut BinOp) { visit_bin_op_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_binding_mut(&mut self, i: &mut Binding) { visit_binding_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_block_mut(&mut self, i: &mut Block) { visit_block_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_bound_lifetimes_mut(&mut self, i: &mut BoundLifetimes) { visit_bound_lifetimes_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_const_param_mut(&mut self, i: &mut ConstParam) { visit_const_param_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data_mut(&mut self, i: &mut Data) { visit_data_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data_enum_mut(&mut self, i: &mut DataEnum) { visit_data_enum_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data_struct_mut(&mut self, i: &mut DataStruct) { visit_data_struct_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_data_union_mut(&mut self, i: &mut DataUnion) { visit_data_union_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_derive_input_mut(&mut self, i: &mut DeriveInput) { visit_derive_input_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_mut(&mut self, i: &mut Expr) { visit_expr_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_addr_of_mut(&mut self, i: &mut ExprAddrOf) { visit_expr_addr_of_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_array_mut(&mut self, i: &mut ExprArray) { visit_expr_array_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_assign_mut(&mut self, i: &mut ExprAssign) { visit_expr_assign_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_assign_op_mut(&mut self, i: &mut ExprAssignOp) { visit_expr_assign_op_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_binary_mut(&mut self, i: &mut ExprBinary) { visit_expr_binary_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_block_mut(&mut self, i: &mut ExprBlock) { visit_expr_block_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_box_mut(&mut self, i: &mut ExprBox) { visit_expr_box_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_break_mut(&mut self, i: &mut ExprBreak) { visit_expr_break_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_call_mut(&mut self, i: &mut ExprCall) { visit_expr_call_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) { visit_expr_cast_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_catch_mut(&mut self, i: &mut ExprCatch) { visit_expr_catch_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_closure_mut(&mut self, i: &mut ExprClosure) { visit_expr_closure_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_continue_mut(&mut self, i: &mut ExprContinue) { visit_expr_continue_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_field_mut(&mut self, i: &mut ExprField) { visit_expr_field_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_for_loop_mut(&mut self, i: &mut ExprForLoop) { visit_expr_for_loop_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_group_mut(&mut self, i: &mut ExprGroup) { visit_expr_group_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_if_mut(&mut self, i: &mut ExprIf) { visit_expr_if_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_if_let_mut(&mut self, i: &mut ExprIfLet) { visit_expr_if_let_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_in_place_mut(&mut self, i: &mut ExprInPlace) { visit_expr_in_place_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_index_mut(&mut self, i: &mut ExprIndex) { visit_expr_index_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_lit_mut(&mut self, i: &mut ExprLit) { visit_expr_lit_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_loop_mut(&mut self, i: &mut ExprLoop) { visit_expr_loop_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_macro_mut(&mut self, i: &mut ExprMacro) { visit_expr_macro_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) { visit_expr_match_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_method_call_mut(&mut self, i: &mut ExprMethodCall) { visit_expr_method_call_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_paren_mut(&mut self, i: &mut ExprParen) { visit_expr_paren_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_path_mut(&mut self, i: &mut ExprPath) { visit_expr_path_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_range_mut(&mut self, i: &mut ExprRange) { visit_expr_range_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_repeat_mut(&mut self, i: &mut ExprRepeat) { visit_expr_repeat_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_return_mut(&mut self, i: &mut ExprReturn) { visit_expr_return_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_struct_mut(&mut self, i: &mut ExprStruct) { visit_expr_struct_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_try_mut(&mut self, i: &mut ExprTry) { visit_expr_try_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_tuple_mut(&mut self, i: &mut ExprTuple) { visit_expr_tuple_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_type_mut(&mut self, i: &mut ExprType) { visit_expr_type_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_unary_mut(&mut self, i: &mut ExprUnary) { visit_expr_unary_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_unsafe_mut(&mut self, i: &mut ExprUnsafe) { visit_expr_unsafe_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_verbatim_mut(&mut self, i: &mut ExprVerbatim) { visit_expr_verbatim_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_while_mut(&mut self, i: &mut ExprWhile) { visit_expr_while_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_while_let_mut(&mut self, i: &mut ExprWhileLet) { visit_expr_while_let_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_expr_yield_mut(&mut self, i: &mut ExprYield) { visit_expr_yield_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_field_mut(&mut self, i: &mut Field) { visit_field_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_field_pat_mut(&mut self, i: &mut FieldPat) { visit_field_pat_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_field_value_mut(&mut self, i: &mut FieldValue) { visit_field_value_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_fields_mut(&mut self, i: &mut Fields) { visit_fields_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_fields_named_mut(&mut self, i: &mut FieldsNamed) { visit_fields_named_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_fields_unnamed_mut(&mut self, i: &mut FieldsUnnamed) { visit_fields_unnamed_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_file_mut(&mut self, i: &mut File) { visit_file_mut(self, i) }
@@ -186,13 +186,13 @@
 fn visit_foreign_item_type_mut(&mut self, i: &mut ForeignItemType) { visit_foreign_item_type_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_foreign_item_verbatim_mut(&mut self, i: &mut ForeignItemVerbatim) { visit_foreign_item_verbatim_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_generic_argument_mut(&mut self, i: &mut GenericArgument) { visit_generic_argument_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_generic_method_argument_mut(&mut self, i: &mut GenericMethodArgument) { visit_generic_method_argument_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_generic_param_mut(&mut self, i: &mut GenericParam) { visit_generic_param_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_generics_mut(&mut self, i: &mut Generics) { visit_generics_mut(self, i) }
 
 fn visit_ident_mut(&mut self, i: &mut Ident) { visit_ident_mut(self, i) }
@@ -208,7 +208,7 @@
 fn visit_impl_item_type_mut(&mut self, i: &mut ImplItemType) { visit_impl_item_type_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_impl_item_verbatim_mut(&mut self, i: &mut ImplItemVerbatim) { visit_impl_item_verbatim_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_index_mut(&mut self, i: &mut Index) { visit_index_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_item_mut(&mut self, i: &mut Item) { visit_item_mut(self, i) }
@@ -244,89 +244,89 @@
 fn visit_item_use_mut(&mut self, i: &mut ItemUse) { visit_item_use_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_item_verbatim_mut(&mut self, i: &mut ItemVerbatim) { visit_item_verbatim_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_label_mut(&mut self, i: &mut Label) { visit_label_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_lifetime_mut(&mut self, i: &mut Lifetime) { visit_lifetime_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_lifetime_def_mut(&mut self, i: &mut LifetimeDef) { visit_lifetime_def_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_lit_mut(&mut self, i: &mut Lit) { visit_lit_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_local_mut(&mut self, i: &mut Local) { visit_local_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_macro_mut(&mut self, i: &mut Macro) { visit_macro_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_macro_delimiter_mut(&mut self, i: &mut MacroDelimiter) { visit_macro_delimiter_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_member_mut(&mut self, i: &mut Member) { visit_member_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_meta_item_mut(&mut self, i: &mut MetaItem) { visit_meta_item_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_meta_item_list_mut(&mut self, i: &mut MetaItemList) { visit_meta_item_list_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 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(&mut self, i: &mut MethodSig) { visit_method_sig_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_method_turbofish_mut(&mut self, i: &mut MethodTurbofish) { visit_method_turbofish_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_nested_meta_item_mut(&mut self, i: &mut NestedMetaItem) { visit_nested_meta_item_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_parenthesized_generic_arguments_mut(&mut self, i: &mut ParenthesizedGenericArguments) { visit_parenthesized_generic_arguments_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_mut(&mut self, i: &mut Pat) { visit_pat_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_box_mut(&mut self, i: &mut PatBox) { visit_pat_box_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_ident_mut(&mut self, i: &mut PatIdent) { visit_pat_ident_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_lit_mut(&mut self, i: &mut PatLit) { visit_pat_lit_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_macro_mut(&mut self, i: &mut PatMacro) { visit_pat_macro_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_path_mut(&mut self, i: &mut PatPath) { visit_pat_path_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_range_mut(&mut self, i: &mut PatRange) { visit_pat_range_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_ref_mut(&mut self, i: &mut PatRef) { visit_pat_ref_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_slice_mut(&mut self, i: &mut PatSlice) { visit_pat_slice_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_struct_mut(&mut self, i: &mut PatStruct) { visit_pat_struct_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_tuple_mut(&mut self, i: &mut PatTuple) { visit_pat_tuple_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_tuple_struct_mut(&mut self, i: &mut PatTupleStruct) { visit_pat_tuple_struct_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_verbatim_mut(&mut self, i: &mut PatVerbatim) { visit_pat_verbatim_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_pat_wild_mut(&mut self, i: &mut PatWild) { visit_pat_wild_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_path_mut(&mut self, i: &mut Path) { visit_path_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_path_arguments_mut(&mut self, i: &mut PathArguments) { visit_path_arguments_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_path_segment_mut(&mut self, i: &mut PathSegment) { visit_path_segment_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_predicate_eq_mut(&mut self, i: &mut PredicateEq) { visit_predicate_eq_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_predicate_lifetime_mut(&mut self, i: &mut PredicateLifetime) { visit_predicate_lifetime_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_predicate_type_mut(&mut self, i: &mut PredicateType) { visit_predicate_type_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_qself_mut(&mut self, i: &mut QSelf) { visit_qself_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_range_limits_mut(&mut self, i: &mut RangeLimits) { visit_range_limits_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_return_type_mut(&mut self, i: &mut ReturnType) { visit_return_type_mut(self, i) }
 
 fn visit_span_mut(&mut self, i: &mut Span) { visit_span_mut(self, i) }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 fn visit_stmt_mut(&mut self, i: &mut Stmt) { visit_stmt_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_trait_bound_mut(&mut self, i: &mut TraitBound) { visit_trait_bound_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 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(&mut self, i: &mut TraitItem) { visit_trait_item_mut(self, i) }
@@ -340,43 +340,43 @@
 fn visit_trait_item_type_mut(&mut self, i: &mut TraitItemType) { visit_trait_item_type_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_trait_item_verbatim_mut(&mut self, i: &mut TraitItemVerbatim) { visit_trait_item_verbatim_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_mut(&mut self, i: &mut Type) { visit_type_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_array_mut(&mut self, i: &mut TypeArray) { visit_type_array_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_bare_fn_mut(&mut self, i: &mut TypeBareFn) { visit_type_bare_fn_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_group_mut(&mut self, i: &mut TypeGroup) { visit_type_group_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_impl_trait_mut(&mut self, i: &mut TypeImplTrait) { visit_type_impl_trait_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_infer_mut(&mut self, i: &mut TypeInfer) { visit_type_infer_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_macro_mut(&mut self, i: &mut TypeMacro) { visit_type_macro_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_never_mut(&mut self, i: &mut TypeNever) { visit_type_never_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_param_mut(&mut self, i: &mut TypeParam) { visit_type_param_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_param_bound_mut(&mut self, i: &mut TypeParamBound) { visit_type_param_bound_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_paren_mut(&mut self, i: &mut TypeParen) { visit_type_paren_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_path_mut(&mut self, i: &mut TypePath) { visit_type_path_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_ptr_mut(&mut self, i: &mut TypePtr) { visit_type_ptr_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_reference_mut(&mut self, i: &mut TypeReference) { visit_type_reference_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_slice_mut(&mut self, i: &mut TypeSlice) { visit_type_slice_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_trait_object_mut(&mut self, i: &mut TypeTraitObject) { visit_type_trait_object_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_tuple_mut(&mut self, i: &mut TypeTuple) { visit_type_tuple_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_type_verbatim_mut(&mut self, i: &mut TypeVerbatim) { visit_type_verbatim_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_un_op_mut(&mut self, i: &mut UnOp) { visit_un_op_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_use_glob_mut(&mut self, i: &mut UseGlob) { visit_use_glob_mut(self, i) }
@@ -386,29 +386,29 @@
 fn visit_use_path_mut(&mut self, i: &mut UsePath) { visit_use_path_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_use_tree_mut(&mut self, i: &mut UseTree) { visit_use_tree_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_variant_mut(&mut self, i: &mut Variant) { visit_variant_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_vis_crate_mut(&mut self, i: &mut VisCrate) { visit_vis_crate_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_vis_public_mut(&mut self, i: &mut VisPublic) { visit_vis_public_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_vis_restricted_mut(&mut self, i: &mut VisRestricted) { visit_vis_restricted_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_visibility_mut(&mut self, i: &mut Visibility) { visit_visibility_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_where_clause_mut(&mut self, i: &mut WhereClause) { visit_where_clause_mut(self, i) }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_where_predicate_mut(&mut self, i: &mut WherePredicate) { visit_where_predicate_mut(self, i) }
 
 }
 
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_abi_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Abi) {
     tokens_helper(_visitor, &mut (& mut _i . extern_token).0);
     if let Some(ref mut it) = _i . name { _visitor.visit_lit_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_angle_bracketed_generic_arguments_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AngleBracketedGenericArguments) {
     if let Some(ref mut it) = _i . colon2_token { tokens_helper(_visitor, &mut (it).0) };
     tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
@@ -433,7 +433,7 @@
     if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
     tokens_helper(_visitor, &mut (& mut _i . self_token).0);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_arm_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Arm) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     for mut el in Punctuated::elements_mut(& mut _i . pats) { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
@@ -445,7 +445,7 @@
     _visitor.visit_expr_mut(& mut * _i . body);
     if let Some(ref mut it) = _i . comma { tokens_helper(_visitor, &mut (it).0) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_attr_style_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AttrStyle) {
     match *_i {
         AttrStyle::Outer => { }
@@ -454,7 +454,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_attribute_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Attribute) {
     tokens_helper(_visitor, &mut (& mut _i . pound_token).0);
     _visitor.visit_attr_style_mut(& mut _i . style);
@@ -463,7 +463,7 @@
     // Skipped field _i . tts;
     // Skipped field _i . is_sugared_doc;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bare_fn_arg_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnArg) {
     if let Some(ref mut it) = _i . name { 
             _visitor.visit_bare_fn_arg_name_mut(& mut ( it ) . 0);
@@ -471,7 +471,7 @@
          };
     _visitor.visit_type_mut(& mut _i . ty);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bare_fn_arg_name_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnArgName) {
     match *_i {
         BareFnArgName::Named(ref mut _binding_0, ) => {
@@ -482,7 +482,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bin_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BinOp) {
     match *_i {
         BinOp::Add(ref mut _binding_0, ) => {
@@ -571,25 +571,25 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_binding_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Binding) {
     _visitor.visit_ident_mut(& mut _i . ident);
     tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_type_mut(& mut _i . ty);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_block_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Block) {
     tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for it in & mut _i . stmts { _visitor.visit_stmt_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_bound_lifetimes_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BoundLifetimes) {
     tokens_helper(_visitor, &mut (& mut _i . for_token).0);
     tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . lifetimes) { let it = el.item_mut(); _visitor.visit_lifetime_def_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . gt_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_const_param_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ConstParam) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . const_token).0);
@@ -599,7 +599,7 @@
     if let Some(ref mut it) = _i . eq_token { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . default { _visitor.visit_expr_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Data) {
     match *_i {
         Data::Struct(ref mut _binding_0, ) => {
@@ -613,24 +613,24 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data_enum_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut DataEnum) {
     tokens_helper(_visitor, &mut (& mut _i . enum_token).0);
     tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . variants) { let it = el.item_mut(); _visitor.visit_variant_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut DataStruct) {
     tokens_helper(_visitor, &mut (& mut _i . struct_token).0);
     _visitor.visit_fields_mut(& mut _i . fields);
     if let Some(ref mut it) = _i . semi_token { tokens_helper(_visitor, &mut (it).0) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_data_union_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut DataUnion) {
     tokens_helper(_visitor, &mut (& mut _i . union_token).0);
     _visitor.visit_fields_named_mut(& mut _i . fields);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_derive_input_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut DeriveInput) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
@@ -638,7 +638,7 @@
     _visitor.visit_generics_mut(& mut _i . generics);
     _visitor.visit_data_mut(& mut _i . data);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Expr) {
     match *_i {
         Expr::Box(ref mut _binding_0, ) => {
@@ -763,80 +763,80 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_addr_of_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAddrOf) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . and_token).0);
     if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_expr_mut(& mut * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_array_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprArray) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . elems) { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_assign_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssign) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . left);
     tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_expr_mut(& mut * _i . right);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_assign_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssignOp) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . left);
     _visitor.visit_bin_op_mut(& mut _i . op);
     _visitor.visit_expr_mut(& mut * _i . right);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_binary_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBinary) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . left);
     _visitor.visit_bin_op_mut(& mut _i . op);
     _visitor.visit_expr_mut(& mut * _i . right);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_block_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBlock) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_block_mut(& mut _i . block);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_box_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBox) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . box_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_break_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBreak) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . break_token).0);
     if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
     if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(& mut * * it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_call_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCall) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . func);
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . args) { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_cast_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCast) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . expr);
     tokens_helper(_visitor, &mut (& mut _i . as_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_catch_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCatch) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . do_token).0);
     tokens_helper(_visitor, &mut (& mut _i . catch_token).0);
     _visitor.visit_block_mut(& mut _i . block);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_closure_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprClosure) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . capture { tokens_helper(_visitor, &mut (it).0) };
@@ -846,20 +846,20 @@
     _visitor.visit_return_type_mut(& mut _i . output);
     _visitor.visit_expr_mut(& mut * _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_continue_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprContinue) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . continue_token).0);
     if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprField) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . base);
     tokens_helper(_visitor, &mut (& mut _i . dot_token).0);
     _visitor.visit_member_mut(& mut _i . member);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_for_loop_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprForLoop) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . label { _visitor.visit_label_mut(it) };
@@ -869,13 +869,13 @@
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_block_mut(& mut _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprGroup) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . group_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_if_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIf) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . if_token).0);
@@ -886,7 +886,7 @@
             _visitor.visit_expr_mut(& mut * ( it ) . 1);
          };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_if_let_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIfLet) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . if_token).0);
@@ -900,38 +900,38 @@
             _visitor.visit_expr_mut(& mut * ( it ) . 1);
          };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_in_place_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprInPlace) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . place);
     tokens_helper(_visitor, &mut (& mut _i . arrow_token).0);
     _visitor.visit_expr_mut(& mut * _i . value);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_index_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIndex) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . expr);
     tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     _visitor.visit_expr_mut(& mut * _i . index);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_lit_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprLit) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_lit_mut(& mut _i . lit);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_loop_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprLoop) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . label { _visitor.visit_label_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . loop_token).0);
     _visitor.visit_block_mut(& mut _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMacro) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_macro_mut(& mut _i . mac);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_match_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMatch) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . match_token).0);
@@ -939,7 +939,7 @@
     tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for it in & mut _i . arms { _visitor.visit_arm_mut(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_method_call_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMethodCall) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . receiver);
@@ -949,26 +949,26 @@
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . args) { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprParen) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprPath) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . qself { _visitor.visit_qself_mut(it) };
     _visitor.visit_path_mut(& mut _i . path);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_range_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRange) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . from { _visitor.visit_expr_mut(& mut * * it) };
     _visitor.visit_range_limits_mut(& mut _i . limits);
     if let Some(ref mut it) = _i . to { _visitor.visit_expr_mut(& mut * * it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_repeat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRepeat) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
@@ -976,13 +976,13 @@
     tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
     _visitor.visit_expr_mut(& mut * _i . amt);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_return_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprReturn) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . return_token).0);
     if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(& mut * * it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprStruct) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_path_mut(& mut _i . path);
@@ -991,42 +991,42 @@
     if let Some(ref mut it) = _i . dot2_token { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . rest { _visitor.visit_expr_mut(& mut * * it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_try_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTry) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . expr);
     tokens_helper(_visitor, &mut (& mut _i . question_token).0);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTuple) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . elems) { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprType) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_expr_mut(& mut * _i . expr);
     tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_unary_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprUnary) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_un_op_mut(& mut _i . op);
     _visitor.visit_expr_mut(& mut * _i . expr);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_unsafe_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprUnsafe) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . unsafe_token).0);
     _visitor.visit_block_mut(& mut _i . block);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_verbatim_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprVerbatim) {
     // Skipped field _i . tts;
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_while_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhile) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . label { _visitor.visit_label_mut(it) };
@@ -1034,7 +1034,7 @@
     _visitor.visit_expr_mut(& mut * _i . cond);
     _visitor.visit_block_mut(& mut _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_while_let_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhileLet) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . label { _visitor.visit_label_mut(it) };
@@ -1045,13 +1045,13 @@
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_block_mut(& mut _i . body);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( feature = "full" ) ] # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_expr_yield_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprYield) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . yield_token).0);
     if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(& mut * * it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Field) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
@@ -1059,21 +1059,21 @@
     if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_type_mut(& mut _i . ty);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_field_pat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldPat) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_member_mut(& mut _i . member);
     if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_pat_mut(& mut * _i . pat);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_field_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldValue) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_member_mut(& mut _i . member);
     if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_expr_mut(& mut _i . expr);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_fields_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Fields) {
     match *_i {
         Fields::Named(ref mut _binding_0, ) => {
@@ -1085,12 +1085,12 @@
         Fields::Unit => { }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_fields_named_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldsNamed) {
     tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . named) { let it = el.item_mut(); _visitor.visit_field_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_fields_unnamed_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldsUnnamed) {
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . unnamed) { let it = el.item_mut(); _visitor.visit_field_mut(it) };
@@ -1178,7 +1178,7 @@
 pub fn visit_foreign_item_verbatim_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_generic_argument_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut GenericArgument) {
     match *_i {
         GenericArgument::Lifetime(ref mut _binding_0, ) => {
@@ -1195,7 +1195,7 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_generic_method_argument_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut GenericMethodArgument) {
     match *_i {
         GenericMethodArgument::Type(ref mut _binding_0, ) => {
@@ -1206,7 +1206,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_generic_param_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut GenericParam) {
     match *_i {
         GenericParam::Type(ref mut _binding_0, ) => {
@@ -1220,7 +1220,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_generics_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Generics) {
     if let Some(ref mut it) = _i . lt_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in Punctuated::elements_mut(& mut _i . params) { let it = el.item_mut(); _visitor.visit_generic_param_mut(it) };
@@ -1295,7 +1295,7 @@
 pub fn visit_impl_item_verbatim_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_index_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Index) {
     // Skipped field _i . index;
     _visitor.visit_span_mut(& mut _i . span);
@@ -1523,29 +1523,29 @@
 pub fn visit_item_verbatim_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemVerbatim) {
     // Skipped field _i . tts;
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_label_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Label) {
     _visitor.visit_lifetime_mut(& mut _i . name);
     tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_lifetime_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Lifetime) {
     // Skipped field _i . term;
     _visitor.visit_span_mut(& mut _i . span);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_lifetime_def_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut LifetimeDef) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_lifetime_mut(& mut _i . lifetime);
     if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in Punctuated::elements_mut(& mut _i . bounds) { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_lit_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Lit) {
     // Skipped field _i . value;
     _visitor.visit_span_mut(& mut _i . span);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_local_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Local) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . let_token).0);
@@ -1560,14 +1560,14 @@
          };
     tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Macro) {
     _visitor.visit_path_mut(& mut _i . path);
     tokens_helper(_visitor, &mut (& mut _i . bang_token).0);
     _visitor.visit_macro_delimiter_mut(& mut _i . delimiter);
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_macro_delimiter_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MacroDelimiter) {
     match *_i {
         MacroDelimiter::Paren(ref mut _binding_0, ) => {
@@ -1581,7 +1581,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_member_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Member) {
     match *_i {
         Member::Named(ref mut _binding_0, ) => {
@@ -1592,7 +1592,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_meta_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItem) {
     match *_i {
         MetaItem::Term(ref mut _binding_0, ) => {
@@ -1606,13 +1606,13 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_meta_item_list_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItemList) {
     _visitor.visit_ident_mut(& mut _i . ident);
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . nested) { let it = el.item_mut(); _visitor.visit_nested_meta_item_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_meta_name_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaNameValue) {
     _visitor.visit_ident_mut(& mut _i . ident);
     tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
@@ -1626,14 +1626,14 @@
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_fn_decl_mut(& mut _i . decl);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_method_turbofish_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MethodTurbofish) {
     tokens_helper(_visitor, &mut (& mut _i . colon2_token).0);
     tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . args) { let it = el.item_mut(); _visitor.visit_generic_method_argument_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . gt_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_nested_meta_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut NestedMetaItem) {
     match *_i {
         NestedMetaItem::MetaItem(ref mut _binding_0, ) => {
@@ -1644,13 +1644,13 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_parenthesized_generic_arguments_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ParenthesizedGenericArguments) {
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . inputs) { let it = el.item_mut(); _visitor.visit_type_mut(it) };
     _visitor.visit_return_type_mut(& mut _i . output);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Pat) {
     match *_i {
         Pat::Wild(ref mut _binding_0, ) => {
@@ -1694,12 +1694,12 @@
         }
     }
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_box_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatBox) {
     tokens_helper(_visitor, &mut (& mut _i . box_token).0);
     _visitor.visit_pat_mut(& mut * _i . pat);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ident_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatIdent) {
     if let Some(ref mut it) = _i . by_ref { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
@@ -1709,32 +1709,32 @@
             _visitor.visit_pat_mut(& mut * ( it ) . 1);
          };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 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" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatMacro) {
     _visitor.visit_macro_mut(& mut _i . mac);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 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(it) };
     _visitor.visit_path_mut(& mut _i . path);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_range_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatRange) {
     _visitor.visit_expr_mut(& mut * _i . lo);
     _visitor.visit_range_limits_mut(& mut _i . limits);
     _visitor.visit_expr_mut(& mut * _i . hi);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatRef) {
     tokens_helper(_visitor, &mut (& mut _i . and_token).0);
     if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_pat_mut(& mut * _i . pat);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_slice_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatSlice) {
     tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . front) { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
@@ -1743,14 +1743,14 @@
     if let Some(ref mut it) = _i . comma_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in Punctuated::elements_mut(& mut _i . back) { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatStruct) {
     _visitor.visit_path_mut(& mut _i . path);
     tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . fields) { let it = el.item_mut(); _visitor.visit_field_pat_mut(it) };
     if let Some(ref mut it) = _i . dot2_token { tokens_helper(_visitor, &mut (it).0) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatTuple) {
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . front) { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
@@ -1758,25 +1758,25 @@
     if let Some(ref mut it) = _i . comma_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in Punctuated::elements_mut(& mut _i . back) { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 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" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_verbatim_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatVerbatim) {
     // Skipped field _i . tts;
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_wild_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatWild) {
     tokens_helper(_visitor, &mut (& mut _i . underscore_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Path) {
     if let Some(ref mut it) = _i . leading_colon { tokens_helper(_visitor, &mut (it).0) };
     for mut el in Punctuated::elements_mut(& mut _i . segments) { let it = el.item_mut(); _visitor.visit_path_segment_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_path_arguments_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathArguments) {
     match *_i {
         PathArguments::None => { }
@@ -1788,31 +1788,31 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_path_segment_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathSegment) {
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_path_arguments_mut(& mut _i . arguments);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_predicate_eq_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PredicateEq) {
     _visitor.visit_type_mut(& mut _i . lhs_ty);
     tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_type_mut(& mut _i . rhs_ty);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_predicate_lifetime_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PredicateLifetime) {
     _visitor.visit_lifetime_mut(& mut _i . lifetime);
     if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in Punctuated::elements_mut(& mut _i . bounds) { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_predicate_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PredicateType) {
     if let Some(ref mut it) = _i . lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
     _visitor.visit_type_mut(& mut _i . bounded_ty);
     tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . bounds) { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_qself_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut QSelf) {
     tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
@@ -1820,7 +1820,7 @@
     if let Some(ref mut it) = _i . as_token { tokens_helper(_visitor, &mut (it).0) };
     tokens_helper(_visitor, &mut (& mut _i . gt_token).0);
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_range_limits_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut RangeLimits) {
     match *_i {
         RangeLimits::HalfOpen(ref mut _binding_0, ) => {
@@ -1831,7 +1831,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_return_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ReturnType) {
     match *_i {
         ReturnType::Default => { }
@@ -1844,7 +1844,7 @@
 
 pub fn visit_span_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Span) {
 }
-# [ cfg ( feature = "full" ) ]
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ] # [ cfg ( feature = "full" ) ]
 pub fn visit_stmt_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Stmt) {
     match *_i {
         Stmt::Local(ref mut _binding_0, ) => {
@@ -1862,13 +1862,13 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_trait_bound_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitBound) {
     _visitor.visit_trait_bound_modifier_mut(& mut _i . modifier);
     if let Some(ref mut it) = _i . lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
     _visitor.visit_path_mut(& mut _i . path);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_trait_bound_modifier_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitBoundModifier) {
     match *_i {
         TraitBoundModifier::None => { }
@@ -1941,7 +1941,7 @@
 pub fn visit_trait_item_verbatim_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Type) {
     match *_i {
         Type::Slice(ref mut _binding_0, ) => {
@@ -1991,14 +1991,14 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_array_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeArray) {
     tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     _visitor.visit_type_mut(& mut * _i . elem);
     tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
     _visitor.visit_expr_mut(& mut _i . len);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_bare_fn_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeBareFn) {
     if let Some(ref mut it) = _i . unsafety { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(it) };
@@ -2009,29 +2009,29 @@
     if let Some(ref mut it) = _i . variadic { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_return_type_mut(& mut _i . output);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeGroup) {
     tokens_helper(_visitor, &mut (& mut _i . group_token).0);
     _visitor.visit_type_mut(& mut * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_impl_trait_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeImplTrait) {
     tokens_helper(_visitor, &mut (& mut _i . impl_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . bounds) { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_infer_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeInfer) {
     tokens_helper(_visitor, &mut (& mut _i . underscore_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeMacro) {
     _visitor.visit_macro_mut(& mut _i . mac);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_never_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeNever) {
     tokens_helper(_visitor, &mut (& mut _i . bang_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_param_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeParam) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_ident_mut(& mut _i . ident);
@@ -2040,7 +2040,7 @@
     if let Some(ref mut it) = _i . eq_token { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . default { _visitor.visit_type_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_param_bound_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeParamBound) {
     match *_i {
         TypeParamBound::Trait(ref mut _binding_0, ) => {
@@ -2051,50 +2051,50 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeParen) {
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     _visitor.visit_type_mut(& mut * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypePath) {
     if let Some(ref mut it) = _i . qself { _visitor.visit_qself_mut(it) };
     _visitor.visit_path_mut(& mut _i . path);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_ptr_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypePtr) {
     tokens_helper(_visitor, &mut (& mut _i . star_token).0);
     if let Some(ref mut it) = _i . const_token { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_type_mut(& mut * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_reference_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeReference) {
     tokens_helper(_visitor, &mut (& mut _i . and_token).0);
     if let Some(ref mut it) = _i . lifetime { _visitor.visit_lifetime_mut(it) };
     if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_type_mut(& mut * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_slice_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeSlice) {
     tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     _visitor.visit_type_mut(& mut * _i . elem);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_trait_object_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeTraitObject) {
     if let Some(ref mut it) = _i . dyn_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in Punctuated::elements_mut(& mut _i . bounds) { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeTuple) {
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . elems) { let it = el.item_mut(); _visitor.visit_type_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_type_verbatim_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeVerbatim) {
     // Skipped field _i . tts;
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_un_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut UnOp) {
     match *_i {
         UnOp::Deref(ref mut _binding_0, ) => {
@@ -2139,7 +2139,7 @@
         }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_variant_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Variant) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_ident_mut(& mut _i . ident);
@@ -2149,24 +2149,24 @@
             _visitor.visit_expr_mut(& mut ( it ) . 1);
          };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_vis_crate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisCrate) {
     tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     tokens_helper(_visitor, &mut (& mut _i . crate_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_vis_public_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisPublic) {
     tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_vis_restricted_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisRestricted) {
     tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     if let Some(ref mut it) = _i . in_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_path_mut(& mut * _i . path);
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_visibility_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Visibility) {
     match *_i {
         Visibility::Public(ref mut _binding_0, ) => {
@@ -2181,12 +2181,12 @@
         Visibility::Inherited => { }
     }
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_where_clause_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereClause) {
     tokens_helper(_visitor, &mut (& mut _i . where_token).0);
     for mut el in Punctuated::elements_mut(& mut _i . predicates) { let it = el.item_mut(); _visitor.visit_where_predicate_mut(it) };
 }
-
+# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 pub fn visit_where_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WherePredicate) {
     match *_i {
         WherePredicate::Type(ref mut _binding_0, ) => {
diff --git a/src/item.rs b/src/item.rs
index 6cab34d..0dfc951 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -1,4 +1,5 @@
 use super::*;
+use derive::{Data, DeriveInput};
 use punctuated::Punctuated;
 use proc_macro2::{TokenStream};
 use token::{Paren, Brace};
diff --git a/src/lib.rs b/src/lib.rs
index 7d7c0f8..eb3eb1e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -21,13 +21,19 @@
 #[macro_use]
 pub mod token;
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod attr;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use attr::{AttrStyle, Attribute, MetaItem, MetaItemList, MetaNameValue, NestedMetaItem};
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod data;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use data::{Field, Fields, FieldsNamed, FieldsUnnamed, Variant, VisCrate, VisPublic, VisRestricted, Visibility};
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod expr;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use expr::{Expr, ExprAddrOf, ExprArray, ExprAssign, ExprAssignOp, ExprBinary, ExprBlock,
                ExprBox, ExprBreak, ExprCall, ExprCast, ExprCatch, ExprClosure, ExprContinue,
                ExprField, ExprForLoop, ExprGroup, ExprIf, ExprIfLet, ExprInPlace, ExprIndex,
@@ -40,11 +46,13 @@
                MethodTurbofish, Pat, PatBox, PatIdent, PatLit, PatMacro, PatPath, PatRange, PatRef, PatSlice,
                PatStruct, PatTuple, PatTupleStruct, PatVerbatim, PatWild, RangeLimits, Stmt};
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod generics;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use generics::{BoundLifetimes, ConstParam, GenericParam, Generics, LifetimeDef,
                    PredicateEq, PredicateLifetime, PredicateType, TraitBound, TraitBoundModifier,
                    TypeParam, TypeParamBound, WhereClause, WherePredicate};
-#[cfg(feature = "printing")]
+#[cfg(all(any(feature = "full", feature = "derive"), feature = "printing"))]
 pub use generics::{ImplGenerics, Turbofish, TypeGenerics};
 
 mod ident;
@@ -66,28 +74,40 @@
 #[cfg(feature = "full")]
 pub use file::File;
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod lifetime;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use lifetime::Lifetime;
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod lit;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use lit::{Lit, LitKind};
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod mac;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use mac::{Macro, MacroDelimiter};
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod derive;
+#[cfg(feature = "derive")]
 pub use derive::{Data, DataEnum, DataStruct, DataUnion, DeriveInput};
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod op;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use op::{BinOp, UnOp};
 
+#[cfg(any(feature = "full", feature = "derive"))]
 mod ty;
+#[cfg(any(feature = "full", feature = "derive"))]
 pub use ty::{Abi, AngleBracketedGenericArguments, BareFnArg, BareFnArgName,
              Binding, GenericArgument, ParenthesizedGenericArguments, Path,
              PathArguments, PathSegment, QSelf, ReturnType, Type, TypeArray,
              TypeBareFn, TypeGroup, TypeImplTrait, TypeInfer, TypeMacro, TypeNever, TypeParen,
              TypePath, TypePtr, TypeReference, TypeSlice, TypeTraitObject, TypeTuple, TypeVerbatim};
-#[cfg(feature = "printing")]
+#[cfg(all(any(feature = "full", feature = "derive"), feature = "printing"))]
 pub use ty::PathTokens;
 
 #[cfg(feature = "parsing")]
@@ -95,7 +115,7 @@
 #[cfg(feature = "parsing")]
 pub mod synom;
 pub mod punctuated;
-#[cfg(feature = "parsing")]
+#[cfg(all(any(feature = "full", feature = "derive"), feature = "parsing"))]
 mod tt;
 
 #[cfg(all(feature = "parsing", feature = "printing"))]
@@ -307,10 +327,10 @@
     };
 }
 
-#[cfg(feature = "printing")]
+#[cfg(all(any(feature = "full", feature = "derive"), feature = "printing"))]
 struct TokensOrDefault<'a, T: 'a>(&'a Option<T>);
 
-#[cfg(feature = "printing")]
+#[cfg(all(any(feature = "full", feature = "derive"), feature = "printing"))]
 impl<'a, T> quote::ToTokens for TokensOrDefault<'a, T>
 where
     T: quote::ToTokens + Default,
diff --git a/src/macros.rs b/src/macros.rs
index 9b73717..273db09 100644
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -1,3 +1,4 @@
+#[cfg(any(feature = "full", feature = "derive"))]
 macro_rules! ast_struct {
     (
         $(#[$attr:meta])*
@@ -39,6 +40,7 @@
     };
 }
 
+#[cfg(any(feature = "full", feature = "derive"))]
 macro_rules! ast_enum {
     (
         $(#[$enum_attr:meta])*
@@ -53,6 +55,7 @@
     )
 }
 
+#[cfg(any(feature = "full", feature = "derive"))]
 macro_rules! ast_enum_of_structs {
     (
         $(#[$enum_attr:meta])*
@@ -102,7 +105,7 @@
     )
 }
 
-#[cfg(feature = "printing")]
+#[cfg(all(feature = "printing", any(feature = "full", feature = "derive")))]
 macro_rules! generate_to_tokens {
     (do_not_generate_to_tokens $($foo:tt)*) => ();
 
@@ -138,7 +141,7 @@
     };
 }
 
-#[cfg(all(feature = "printing", not(feature = "full")))]
+#[cfg(all(feature = "printing", feature = "derive", not(feature = "full")))]
 macro_rules! to_tokens_call {
     // If the variant is marked as #full, don't auto-generate to-tokens for it.
     ($e:ident, $tokens:ident, #full $($rest:tt)*) => {
@@ -149,6 +152,7 @@
     };
 }
 
+#[cfg(any(feature = "full", feature = "derive"))]
 macro_rules! maybe_ast_struct {
     (
         $(#[$attr:meta])*
