Visit all tokens in generated code
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 2d6a92d..d9a1b92 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -400,7 +400,7 @@
 
 pub fn fold_abi<V: Folder + ?Sized>(_visitor: &mut V, _i: Abi) -> Abi {
     Abi {
-        extern_token: _i . extern_token,
+        extern_token: Token ! [ extern ](tokens_helper(_visitor, &(_i . extern_token).0)),
         kind: _visitor.fold_abi_kind(_i . kind),
     }
 }
@@ -419,17 +419,17 @@
 
 pub fn fold_angle_bracketed_generic_arguments<V: Folder + ?Sized>(_visitor: &mut V, _i: AngleBracketedGenericArguments) -> AngleBracketedGenericArguments {
     AngleBracketedGenericArguments {
-        turbofish: _i . turbofish,
-        lt_token: _i . lt_token,
+        turbofish: (_i . turbofish).map(|it| { Token ! [ :: ](tokens_helper(_visitor, &(it).0)) }),
+        lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i . lt_token).0)),
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_generic_argument(it) }),
-        gt_token: _i . gt_token,
+        gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i . gt_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_arg_captured<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgCaptured) -> ArgCaptured {
     ArgCaptured {
         pat: _visitor.fold_pat(_i . pat),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: _visitor.fold_type(_i . ty),
     }
 }
@@ -437,14 +437,14 @@
 pub fn fold_arg_self<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgSelf) -> ArgSelf {
     ArgSelf {
         mutbl: _visitor.fold_mutability(_i . mutbl),
-        self_token: _i . self_token,
+        self_token: Token ! [ self ](tokens_helper(_visitor, &(_i . self_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_arg_self_ref<V: Folder + ?Sized>(_visitor: &mut V, _i: ArgSelfRef) -> ArgSelfRef {
     ArgSelfRef {
-        and_token: _i . and_token,
-        self_token: _i . self_token,
+        and_token: Token ! [ & ](tokens_helper(_visitor, &(_i . and_token).0)),
+        self_token: Token ! [ self ](tokens_helper(_visitor, &(_i . self_token).0)),
         lifetime: (_i . lifetime).map(|it| { _visitor.fold_lifetime(it) }),
         mutbl: _visitor.fold_mutability(_i . mutbl),
     }
@@ -454,11 +454,11 @@
     Arm {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         pats: FoldHelper::lift(_i . pats, |it| { _visitor.fold_pat(it) }),
-        if_token: _i . if_token,
+        if_token: (_i . if_token).map(|it| { Token ! [ if ](tokens_helper(_visitor, &(it).0)) }),
         guard: (_i . guard).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
-        rocket_token: _i . rocket_token,
+        rocket_token: Token ! [ => ](tokens_helper(_visitor, &(_i . rocket_token).0)),
         body: Box::new(_visitor.fold_expr(* _i . body)),
-        comma: _i . comma,
+        comma: (_i . comma).map(|it| { Token ! [ , ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 
@@ -468,7 +468,7 @@
         Outer => { Outer }
         Inner(_binding_0, ) => {
             Inner (
-                _binding_0,
+                Token ! [ ! ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -477,7 +477,7 @@
 pub fn fold_attribute<V: Folder + ?Sized>(_visitor: &mut V, _i: Attribute) -> Attribute {
     Attribute {
         style: _visitor.fold_attr_style(_i . style),
-        pound_token: _i . pound_token,
+        pound_token: Token ! [ # ](tokens_helper(_visitor, &(_i . pound_token).0)),
         bracket_token: _i . bracket_token,
         path: _visitor.fold_path(_i . path),
         tts: _i . tts,
@@ -489,7 +489,7 @@
     BareFnArg {
         name: (_i . name).map(|it| { (
             _visitor.fold_bare_fn_arg_name(( it ) . 0),
-            ( it ) . 1,
+            Token ! [ : ](tokens_helper(_visitor, &(( it ) . 1).0)),
         ) }),
         ty: _visitor.fold_type(_i . ty),
     }
@@ -505,7 +505,7 @@
         }
         Wild(_binding_0, ) => {
             Wild (
-                _binding_0,
+                Token ! [ _ ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -516,10 +516,10 @@
         lifetimes: (_i . lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
         abi: (_i . abi).map(|it| { _visitor.fold_abi(it) }),
-        fn_token: _i . fn_token,
+        fn_token: Token ! [ fn ](tokens_helper(_visitor, &(_i . fn_token).0)),
         paren_token: _i . paren_token,
         inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_bare_fn_arg(it) }),
-        variadic: _i . variadic,
+        variadic: (_i . variadic).map(|it| { Token ! [ ... ](tokens_helper(_visitor, &(it).0)) }),
         output: _visitor.fold_return_type(_i . output),
     }
 }
@@ -529,142 +529,142 @@
     match _i {
         Add(_binding_0, ) => {
             Add (
-                _binding_0,
+                Token ! [ + ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Sub(_binding_0, ) => {
             Sub (
-                _binding_0,
+                Token ! [ - ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Mul(_binding_0, ) => {
             Mul (
-                _binding_0,
+                Token ! [ * ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Div(_binding_0, ) => {
             Div (
-                _binding_0,
+                Token ! [ / ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Rem(_binding_0, ) => {
             Rem (
-                _binding_0,
+                Token ! [ % ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         And(_binding_0, ) => {
             And (
-                _binding_0,
+                Token ! [ && ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Or(_binding_0, ) => {
             Or (
-                _binding_0,
+                Token ! [ || ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         BitXor(_binding_0, ) => {
             BitXor (
-                _binding_0,
+                Token ! [ ^ ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         BitAnd(_binding_0, ) => {
             BitAnd (
-                _binding_0,
+                Token ! [ & ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         BitOr(_binding_0, ) => {
             BitOr (
-                _binding_0,
+                Token ! [ | ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Shl(_binding_0, ) => {
             Shl (
-                _binding_0,
+                Token ! [ << ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Shr(_binding_0, ) => {
             Shr (
-                _binding_0,
+                Token ! [ >> ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Eq(_binding_0, ) => {
             Eq (
-                _binding_0,
+                Token ! [ == ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Lt(_binding_0, ) => {
             Lt (
-                _binding_0,
+                Token ! [ < ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Le(_binding_0, ) => {
             Le (
-                _binding_0,
+                Token ! [ <= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Ne(_binding_0, ) => {
             Ne (
-                _binding_0,
+                Token ! [ != ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Ge(_binding_0, ) => {
             Ge (
-                _binding_0,
+                Token ! [ >= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Gt(_binding_0, ) => {
             Gt (
-                _binding_0,
+                Token ! [ > ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         AddEq(_binding_0, ) => {
             AddEq (
-                _binding_0,
+                Token ! [ += ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         SubEq(_binding_0, ) => {
             SubEq (
-                _binding_0,
+                Token ! [ -= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         MulEq(_binding_0, ) => {
             MulEq (
-                _binding_0,
+                Token ! [ *= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         DivEq(_binding_0, ) => {
             DivEq (
-                _binding_0,
+                Token ! [ /= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         RemEq(_binding_0, ) => {
             RemEq (
-                _binding_0,
+                Token ! [ %= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         BitXorEq(_binding_0, ) => {
             BitXorEq (
-                _binding_0,
+                Token ! [ ^= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         BitAndEq(_binding_0, ) => {
             BitAndEq (
-                _binding_0,
+                Token ! [ &= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         BitOrEq(_binding_0, ) => {
             BitOrEq (
-                _binding_0,
+                Token ! [ |= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         ShlEq(_binding_0, ) => {
             ShlEq (
-                _binding_0,
+                Token ! [ <<= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         ShrEq(_binding_0, ) => {
             ShrEq (
-                _binding_0,
+                Token ! [ >>= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -675,7 +675,7 @@
     match _i {
         ByRef(_binding_0, _binding_1, ) => {
             ByRef (
-                _binding_0,
+                Token ! [ ref ](tokens_helper(_visitor, &(_binding_0).0)),
                 _visitor.fold_mutability(_binding_1),
             )
         }
@@ -712,7 +712,7 @@
 
 pub fn fold_body_enum<V: Folder + ?Sized>(_visitor: &mut V, _i: BodyEnum) -> BodyEnum {
     BodyEnum {
-        enum_token: _i . enum_token,
+        enum_token: Token ! [ enum ](tokens_helper(_visitor, &(_i . enum_token).0)),
         brace_token: _i . brace_token,
         variants: FoldHelper::lift(_i . variants, |it| { _visitor.fold_variant(it) }),
     }
@@ -721,17 +721,17 @@
 pub fn fold_body_struct<V: Folder + ?Sized>(_visitor: &mut V, _i: BodyStruct) -> BodyStruct {
     BodyStruct {
         data: _visitor.fold_variant_data(_i . data),
-        struct_token: _i . struct_token,
-        semi_token: _i . semi_token,
+        struct_token: Token ! [ struct ](tokens_helper(_visitor, &(_i . struct_token).0)),
+        semi_token: (_i . semi_token).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 
 pub fn fold_bound_lifetimes<V: Folder + ?Sized>(_visitor: &mut V, _i: BoundLifetimes) -> BoundLifetimes {
     BoundLifetimes {
-        for_token: _i . for_token,
-        lt_token: _i . lt_token,
+        for_token: Token ! [ for ](tokens_helper(_visitor, &(_i . for_token).0)),
+        lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i . lt_token).0)),
         lifetimes: FoldHelper::lift(_i . lifetimes, |it| { _visitor.fold_lifetime_def(it) }),
-        gt_token: _i . gt_token,
+        gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i . gt_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -740,7 +740,7 @@
     match _i {
         Value(_binding_0, ) => {
             Value (
-                _binding_0,
+                Token ! [ move ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Ref => { Ref }
@@ -750,11 +750,11 @@
 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) }),
-        const_token: _i . const_token,
+        const_token: Token ! [ const ](tokens_helper(_visitor, &(_i . const_token).0)),
         ident: _visitor.fold_ident(_i . ident),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: _visitor.fold_type(_i . ty),
-        eq_token: _i . eq_token,
+        eq_token: (_i . eq_token).map(|it| { Token ! [ = ](tokens_helper(_visitor, &(it).0)) }),
         default: (_i . default).map(|it| { _visitor.fold_expr(it) }),
     }
 }
@@ -764,7 +764,7 @@
     match _i {
         Const(_binding_0, ) => {
             Const (
-                _binding_0,
+                Token ! [ const ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         NotConst => { NotConst }
@@ -776,7 +776,7 @@
     match _i {
         Default(_binding_0, ) => {
             Default (
-                _binding_0,
+                Token ! [ default ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Final => { Final }
@@ -802,7 +802,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_addr_of<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprAddrOf) -> ExprAddrOf {
     ExprAddrOf {
-        and_token: _i . and_token,
+        and_token: Token ! [ & ](tokens_helper(_visitor, &(_i . and_token).0)),
         mutbl: _visitor.fold_mutability(_i . mutbl),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
     }
@@ -819,7 +819,7 @@
     ExprAssign {
         left: Box::new(_visitor.fold_expr(* _i . left)),
         right: Box::new(_visitor.fold_expr(* _i . right)),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -848,7 +848,7 @@
 pub fn fold_expr_box<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBox) -> ExprBox {
     ExprBox {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        box_token: _i . box_token,
+        box_token: Token ! [ box ](tokens_helper(_visitor, &(_i . box_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -856,7 +856,7 @@
     ExprBreak {
         label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
-        break_token: _i . break_token,
+        break_token: Token ! [ break ](tokens_helper(_visitor, &(_i . break_token).0)),
     }
 }
 
@@ -871,15 +871,15 @@
 pub fn fold_expr_cast<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCast) -> ExprCast {
     ExprCast {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        as_token: _i . as_token,
+        as_token: Token ! [ as ](tokens_helper(_visitor, &(_i . as_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_catch<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprCatch) -> ExprCatch {
     ExprCatch {
-        do_token: _i . do_token,
-        catch_token: _i . catch_token,
+        do_token: Token ! [ do ](tokens_helper(_visitor, &(_i . do_token).0)),
+        catch_token: Token ! [ catch ](tokens_helper(_visitor, &(_i . catch_token).0)),
         block: _visitor.fold_block(_i . block),
     }
 }
@@ -887,9 +887,9 @@
 pub fn fold_expr_closure<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprClosure) -> ExprClosure {
     ExprClosure {
         capture: _visitor.fold_capture_by(_i . capture),
-        or1_token: _i . or1_token,
+        or1_token: Token ! [ | ](tokens_helper(_visitor, &(_i . or1_token).0)),
         inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_fn_arg(it) }),
-        or2_token: _i . or2_token,
+        or2_token: Token ! [ | ](tokens_helper(_visitor, &(_i . or2_token).0)),
         output: _visitor.fold_return_type(_i . output),
         body: Box::new(_visitor.fold_expr(* _i . body)),
     }
@@ -898,14 +898,14 @@
 pub fn fold_expr_continue<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprContinue) -> ExprContinue {
     ExprContinue {
         label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        continue_token: _i . continue_token,
+        continue_token: Token ! [ continue ](tokens_helper(_visitor, &(_i . continue_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_field<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprField) -> ExprField {
     ExprField {
         base: Box::new(_visitor.fold_expr(* _i . base)),
-        dot_token: _i . dot_token,
+        dot_token: Token ! [ . ](tokens_helper(_visitor, &(_i . dot_token).0)),
         member: _visitor.fold_member(_i . member),
     }
 }
@@ -916,9 +916,9 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         body: _visitor.fold_block(_i . body),
         label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        for_token: _i . for_token,
-        colon_token: _i . colon_token,
-        in_token: _i . in_token,
+        for_token: Token ! [ for ](tokens_helper(_visitor, &(_i . for_token).0)),
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        in_token: Token ! [ in ](tokens_helper(_visitor, &(_i . in_token).0)),
     }
 }
 
@@ -934,8 +934,8 @@
         cond: Box::new(_visitor.fold_expr(* _i . cond)),
         if_true: _visitor.fold_block(_i . if_true),
         if_false: (_i . if_false).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
-        if_token: _i . if_token,
-        else_token: _i . else_token,
+        if_token: Token ! [ if ](tokens_helper(_visitor, &(_i . if_token).0)),
+        else_token: (_i . else_token).map(|it| { Token ! [ else ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -945,10 +945,10 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         if_true: _visitor.fold_block(_i . if_true),
         if_false: (_i . if_false).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
-        if_token: _i . if_token,
-        let_token: _i . let_token,
-        eq_token: _i . eq_token,
-        else_token: _i . else_token,
+        if_token: Token ! [ if ](tokens_helper(_visitor, &(_i . if_token).0)),
+        let_token: Token ! [ let ](tokens_helper(_visitor, &(_i . let_token).0)),
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
+        else_token: (_i . else_token).map(|it| { Token ! [ else ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1173,14 +1173,14 @@
     ExprLoop {
         body: _visitor.fold_block(_i . body),
         label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        loop_token: _i . loop_token,
-        colon_token: _i . colon_token,
+        loop_token: Token ! [ loop ](tokens_helper(_visitor, &(_i . loop_token).0)),
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_match<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMatch) -> ExprMatch {
     ExprMatch {
-        match_token: _i . match_token,
+        match_token: Token ! [ match ](tokens_helper(_visitor, &(_i . match_token).0)),
         brace_token: _i . brace_token,
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         arms: FoldHelper::lift(_i . arms, |it| { _visitor.fold_arm(it) }),
@@ -1194,10 +1194,10 @@
         typarams: FoldHelper::lift(_i . typarams, |it| { _visitor.fold_type(it) }),
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
         paren_token: _i . paren_token,
-        dot_token: _i . dot_token,
-        lt_token: _i . lt_token,
-        colon2_token: _i . colon2_token,
-        gt_token: _i . gt_token,
+        dot_token: Token ! [ . ](tokens_helper(_visitor, &(_i . dot_token).0)),
+        lt_token: (_i . lt_token).map(|it| { Token ! [ < ](tokens_helper(_visitor, &(it).0)) }),
+        colon2_token: (_i . colon2_token).map(|it| { Token ! [ :: ](tokens_helper(_visitor, &(it).0)) }),
+        gt_token: (_i . gt_token).map(|it| { Token ! [ > ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 
@@ -1226,7 +1226,7 @@
 pub fn fold_expr_repeat<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRepeat) -> ExprRepeat {
     ExprRepeat {
         bracket_token: _i . bracket_token,
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         amt: Box::new(_visitor.fold_expr(* _i . amt)),
     }
@@ -1235,7 +1235,7 @@
 pub fn fold_expr_ret<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRet) -> ExprRet {
     ExprRet {
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
-        return_token: _i . return_token,
+        return_token: Token ! [ return ](tokens_helper(_visitor, &(_i . return_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1244,7 +1244,7 @@
         path: _visitor.fold_path(_i . path),
         fields: FoldHelper::lift(_i . fields, |it| { _visitor.fold_field_value(it) }),
         rest: (_i . rest).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
-        dot2_token: _i . dot2_token,
+        dot2_token: (_i . dot2_token).map(|it| { Token ! [ .. ](tokens_helper(_visitor, &(it).0)) }),
         brace_token: _i . brace_token,
     }
 }
@@ -1252,7 +1252,7 @@
 pub fn fold_expr_try<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTry) -> ExprTry {
     ExprTry {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        question_token: _i . question_token,
+        question_token: Token ! [ ? ](tokens_helper(_visitor, &(_i . question_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1266,7 +1266,7 @@
 pub fn fold_expr_type<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprType) -> ExprType {
     ExprType {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
     }
 }
@@ -1280,7 +1280,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_unsafe<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprUnsafe) -> ExprUnsafe {
     ExprUnsafe {
-        unsafe_token: _i . unsafe_token,
+        unsafe_token: Token ! [ unsafe ](tokens_helper(_visitor, &(_i . unsafe_token).0)),
         block: _visitor.fold_block(_i . block),
     }
 }
@@ -1290,8 +1290,8 @@
         cond: Box::new(_visitor.fold_expr(* _i . cond)),
         body: _visitor.fold_block(_i . body),
         label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        colon_token: _i . colon_token,
-        while_token: _i . while_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        while_token: Token ! [ while ](tokens_helper(_visitor, &(_i . while_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1301,16 +1301,16 @@
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         body: _visitor.fold_block(_i . body),
         label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        colon_token: _i . colon_token,
-        while_token: _i . while_token,
-        let_token: _i . let_token,
-        eq_token: _i . eq_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        while_token: Token ! [ while ](tokens_helper(_visitor, &(_i . while_token).0)),
+        let_token: Token ! [ let ](tokens_helper(_visitor, &(_i . let_token).0)),
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_yield<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprYield) -> ExprYield {
     ExprYield {
-        yield_token: _i . yield_token,
+        yield_token: Token ! [ yield ](tokens_helper(_visitor, &(_i . yield_token).0)),
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
     }
 }
@@ -1321,7 +1321,7 @@
         vis: _visitor.fold_visibility(_i . vis),
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         ty: _visitor.fold_type(_i . ty),
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1330,7 +1330,7 @@
         member: _visitor.fold_member(_i . member),
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         is_shorthand: _i . is_shorthand,
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
     }
 }
@@ -1339,7 +1339,7 @@
     FieldValue {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         member: _visitor.fold_member(_i . member),
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
         expr: _visitor.fold_expr(_i . expr),
         is_shorthand: _i . is_shorthand,
     }
@@ -1386,12 +1386,12 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_fn_decl<V: Folder + ?Sized>(_visitor: &mut V, _i: FnDecl) -> FnDecl {
     FnDecl {
-        fn_token: _i . fn_token,
+        fn_token: Token ! [ fn ](tokens_helper(_visitor, &(_i . fn_token).0)),
         paren_token: _i . paren_token,
         inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_fn_arg(it) }),
         output: _visitor.fold_return_type(_i . output),
         generics: _visitor.fold_generics(_i . generics),
-        variadic: _i . variadic,
+        variadic: (_i . variadic).map(|it| { Token ! [ ... ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1422,7 +1422,7 @@
         vis: _visitor.fold_visibility(_i . vis),
         ident: _visitor.fold_ident(_i . ident),
         decl: Box::new(_visitor.fold_fn_decl(* _i . decl)),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1430,12 +1430,12 @@
     ForeignItemStatic {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        static_token: _i . static_token,
+        static_token: Token ! [ static ](tokens_helper(_visitor, &(_i . static_token).0)),
         mutbl: _visitor.fold_mutability(_i . mutbl),
         ident: _visitor.fold_ident(_i . ident),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1443,9 +1443,9 @@
     ForeignItemType {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        type_token: _i . type_token,
+        type_token: Token ! [ type ](tokens_helper(_visitor, &(_i . type_token).0)),
         ident: _visitor.fold_ident(_i . ident),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 
@@ -1498,9 +1498,9 @@
 
 pub fn fold_generics<V: Folder + ?Sized>(_visitor: &mut V, _i: Generics) -> Generics {
     Generics {
-        lt_token: _i . lt_token,
+        lt_token: (_i . lt_token).map(|it| { Token ! [ < ](tokens_helper(_visitor, &(it).0)) }),
         params: FoldHelper::lift(_i . params, |it| { _visitor.fold_generic_param(it) }),
-        gt_token: _i . gt_token,
+        gt_token: (_i . gt_token).map(|it| { Token ! [ > ](tokens_helper(_visitor, &(it).0)) }),
         where_clause: (_i . where_clause).map(|it| { _visitor.fold_where_clause(it) }),
     }
 }
@@ -1543,13 +1543,13 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
-        const_token: _i . const_token,
+        const_token: Token ! [ const ](tokens_helper(_visitor, &(_i . const_token).0)),
         ident: _visitor.fold_ident(_i . ident),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: _visitor.fold_type(_i . ty),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         expr: _visitor.fold_expr(_i . expr),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1557,7 +1557,7 @@
     ImplItemMacro {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         mac: _visitor.fold_macro(_i . mac),
-        semi_token: _i . semi_token,
+        semi_token: (_i . semi_token).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1576,12 +1576,12 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
-        type_token: _i . type_token,
+        type_token: Token ! [ type ](tokens_helper(_visitor, &(_i . type_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         ty: _visitor.fold_type(_i . ty),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1591,7 +1591,7 @@
         Positive => { Positive }
         Negative(_binding_0, ) => {
             Negative (
-                _binding_0,
+                Token ! [ ! ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -1602,12 +1602,12 @@
     match _i {
         Arrow(_binding_0, ) => {
             Arrow (
-                _binding_0,
+                Token ! [ <- ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         In(_binding_0, ) => {
             In (
-                _binding_0,
+                Token ! [ in ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -1710,13 +1710,13 @@
     ItemConst {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        const_token: _i . const_token,
+        const_token: Token ! [ const ](tokens_helper(_visitor, &(_i . const_token).0)),
         ident: _visitor.fold_ident(_i . ident),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1724,10 +1724,10 @@
     ItemDefaultImpl {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
-        impl_token: _i . impl_token,
+        impl_token: Token ! [ impl ](tokens_helper(_visitor, &(_i . impl_token).0)),
         path: _visitor.fold_path(_i . path),
-        for_token: _i . for_token,
-        dot2_token: _i . dot2_token,
+        for_token: Token ! [ for ](tokens_helper(_visitor, &(_i . for_token).0)),
+        dot2_token: Token ! [ .. ](tokens_helper(_visitor, &(_i . dot2_token).0)),
         brace_token: _i . brace_token,
     }
 }
@@ -1736,7 +1736,7 @@
     ItemEnum {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        enum_token: _i . enum_token,
+        enum_token: Token ! [ enum ](tokens_helper(_visitor, &(_i . enum_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         brace_token: _i . brace_token,
@@ -1748,14 +1748,14 @@
     ItemExternCrate {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        extern_token: _i . extern_token,
-        crate_token: _i . crate_token,
+        extern_token: Token ! [ extern ](tokens_helper(_visitor, &(_i . extern_token).0)),
+        crate_token: Token ! [ crate ](tokens_helper(_visitor, &(_i . crate_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         rename: (_i . rename).map(|it| { (
-            ( it ) . 0,
+            Token ! [ as ](tokens_helper(_visitor, &(( it ) . 0).0)),
             _visitor.fold_ident(( it ) . 1),
         ) }),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1786,12 +1786,12 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
-        impl_token: _i . impl_token,
+        impl_token: Token ! [ impl ](tokens_helper(_visitor, &(_i . impl_token).0)),
         generics: _visitor.fold_generics(_i . generics),
         trait_: (_i . trait_).map(|it| { (
             _visitor.fold_impl_polarity(( it ) . 0),
             _visitor.fold_path(( it ) . 1),
-            ( it ) . 2,
+            Token ! [ for ](tokens_helper(_visitor, &(( it ) . 2).0)),
         ) }),
         self_ty: Box::new(_visitor.fold_type(* _i . self_ty)),
         brace_token: _i . brace_token,
@@ -1804,7 +1804,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         ident: (_i . ident).map(|it| { _visitor.fold_ident(it) }),
         mac: _visitor.fold_macro(_i . mac),
-        semi_token: _i . semi_token,
+        semi_token: (_i . semi_token).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1812,7 +1812,7 @@
     ItemMacro2 {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        macro_token: _i . macro_token,
+        macro_token: Token ! [ macro ](tokens_helper(_visitor, &(_i . macro_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         args: _i . args,
         body: _i . body,
@@ -1823,13 +1823,13 @@
     ItemMod {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        mod_token: _i . mod_token,
+        mod_token: Token ! [ mod ](tokens_helper(_visitor, &(_i . mod_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         content: (_i . content).map(|it| { (
             ( it ) . 0,
             FoldHelper::lift(( it ) . 1, |it| { _visitor.fold_item(it) }),
         ) }),
-        semi: _i . semi,
+        semi: (_i . semi).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1837,14 +1837,14 @@
     ItemStatic {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        static_token: _i . static_token,
+        static_token: Token ! [ static ](tokens_helper(_visitor, &(_i . static_token).0)),
         mutbl: _visitor.fold_mutability(_i . mutbl),
         ident: _visitor.fold_ident(_i . ident),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1852,11 +1852,11 @@
     ItemStruct {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        struct_token: _i . struct_token,
+        struct_token: Token ! [ struct ](tokens_helper(_visitor, &(_i . struct_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         data: _visitor.fold_variant_data(_i . data),
-        semi_token: _i . semi_token,
+        semi_token: (_i . semi_token).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1865,11 +1865,11 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
-        auto_token: _i . auto_token,
-        trait_token: _i . trait_token,
+        auto_token: (_i . auto_token).map(|it| { Token ! [ auto ](tokens_helper(_visitor, &(it).0)) }),
+        trait_token: Token ! [ trait ](tokens_helper(_visitor, &(_i . trait_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
         supertraits: FoldHelper::lift(_i . supertraits, |it| { _visitor.fold_type_param_bound(it) }),
         brace_token: _i . brace_token,
         items: FoldHelper::lift(_i . items, |it| { _visitor.fold_trait_item(it) }),
@@ -1880,12 +1880,12 @@
     ItemType {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        type_token: _i . type_token,
+        type_token: Token ! [ type ](tokens_helper(_visitor, &(_i . type_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1893,7 +1893,7 @@
     ItemUnion {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        union_token: _i . union_token,
+        union_token: Token ! [ union ](tokens_helper(_visitor, &(_i . union_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         data: _visitor.fold_variant_data(_i . data),
@@ -1904,11 +1904,11 @@
     ItemUse {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        use_token: _i . use_token,
-        leading_colon: _i . leading_colon,
+        use_token: Token ! [ use ](tokens_helper(_visitor, &(_i . use_token).0)),
+        leading_colon: (_i . leading_colon).map(|it| { Token ! [ :: ](tokens_helper(_visitor, &(it).0)) }),
         prefix: FoldHelper::lift(_i . prefix, |it| { _visitor.fold_ident(it) }),
         tree: _visitor.fold_use_tree(_i . tree),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 
@@ -1923,7 +1923,7 @@
     LifetimeDef {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         lifetime: _visitor.fold_lifetime(_i . lifetime),
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
     }
 }
@@ -1937,10 +1937,10 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_local<V: Folder + ?Sized>(_visitor: &mut V, _i: Local) -> Local {
     Local {
-        let_token: _i . let_token,
-        colon_token: _i . colon_token,
-        eq_token: _i . eq_token,
-        semi_token: _i . semi_token,
+        let_token: Token ! [ let ](tokens_helper(_visitor, &(_i . let_token).0)),
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        eq_token: (_i . eq_token).map(|it| { Token ! [ = ](tokens_helper(_visitor, &(it).0)) }),
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         ty: (_i . ty).map(|it| { Box::new(_visitor.fold_type(* it)) }),
         init: (_i . init).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
@@ -1951,7 +1951,7 @@
 pub fn fold_macro<V: Folder + ?Sized>(_visitor: &mut V, _i: Macro) -> Macro {
     Macro {
         path: _visitor.fold_path(_i . path),
-        bang_token: _i . bang_token,
+        bang_token: Token ! [ ! ](tokens_helper(_visitor, &(_i . bang_token).0)),
         tokens: _i . tokens,
     }
 }
@@ -2004,7 +2004,7 @@
 pub fn fold_meta_name_value<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaNameValue) -> MetaNameValue {
     MetaNameValue {
         ident: _visitor.fold_ident(_i . ident),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         lit: _visitor.fold_lit(_i . lit),
     }
 }
@@ -2031,7 +2031,7 @@
     match _i {
         Mutable(_binding_0, ) => {
             Mutable (
-                _binding_0,
+                Token ! [ mut ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Immutable => { Immutable }
@@ -2131,7 +2131,7 @@
 pub fn fold_pat_box<V: Folder + ?Sized>(_visitor: &mut V, _i: PatBox) -> PatBox {
     PatBox {
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
-        box_token: _i . box_token,
+        box_token: Token ! [ box ](tokens_helper(_visitor, &(_i . box_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2140,7 +2140,7 @@
         mode: _visitor.fold_binding_mode(_i . mode),
         ident: _visitor.fold_ident(_i . ident),
         subpat: (_i . subpat).map(|it| { Box::new(_visitor.fold_pat(* it)) }),
-        at_token: _i . at_token,
+        at_token: (_i . at_token).map(|it| { Token ! [ @ ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2169,7 +2169,7 @@
     PatRef {
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         mutbl: _visitor.fold_mutability(_i . mutbl),
-        and_token: _i . and_token,
+        and_token: Token ! [ & ](tokens_helper(_visitor, &(_i . and_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2178,8 +2178,8 @@
         front: FoldHelper::lift(_i . front, |it| { _visitor.fold_pat(it) }),
         middle: (_i . middle).map(|it| { Box::new(_visitor.fold_pat(* it)) }),
         back: FoldHelper::lift(_i . back, |it| { _visitor.fold_pat(it) }),
-        dot2_token: _i . dot2_token,
-        comma_token: _i . comma_token,
+        dot2_token: (_i . dot2_token).map(|it| { Token ! [ .. ](tokens_helper(_visitor, &(it).0)) }),
+        comma_token: (_i . comma_token).map(|it| { Token ! [ , ](tokens_helper(_visitor, &(it).0)) }),
         bracket_token: _i . bracket_token,
     }
 }
@@ -2189,7 +2189,7 @@
         path: _visitor.fold_path(_i . path),
         fields: FoldHelper::lift(_i . fields, |it| { _visitor.fold_field_pat(it) }),
         brace_token: _i . brace_token,
-        dot2_token: _i . dot2_token,
+        dot2_token: (_i . dot2_token).map(|it| { Token ! [ .. ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2198,8 +2198,8 @@
         pats: FoldHelper::lift(_i . pats, |it| { _visitor.fold_pat(it) }),
         dots_pos: _i . dots_pos,
         paren_token: _i . paren_token,
-        dot2_token: _i . dot2_token,
-        comma_token: _i . comma_token,
+        dot2_token: (_i . dot2_token).map(|it| { Token ! [ .. ](tokens_helper(_visitor, &(it).0)) }),
+        comma_token: (_i . comma_token).map(|it| { Token ! [ , ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2212,13 +2212,13 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_pat_wild<V: Folder + ?Sized>(_visitor: &mut V, _i: PatWild) -> PatWild {
     PatWild {
-        underscore_token: _i . underscore_token,
+        underscore_token: Token ! [ _ ](tokens_helper(_visitor, &(_i . underscore_token).0)),
     }
 }
 
 pub fn fold_path<V: Folder + ?Sized>(_visitor: &mut V, _i: Path) -> Path {
     Path {
-        leading_colon: _i . leading_colon,
+        leading_colon: (_i . leading_colon).map(|it| { Token ! [ :: ](tokens_helper(_visitor, &(it).0)) }),
         segments: FoldHelper::lift(_i . segments, |it| { _visitor.fold_path_segment(it) }),
     }
 }
@@ -2256,11 +2256,11 @@
 
 pub fn fold_qself<V: Folder + ?Sized>(_visitor: &mut V, _i: QSelf) -> QSelf {
     QSelf {
-        lt_token: _i . lt_token,
+        lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i . lt_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
         position: _i . position,
-        as_token: _i . as_token,
-        gt_token: _i . gt_token,
+        as_token: (_i . as_token).map(|it| { Token ! [ as ](tokens_helper(_visitor, &(it).0)) }),
+        gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i . gt_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2269,12 +2269,12 @@
     match _i {
         HalfOpen(_binding_0, ) => {
             HalfOpen (
-                _binding_0,
+                Token ! [ .. ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Closed(_binding_0, ) => {
             Closed (
-                _binding_0,
+                Token ! [ ..= ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -2287,7 +2287,7 @@
         Type(_binding_0, _binding_1, ) => {
             Type (
                 Box::new(_visitor.fold_type(* _binding_0)),
-                _binding_1,
+                Token ! [ -> ](tokens_helper(_visitor, &(_binding_1).0)),
             )
         }
     }
@@ -2318,7 +2318,7 @@
         Semi(_binding_0, _binding_1, ) => {
             Semi (
                 Box::new(_visitor.fold_expr(* _binding_0)),
-                _binding_1,
+                Token ! [ ; ](tokens_helper(_visitor, &(_binding_1).0)),
             )
         }
     }
@@ -2330,7 +2330,7 @@
         None => { None }
         Maybe(_binding_0, ) => {
             Maybe (
-                _binding_0,
+                Token ! [ ? ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -2365,15 +2365,15 @@
 pub fn fold_trait_item_const<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemConst) -> TraitItemConst {
     TraitItemConst {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        const_token: _i . const_token,
+        const_token: Token ! [ const ](tokens_helper(_visitor, &(_i . const_token).0)),
         ident: _visitor.fold_ident(_i . ident),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         ty: _visitor.fold_type(_i . ty),
         default: (_i . default).map(|it| { (
-            ( it ) . 0,
+            Token ! [ = ](tokens_helper(_visitor, &(( it ) . 0).0)),
             _visitor.fold_expr(( it ) . 1),
         ) }),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2381,7 +2381,7 @@
     TraitItemMacro {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         mac: _visitor.fold_macro(_i . mac),
-        semi_token: _i . semi_token,
+        semi_token: (_i . semi_token).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2390,23 +2390,23 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         sig: _visitor.fold_method_sig(_i . sig),
         default: (_i . default).map(|it| { _visitor.fold_block(it) }),
-        semi_token: _i . semi_token,
+        semi_token: (_i . semi_token).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_trait_item_type<V: Folder + ?Sized>(_visitor: &mut V, _i: TraitItemType) -> TraitItemType {
     TraitItemType {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        type_token: _i . type_token,
+        type_token: Token ! [ type ](tokens_helper(_visitor, &(_i . type_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
         default: (_i . default).map(|it| { (
-            ( it ) . 0,
+            Token ! [ = ](tokens_helper(_visitor, &(( it ) . 0).0)),
             _visitor.fold_type(( it ) . 1),
         ) }),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
 }
 
@@ -2490,7 +2490,7 @@
     TypeArray {
         bracket_token: _i . bracket_token,
         ty: Box::new(_visitor.fold_type(* _i . ty)),
-        semi_token: _i . semi_token,
+        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
         amt: _visitor.fold_expr(_i . amt),
     }
 }
@@ -2504,7 +2504,7 @@
 pub fn fold_type_binding<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeBinding) -> TypeBinding {
     TypeBinding {
         ident: _visitor.fold_ident(_i . ident),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         ty: _visitor.fold_type(_i . ty),
     }
 }
@@ -2518,20 +2518,20 @@
 
 pub fn fold_type_impl_trait<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeImplTrait) -> TypeImplTrait {
     TypeImplTrait {
-        impl_token: _i . impl_token,
+        impl_token: Token ! [ impl ](tokens_helper(_visitor, &(_i . impl_token).0)),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
     }
 }
 
 pub fn fold_type_infer<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeInfer) -> TypeInfer {
     TypeInfer {
-        underscore_token: _i . underscore_token,
+        underscore_token: Token ! [ _ ](tokens_helper(_visitor, &(_i . underscore_token).0)),
     }
 }
 
 pub fn fold_type_never<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeNever) -> TypeNever {
     TypeNever {
-        bang_token: _i . bang_token,
+        bang_token: Token ! [ ! ](tokens_helper(_visitor, &(_i . bang_token).0)),
     }
 }
 
@@ -2539,9 +2539,9 @@
     TypeParam {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         ident: _visitor.fold_ident(_i . ident),
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
-        eq_token: _i . eq_token,
+        eq_token: (_i . eq_token).map(|it| { Token ! [ = ](tokens_helper(_visitor, &(it).0)) }),
         default: (_i . default).map(|it| { _visitor.fold_type(it) }),
     }
 }
@@ -2579,15 +2579,15 @@
 
 pub fn fold_type_ptr<V: Folder + ?Sized>(_visitor: &mut V, _i: TypePtr) -> TypePtr {
     TypePtr {
-        star_token: _i . star_token,
-        const_token: _i . const_token,
+        star_token: Token ! [ * ](tokens_helper(_visitor, &(_i . star_token).0)),
+        const_token: (_i . const_token).map(|it| { Token ! [ const ](tokens_helper(_visitor, &(it).0)) }),
         ty: Box::new(_visitor.fold_mut_type(* _i . ty)),
     }
 }
 
 pub fn fold_type_reference<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeReference) -> TypeReference {
     TypeReference {
-        and_token: _i . and_token,
+        and_token: Token ! [ & ](tokens_helper(_visitor, &(_i . and_token).0)),
         lifetime: (_i . lifetime).map(|it| { _visitor.fold_lifetime(it) }),
         ty: Box::new(_visitor.fold_mut_type(* _i . ty)),
     }
@@ -2602,7 +2602,7 @@
 
 pub fn fold_type_trait_object<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeTraitObject) -> TypeTraitObject {
     TypeTraitObject {
-        dyn_token: _i . dyn_token,
+        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) }),
     }
 }
@@ -2619,17 +2619,17 @@
     match _i {
         Deref(_binding_0, ) => {
             Deref (
-                _binding_0,
+                Token ! [ * ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Not(_binding_0, ) => {
             Not (
-                _binding_0,
+                Token ! [ ! ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Neg(_binding_0, ) => {
             Neg (
-                _binding_0,
+                Token ! [ - ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
     }
@@ -2640,7 +2640,7 @@
     match _i {
         Unsafe(_binding_0, ) => {
             Unsafe (
-                _binding_0,
+                Token ! [ unsafe ](tokens_helper(_visitor, &(_binding_0).0)),
             )
         }
         Normal => { Normal }
@@ -2649,7 +2649,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_use_glob<V: Folder + ?Sized>(_visitor: &mut V, _i: UseGlob) -> UseGlob {
     UseGlob {
-        star_token: _i . star_token,
+        star_token: Token ! [ * ](tokens_helper(_visitor, &(_i . star_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2664,7 +2664,7 @@
     UsePath {
         ident: _visitor.fold_ident(_i . ident),
         rename: (_i . rename).map(|it| { (
-            ( it ) . 0,
+            Token ! [ as ](tokens_helper(_visitor, &(( it ) . 0).0)),
             _visitor.fold_ident(( it ) . 1),
         ) }),
     }
@@ -2697,7 +2697,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         data: _visitor.fold_variant_data(_i . data),
         discriminant: (_i . discriminant).map(|it| { _visitor.fold_expr(it) }),
-        eq_token: _i . eq_token,
+        eq_token: (_i . eq_token).map(|it| { Token ! [ = ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
 
@@ -2722,9 +2722,9 @@
 
 pub fn fold_vis_crate<V: Folder + ?Sized>(_visitor: &mut V, _i: VisCrate) -> VisCrate {
     VisCrate {
-        pub_token: _i . pub_token,
+        pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
         paren_token: _i . paren_token,
-        crate_token: _i . crate_token,
+        crate_token: Token ! [ crate ](tokens_helper(_visitor, &(_i . crate_token).0)),
     }
 }
 
@@ -2735,15 +2735,15 @@
 
 pub fn fold_vis_public<V: Folder + ?Sized>(_visitor: &mut V, _i: VisPublic) -> VisPublic {
     VisPublic {
-        pub_token: _i . pub_token,
+        pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
     }
 }
 
 pub fn fold_vis_restricted<V: Folder + ?Sized>(_visitor: &mut V, _i: VisRestricted) -> VisRestricted {
     VisRestricted {
-        pub_token: _i . pub_token,
+        pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
         paren_token: _i . paren_token,
-        in_token: _i . in_token,
+        in_token: (_i . in_token).map(|it| { Token ! [ in ](tokens_helper(_visitor, &(it).0)) }),
         path: Box::new(_visitor.fold_path(* _i . path)),
     }
 }
@@ -2778,14 +2778,14 @@
     WhereBoundPredicate {
         bound_lifetimes: (_i . bound_lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
         bounded_ty: _visitor.fold_type(_i . bounded_ty),
-        colon_token: _i . colon_token,
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
     }
 }
 
 pub fn fold_where_clause<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereClause) -> WhereClause {
     WhereClause {
-        where_token: _i . where_token,
+        where_token: Token ! [ where ](tokens_helper(_visitor, &(_i . where_token).0)),
         predicates: FoldHelper::lift(_i . predicates, |it| { _visitor.fold_where_predicate(it) }),
     }
 }
@@ -2793,7 +2793,7 @@
 pub fn fold_where_eq_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereEqPredicate) -> WhereEqPredicate {
     WhereEqPredicate {
         lhs_ty: _visitor.fold_type(_i . lhs_ty),
-        eq_token: _i . eq_token,
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         rhs_ty: _visitor.fold_type(_i . rhs_ty),
     }
 }
@@ -2822,7 +2822,7 @@
 pub fn fold_where_region_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereRegionPredicate) -> WhereRegionPredicate {
     WhereRegionPredicate {
         lifetime: _visitor.fold_lifetime(_i . lifetime),
-        colon_token: _i . colon_token,
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
     }
 }
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index 0c929f8..5c1a7d6 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -11,6 +11,7 @@
 
 use *;
 use proc_macro2::Span;
+use gen::helper::visit::*;
 
 
 #[cfg(feature = "full")]
@@ -395,7 +396,7 @@
 
 
 pub fn visit_abi<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Abi) {
-    // Skipped field _i . extern_token;
+    tokens_helper(_visitor, &(& _i . extern_token).0);
     _visitor.visit_abi_kind(& _i . kind);
 }
 
@@ -410,26 +411,26 @@
 }
 
 pub fn visit_angle_bracketed_generic_arguments<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast AngleBracketedGenericArguments) {
-    // Skipped field _i . turbofish;
-    // Skipped field _i . lt_token;
+    if let Some(ref it) = _i . turbofish { tokens_helper(_visitor, &(it).0) };
+    tokens_helper(_visitor, &(& _i . lt_token).0);
     for el in & _i . args { let it = el.item(); _visitor.visit_generic_argument(it) };
-    // Skipped field _i . gt_token;
+    tokens_helper(_visitor, &(& _i . gt_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_arg_captured<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ArgCaptured) {
     _visitor.visit_pat(& _i . pat);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& _i . ty);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_arg_self<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ArgSelf) {
     _visitor.visit_mutability(& _i . mutbl);
-    // Skipped field _i . self_token;
+    tokens_helper(_visitor, &(& _i . self_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_arg_self_ref<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ArgSelfRef) {
-    // Skipped field _i . and_token;
-    // Skipped field _i . self_token;
+    tokens_helper(_visitor, &(& _i . and_token).0);
+    tokens_helper(_visitor, &(& _i . self_token).0);
     if let Some(ref it) = _i . lifetime { _visitor.visit_lifetime(it) };
     _visitor.visit_mutability(& _i . mutbl);
 }
@@ -437,11 +438,11 @@
 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 & _i . pats { let it = el.item(); _visitor.visit_pat(it) };
-    // Skipped field _i . if_token;
+    if let Some(ref it) = _i . if_token { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . guard { _visitor.visit_expr(& * * it) };
-    // Skipped field _i . rocket_token;
+    tokens_helper(_visitor, &(& _i . rocket_token).0);
     _visitor.visit_expr(& * _i . body);
-    // Skipped field _i . comma;
+    if let Some(ref it) = _i . comma { tokens_helper(_visitor, &(it).0) };
 }
 
 pub fn visit_attr_style<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast AttrStyle) {
@@ -449,14 +450,14 @@
     match *_i {
         Outer => { }
         Inner(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
 
 pub fn visit_attribute<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Attribute) {
     _visitor.visit_attr_style(& _i . style);
-    // Skipped field _i . pound_token;
+    tokens_helper(_visitor, &(& _i . pound_token).0);
     // Skipped field _i . bracket_token;
     _visitor.visit_path(& _i . path);
     // Skipped field _i . tts;
@@ -466,7 +467,7 @@
 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);
-            // Skipped field ( it ) . 1;
+            tokens_helper(_visitor, &(& ( it ) . 1).0);
          };
     _visitor.visit_type(& _i . ty);
 }
@@ -478,7 +479,7 @@
             _visitor.visit_ident(_binding_0);
         }
         Wild(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
@@ -487,10 +488,10 @@
     if let Some(ref it) = _i . lifetimes { _visitor.visit_bound_lifetimes(it) };
     _visitor.visit_unsafety(& _i . unsafety);
     if let Some(ref it) = _i . abi { _visitor.visit_abi(it) };
-    // Skipped field _i . fn_token;
+    tokens_helper(_visitor, &(& _i . fn_token).0);
     // Skipped field _i . paren_token;
     for el in & _i . inputs { let it = el.item(); _visitor.visit_bare_fn_arg(it) };
-    // Skipped field _i . variadic;
+    if let Some(ref it) = _i . variadic { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_return_type(& _i . output);
 }
 
@@ -498,88 +499,88 @@
     use ::BinOp::*;
     match *_i {
         Add(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Sub(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Mul(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Div(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Rem(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         And(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Or(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         BitXor(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         BitAnd(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         BitOr(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Shl(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Shr(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Eq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Lt(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Le(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Ne(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Ge(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Gt(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         AddEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         SubEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         MulEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         DivEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         RemEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         BitXorEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         BitAndEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         BitOrEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         ShlEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         ShrEq(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
@@ -588,7 +589,7 @@
     use ::BindingMode::*;
     match *_i {
         ByRef(ref _binding_0, ref _binding_1, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
             _visitor.visit_mutability(_binding_1);
         }
         ByValue(ref _binding_0, ) => {
@@ -615,29 +616,29 @@
 }
 
 pub fn visit_body_enum<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BodyEnum) {
-    // Skipped field _i . enum_token;
+    tokens_helper(_visitor, &(& _i . enum_token).0);
     // Skipped field _i . brace_token;
     for el in & _i . variants { let it = el.item(); _visitor.visit_variant(it) };
 }
 
 pub fn visit_body_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BodyStruct) {
     _visitor.visit_variant_data(& _i . data);
-    // Skipped field _i . struct_token;
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . struct_token).0);
+    if let Some(ref it) = _i . semi_token { tokens_helper(_visitor, &(it).0) };
 }
 
 pub fn visit_bound_lifetimes<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BoundLifetimes) {
-    // Skipped field _i . for_token;
-    // Skipped field _i . lt_token;
+    tokens_helper(_visitor, &(& _i . for_token).0);
+    tokens_helper(_visitor, &(& _i . lt_token).0);
     for el in & _i . lifetimes { let it = el.item(); _visitor.visit_lifetime_def(it) };
-    // Skipped field _i . gt_token;
+    tokens_helper(_visitor, &(& _i . gt_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_capture_by<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast CaptureBy) {
     use ::CaptureBy::*;
     match *_i {
         Value(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Ref => { }
     }
@@ -645,11 +646,11 @@
 
 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) };
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &(& _i . const_token).0);
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& _i . ty);
-    // Skipped field _i . eq_token;
+    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 ( feature = "full" ) ]
@@ -657,7 +658,7 @@
     use ::Constness::*;
     match *_i {
         Const(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         NotConst => { }
     }
@@ -667,7 +668,7 @@
     use ::Defaultness::*;
     match *_i {
         Default(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Final => { }
     }
@@ -687,7 +688,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_addr_of<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprAddrOf) {
-    // Skipped field _i . and_token;
+    tokens_helper(_visitor, &(& _i . and_token).0);
     _visitor.visit_mutability(& _i . mutbl);
     _visitor.visit_expr(& * _i . expr);
 }
@@ -700,7 +701,7 @@
 pub fn visit_expr_assign<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprAssign) {
     _visitor.visit_expr(& * _i . left);
     _visitor.visit_expr(& * _i . right);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_assign_op<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprAssignOp) {
@@ -721,13 +722,13 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_box<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprBox) {
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . box_token;
+    tokens_helper(_visitor, &(& _i . box_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_break<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprBreak) {
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     if let Some(ref it) = _i . expr { _visitor.visit_expr(& * * it) };
-    // Skipped field _i . break_token;
+    tokens_helper(_visitor, &(& _i . break_token).0);
 }
 
 pub fn visit_expr_call<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCall) {
@@ -738,33 +739,33 @@
 
 pub fn visit_expr_cast<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCast) {
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . as_token;
+    tokens_helper(_visitor, &(& _i . as_token).0);
     _visitor.visit_type(& * _i . ty);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_catch<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCatch) {
-    // Skipped field _i . do_token;
-    // Skipped field _i . catch_token;
+    tokens_helper(_visitor, &(& _i . do_token).0);
+    tokens_helper(_visitor, &(& _i . catch_token).0);
     _visitor.visit_block(& _i . block);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_closure<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprClosure) {
     _visitor.visit_capture_by(& _i . capture);
-    // Skipped field _i . or1_token;
+    tokens_helper(_visitor, &(& _i . or1_token).0);
     for el in & _i . inputs { let it = el.item(); _visitor.visit_fn_arg(it) };
-    // Skipped field _i . or2_token;
+    tokens_helper(_visitor, &(& _i . or2_token).0);
     _visitor.visit_return_type(& _i . output);
     _visitor.visit_expr(& * _i . body);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_continue<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprContinue) {
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
-    // Skipped field _i . continue_token;
+    tokens_helper(_visitor, &(& _i . continue_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_field<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprField) {
     _visitor.visit_expr(& * _i . base);
-    // Skipped field _i . dot_token;
+    tokens_helper(_visitor, &(& _i . dot_token).0);
     _visitor.visit_member(& _i . member);
 }
 # [ cfg ( feature = "full" ) ]
@@ -773,9 +774,9 @@
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_block(& _i . body);
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
-    // Skipped field _i . for_token;
-    // Skipped field _i . colon_token;
-    // Skipped field _i . in_token;
+    tokens_helper(_visitor, &(& _i . for_token).0);
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
+    tokens_helper(_visitor, &(& _i . in_token).0);
 }
 
 pub fn visit_expr_group<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprGroup) {
@@ -787,8 +788,8 @@
     _visitor.visit_expr(& * _i . cond);
     _visitor.visit_block(& _i . if_true);
     if let Some(ref it) = _i . if_false { _visitor.visit_expr(& * * it) };
-    // Skipped field _i . if_token;
-    // Skipped field _i . else_token;
+    tokens_helper(_visitor, &(& _i . if_token).0);
+    if let Some(ref it) = _i . else_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_if_let<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprIfLet) {
@@ -796,10 +797,10 @@
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_block(& _i . if_true);
     if let Some(ref it) = _i . if_false { _visitor.visit_expr(& * * it) };
-    // Skipped field _i . if_token;
-    // Skipped field _i . let_token;
-    // Skipped field _i . eq_token;
-    // Skipped field _i . else_token;
+    tokens_helper(_visitor, &(& _i . if_token).0);
+    tokens_helper(_visitor, &(& _i . let_token).0);
+    tokens_helper(_visitor, &(& _i . eq_token).0);
+    if let Some(ref it) = _i . else_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_in_place<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprInPlace) {
@@ -940,12 +941,12 @@
 pub fn visit_expr_loop<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprLoop) {
     _visitor.visit_block(& _i . body);
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
-    // Skipped field _i . loop_token;
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . loop_token).0);
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_match<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprMatch) {
-    // Skipped field _i . match_token;
+    tokens_helper(_visitor, &(& _i . match_token).0);
     // Skipped field _i . brace_token;
     _visitor.visit_expr(& * _i . expr);
     for it in & _i . arms { _visitor.visit_arm(it) };
@@ -957,10 +958,10 @@
     for el in & _i . typarams { let it = el.item(); _visitor.visit_type(it) };
     for el in & _i . args { let it = el.item(); _visitor.visit_expr(it) };
     // Skipped field _i . paren_token;
-    // Skipped field _i . dot_token;
-    // Skipped field _i . lt_token;
-    // Skipped field _i . colon2_token;
-    // Skipped field _i . gt_token;
+    tokens_helper(_visitor, &(& _i . dot_token).0);
+    if let Some(ref it) = _i . lt_token { tokens_helper(_visitor, &(it).0) };
+    if let Some(ref it) = _i . colon2_token { tokens_helper(_visitor, &(it).0) };
+    if let Some(ref it) = _i . gt_token { tokens_helper(_visitor, &(it).0) };
 }
 
 pub fn visit_expr_paren<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprParen) {
@@ -981,27 +982,27 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_repeat<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprRepeat) {
     // Skipped field _i . bracket_token;
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_expr(& * _i . amt);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_ret<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprRet) {
     if let Some(ref it) = _i . expr { _visitor.visit_expr(& * * it) };
-    // Skipped field _i . return_token;
+    tokens_helper(_visitor, &(& _i . return_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprStruct) {
     _visitor.visit_path(& _i . path);
     for el in & _i . fields { let it = el.item(); _visitor.visit_field_value(it) };
     if let Some(ref it) = _i . rest { _visitor.visit_expr(& * * it) };
-    // Skipped field _i . dot2_token;
+    if let Some(ref it) = _i . dot2_token { tokens_helper(_visitor, &(it).0) };
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_try<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprTry) {
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . question_token;
+    tokens_helper(_visitor, &(& _i . question_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_tuple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprTuple) {
@@ -1011,7 +1012,7 @@
 
 pub fn visit_expr_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprType) {
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& * _i . ty);
 }
 
@@ -1021,7 +1022,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_unsafe<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprUnsafe) {
-    // Skipped field _i . unsafe_token;
+    tokens_helper(_visitor, &(& _i . unsafe_token).0);
     _visitor.visit_block(& _i . block);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1029,8 +1030,8 @@
     _visitor.visit_expr(& * _i . cond);
     _visitor.visit_block(& _i . body);
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
-    // Skipped field _i . colon_token;
-    // Skipped field _i . while_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
+    tokens_helper(_visitor, &(& _i . while_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_while_let<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprWhileLet) {
@@ -1038,14 +1039,14 @@
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_block(& _i . body);
     if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
-    // Skipped field _i . colon_token;
-    // Skipped field _i . while_token;
-    // Skipped field _i . let_token;
-    // Skipped field _i . eq_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
+    tokens_helper(_visitor, &(& _i . while_token).0);
+    tokens_helper(_visitor, &(& _i . let_token).0);
+    tokens_helper(_visitor, &(& _i . eq_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_yield<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprYield) {
-    // Skipped field _i . yield_token;
+    tokens_helper(_visitor, &(& _i . yield_token).0);
     if let Some(ref it) = _i . expr { _visitor.visit_expr(& * * it) };
 }
 
@@ -1054,21 +1055,21 @@
     _visitor.visit_visibility(& _i . vis);
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_type(& _i . ty);
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_field_pat<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FieldPat) {
     _visitor.visit_member(& _i . member);
     _visitor.visit_pat(& * _i . pat);
     // Skipped field _i . is_shorthand;
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for it in & _i . attrs { _visitor.visit_attribute(it) };
 }
 # [ 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);
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_expr(& _i . expr);
     // Skipped field _i . is_shorthand;
 }
@@ -1101,12 +1102,12 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_fn_decl<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FnDecl) {
-    // Skipped field _i . fn_token;
+    tokens_helper(_visitor, &(& _i . fn_token).0);
     // Skipped field _i . paren_token;
     for el in & _i . inputs { let it = el.item(); _visitor.visit_fn_arg(it) };
     _visitor.visit_return_type(& _i . output);
     _visitor.visit_generics(& _i . generics);
-    // Skipped field _i . variadic;
+    if let Some(ref it) = _i . variadic { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_foreign_item<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ForeignItem) {
@@ -1129,26 +1130,26 @@
     _visitor.visit_visibility(& _i . vis);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_fn_decl(& * _i . decl);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_foreign_item_static<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ForeignItemStatic) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . static_token;
+    tokens_helper(_visitor, &(& _i . static_token).0);
     _visitor.visit_mutability(& _i . mutbl);
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& * _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_foreign_item_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ForeignItemType) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &(& _i . type_token).0);
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 
 pub fn visit_generic_argument<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast GenericArgument) {
@@ -1185,9 +1186,9 @@
 }
 
 pub fn visit_generics<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Generics) {
-    // Skipped field _i . lt_token;
+    if let Some(ref it) = _i . lt_token { tokens_helper(_visitor, &(it).0) };
     for el in & _i . params { let it = el.item(); _visitor.visit_generic_param(it) };
-    // Skipped field _i . gt_token;
+    if let Some(ref it) = _i . gt_token { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . where_clause { _visitor.visit_where_clause(it) };
 }
 
@@ -1218,19 +1219,19 @@
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
     _visitor.visit_defaultness(& _i . defaultness);
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &(& _i . const_token).0);
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& _i . ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_expr(& _i . expr);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ImplItemMacro) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_macro(& _i . mac);
-    // Skipped field _i . semi_token;
+    if let Some(ref it) = _i . semi_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item_method<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ImplItemMethod) {
@@ -1245,12 +1246,12 @@
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
     _visitor.visit_defaultness(& _i . defaultness);
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &(& _i . type_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_type(& _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_polarity<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ImplPolarity) {
@@ -1258,7 +1259,7 @@
     match *_i {
         Positive => { }
         Negative(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
@@ -1267,10 +1268,10 @@
     use ::InPlaceKind::*;
     match *_i {
         Arrow(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         In(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
@@ -1337,29 +1338,29 @@
 pub fn visit_item_const<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemConst) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &(& _i . const_token).0);
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& * _i . ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_default_impl<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemDefaultImpl) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_unsafety(& _i . unsafety);
-    // Skipped field _i . impl_token;
+    tokens_helper(_visitor, &(& _i . impl_token).0);
     _visitor.visit_path(& _i . path);
-    // Skipped field _i . for_token;
-    // Skipped field _i . dot2_token;
+    tokens_helper(_visitor, &(& _i . for_token).0);
+    tokens_helper(_visitor, &(& _i . dot2_token).0);
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_enum<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemEnum) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . enum_token;
+    tokens_helper(_visitor, &(& _i . enum_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
     // Skipped field _i . brace_token;
@@ -1369,14 +1370,14 @@
 pub fn visit_item_extern_crate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemExternCrate) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . extern_token;
-    // Skipped field _i . crate_token;
+    tokens_helper(_visitor, &(& _i . extern_token).0);
+    tokens_helper(_visitor, &(& _i . crate_token).0);
     _visitor.visit_ident(& _i . ident);
     if let Some(ref it) = _i . rename { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &(& ( it ) . 0).0);
             _visitor.visit_ident(& ( it ) . 1);
          };
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_fn<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemFn) {
@@ -1401,12 +1402,12 @@
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_defaultness(& _i . defaultness);
     _visitor.visit_unsafety(& _i . unsafety);
-    // Skipped field _i . impl_token;
+    tokens_helper(_visitor, &(& _i . impl_token).0);
     _visitor.visit_generics(& _i . generics);
     if let Some(ref it) = _i . trait_ { 
             _visitor.visit_impl_polarity(& ( it ) . 0);
             _visitor.visit_path(& ( it ) . 1);
-            // Skipped field ( it ) . 2;
+            tokens_helper(_visitor, &(& ( it ) . 2).0);
          };
     _visitor.visit_type(& * _i . self_ty);
     // Skipped field _i . brace_token;
@@ -1417,13 +1418,13 @@
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     if let Some(ref it) = _i . ident { _visitor.visit_ident(it) };
     _visitor.visit_macro(& _i . mac);
-    // Skipped field _i . semi_token;
+    if let Some(ref it) = _i . semi_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_macro2<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemMacro2) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . macro_token;
+    tokens_helper(_visitor, &(& _i . macro_token).0);
     _visitor.visit_ident(& _i . ident);
     // Skipped field _i . args;
     // Skipped field _i . body;
@@ -1432,47 +1433,47 @@
 pub fn visit_item_mod<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemMod) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . mod_token;
+    tokens_helper(_visitor, &(& _i . mod_token).0);
     _visitor.visit_ident(& _i . ident);
     if let Some(ref it) = _i . content { 
             // Skipped field ( it ) . 0;
             for it in & ( it ) . 1 { _visitor.visit_item(it) };
          };
-    // Skipped field _i . semi;
+    if let Some(ref it) = _i . semi { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_static<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemStatic) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . static_token;
+    tokens_helper(_visitor, &(& _i . static_token).0);
     _visitor.visit_mutability(& _i . mutbl);
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& * _i . ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemStruct) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . struct_token;
+    tokens_helper(_visitor, &(& _i . struct_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
     _visitor.visit_variant_data(& _i . data);
-    // Skipped field _i . semi_token;
+    if let Some(ref it) = _i . semi_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_trait<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemTrait) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
     _visitor.visit_unsafety(& _i . unsafety);
-    // Skipped field _i . auto_token;
-    // Skipped field _i . trait_token;
+    if let Some(ref it) = _i . auto_token { tokens_helper(_visitor, &(it).0) };
+    tokens_helper(_visitor, &(& _i . trait_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for el in & _i . supertraits { let it = el.item(); _visitor.visit_type_param_bound(it) };
     // Skipped field _i . brace_token;
     for it in & _i . items { _visitor.visit_trait_item(it) };
@@ -1481,18 +1482,18 @@
 pub fn visit_item_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemType) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &(& _i . type_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_type(& * _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_union<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemUnion) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . union_token;
+    tokens_helper(_visitor, &(& _i . union_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
     _visitor.visit_variant_data(& _i . data);
@@ -1501,11 +1502,11 @@
 pub fn visit_item_use<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemUse) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_visibility(& _i . vis);
-    // Skipped field _i . use_token;
-    // Skipped field _i . leading_colon;
+    tokens_helper(_visitor, &(& _i . use_token).0);
+    if let Some(ref it) = _i . leading_colon { tokens_helper(_visitor, &(it).0) };
     for el in & _i . prefix { let it = el.item(); _visitor.visit_ident(it) };
     _visitor.visit_use_tree(& _i . tree);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 
 pub fn visit_lifetime<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Lifetime) {
@@ -1516,7 +1517,7 @@
 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);
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for el in & _i . bounds { let it = el.item(); _visitor.visit_lifetime(it) };
 }
 
@@ -1526,10 +1527,10 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_local<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Local) {
-    // Skipped field _i . let_token;
-    // Skipped field _i . colon_token;
-    // Skipped field _i . eq_token;
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . let_token).0);
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
+    if let Some(ref it) = _i . eq_token { tokens_helper(_visitor, &(it).0) };
+    tokens_helper(_visitor, &(& _i . semi_token).0);
     _visitor.visit_pat(& * _i . pat);
     if let Some(ref it) = _i . ty { _visitor.visit_type(& * * it) };
     if let Some(ref it) = _i . init { _visitor.visit_expr(& * * it) };
@@ -1538,7 +1539,7 @@
 
 pub fn visit_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Macro) {
     _visitor.visit_path(& _i . path);
-    // Skipped field _i . bang_token;
+    tokens_helper(_visitor, &(& _i . bang_token).0);
     // Skipped field _i . tokens;
 }
 # [ cfg ( feature = "full" ) ]
@@ -1577,7 +1578,7 @@
 
 pub fn visit_meta_name_value<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaNameValue) {
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_lit(& _i . lit);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1598,7 +1599,7 @@
     use ::Mutability::*;
     match *_i {
         Mutable(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Immutable => { }
     }
@@ -1666,14 +1667,14 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_box<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatBox) {
     _visitor.visit_pat(& * _i . pat);
-    // Skipped field _i . box_token;
+    tokens_helper(_visitor, &(& _i . box_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ident<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatIdent) {
     _visitor.visit_binding_mode(& _i . mode);
     _visitor.visit_ident(& _i . ident);
     if let Some(ref it) = _i . subpat { _visitor.visit_pat(& * * it) };
-    // Skipped field _i . at_token;
+    if let Some(ref it) = _i . at_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_lit<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatLit) {
@@ -1694,15 +1695,15 @@
 pub fn visit_pat_ref<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatRef) {
     _visitor.visit_pat(& * _i . pat);
     _visitor.visit_mutability(& _i . mutbl);
-    // Skipped field _i . and_token;
+    tokens_helper(_visitor, &(& _i . and_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_slice<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatSlice) {
     for el in & _i . front { let it = el.item(); _visitor.visit_pat(it) };
     if let Some(ref it) = _i . middle { _visitor.visit_pat(& * * it) };
     for el in & _i . back { let it = el.item(); _visitor.visit_pat(it) };
-    // Skipped field _i . dot2_token;
-    // Skipped field _i . comma_token;
+    if let Some(ref it) = _i . dot2_token { tokens_helper(_visitor, &(it).0) };
+    if let Some(ref it) = _i . comma_token { tokens_helper(_visitor, &(it).0) };
     // Skipped field _i . bracket_token;
 }
 # [ cfg ( feature = "full" ) ]
@@ -1710,15 +1711,15 @@
     _visitor.visit_path(& _i . path);
     for el in & _i . fields { let it = el.item(); _visitor.visit_field_pat(it) };
     // Skipped field _i . brace_token;
-    // Skipped field _i . dot2_token;
+    if let Some(ref it) = _i . dot2_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_tuple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatTuple) {
     for el in & _i . pats { let it = el.item(); _visitor.visit_pat(it) };
     // Skipped field _i . dots_pos;
     // Skipped field _i . paren_token;
-    // Skipped field _i . dot2_token;
-    // Skipped field _i . comma_token;
+    if let Some(ref it) = _i . dot2_token { tokens_helper(_visitor, &(it).0) };
+    if let Some(ref it) = _i . comma_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_tuple_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatTupleStruct) {
@@ -1727,11 +1728,11 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_wild<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatWild) {
-    // Skipped field _i . underscore_token;
+    tokens_helper(_visitor, &(& _i . underscore_token).0);
 }
 
 pub fn visit_path<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Path) {
-    // Skipped field _i . leading_colon;
+    if let Some(ref it) = _i . leading_colon { tokens_helper(_visitor, &(it).0) };
     for el in & _i . segments { let it = el.item(); _visitor.visit_path_segment(it) };
 }
 
@@ -1759,21 +1760,21 @@
 }
 
 pub fn visit_qself<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast QSelf) {
-    // Skipped field _i . lt_token;
+    tokens_helper(_visitor, &(& _i . lt_token).0);
     _visitor.visit_type(& * _i . ty);
     // Skipped field _i . position;
-    // Skipped field _i . as_token;
-    // Skipped field _i . gt_token;
+    if let Some(ref it) = _i . as_token { tokens_helper(_visitor, &(it).0) };
+    tokens_helper(_visitor, &(& _i . gt_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_range_limits<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast RangeLimits) {
     use ::RangeLimits::*;
     match *_i {
         HalfOpen(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Closed(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
@@ -1784,7 +1785,7 @@
         Default => { }
         Type(ref _binding_0, ref _binding_1, ) => {
             _visitor.visit_type(& * * _binding_0);
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &(_binding_1).0);
         }
     }
 }
@@ -1806,7 +1807,7 @@
         }
         Semi(ref _binding_0, ref _binding_1, ) => {
             _visitor.visit_expr(& * * _binding_0);
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &(_binding_1).0);
         }
     }
 }
@@ -1816,7 +1817,7 @@
     match *_i {
         None => { }
         Maybe(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
@@ -1841,42 +1842,42 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_const<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitItemConst) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &(& _i . const_token).0);
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     _visitor.visit_type(& _i . ty);
     if let Some(ref it) = _i . default { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &(& ( it ) . 0).0);
             _visitor.visit_expr(& ( it ) . 1);
          };
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitItemMacro) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_macro(& _i . mac);
-    // Skipped field _i . semi_token;
+    if let Some(ref it) = _i . semi_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_method<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitItemMethod) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_method_sig(& _i . sig);
     if let Some(ref it) = _i . default { _visitor.visit_block(it) };
-    // Skipped field _i . semi_token;
+    if let Some(ref it) = _i . semi_token { tokens_helper(_visitor, &(it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitItemType) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &(& _i . type_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for el in & _i . bounds { let it = el.item(); _visitor.visit_type_param_bound(it) };
     if let Some(ref it) = _i . default { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &(& ( it ) . 0).0);
             _visitor.visit_type(& ( it ) . 1);
          };
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
 }
 
 pub fn visit_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Type) {
@@ -1930,7 +1931,7 @@
 pub fn visit_type_array<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeArray) {
     // Skipped field _i . bracket_token;
     _visitor.visit_type(& * _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &(& _i . semi_token).0);
     _visitor.visit_expr(& _i . amt);
 }
 
@@ -1940,7 +1941,7 @@
 
 pub fn visit_type_binding<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeBinding) {
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_type(& _i . ty);
 }
 
@@ -1950,24 +1951,24 @@
 }
 
 pub fn visit_type_impl_trait<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeImplTrait) {
-    // Skipped field _i . impl_token;
+    tokens_helper(_visitor, &(& _i . impl_token).0);
     for el in & _i . bounds { let it = el.item(); _visitor.visit_type_param_bound(it) };
 }
 
 pub fn visit_type_infer<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeInfer) {
-    // Skipped field _i . underscore_token;
+    tokens_helper(_visitor, &(& _i . underscore_token).0);
 }
 
 pub fn visit_type_never<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeNever) {
-    // Skipped field _i . bang_token;
+    tokens_helper(_visitor, &(& _i . bang_token).0);
 }
 
 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);
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for el in & _i . bounds { let it = el.item(); _visitor.visit_type_param_bound(it) };
-    // Skipped field _i . eq_token;
+    if let Some(ref it) = _i . eq_token { tokens_helper(_visitor, &(it).0) };
     if let Some(ref it) = _i . default { _visitor.visit_type(it) };
 }
 
@@ -1995,13 +1996,13 @@
 }
 
 pub fn visit_type_ptr<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypePtr) {
-    // Skipped field _i . star_token;
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &(& _i . star_token).0);
+    if let Some(ref it) = _i . const_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_mut_type(& * _i . ty);
 }
 
 pub fn visit_type_reference<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeReference) {
-    // Skipped field _i . and_token;
+    tokens_helper(_visitor, &(& _i . and_token).0);
     if let Some(ref it) = _i . lifetime { _visitor.visit_lifetime(it) };
     _visitor.visit_mut_type(& * _i . ty);
 }
@@ -2012,7 +2013,7 @@
 }
 
 pub fn visit_type_trait_object<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeTraitObject) {
-    // Skipped field _i . dyn_token;
+    if let Some(ref it) = _i . dyn_token { tokens_helper(_visitor, &(it).0) };
     for el in & _i . bounds { let it = el.item(); _visitor.visit_type_param_bound(it) };
 }
 
@@ -2025,13 +2026,13 @@
     use ::UnOp::*;
     match *_i {
         Deref(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Not(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Neg(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
     }
 }
@@ -2040,14 +2041,14 @@
     use ::Unsafety::*;
     match *_i {
         Unsafe(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &(_binding_0).0);
         }
         Normal => { }
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_glob<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseGlob) {
-    // Skipped field _i . star_token;
+    tokens_helper(_visitor, &(& _i . star_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_list<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseList) {
@@ -2058,7 +2059,7 @@
 pub fn visit_use_path<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UsePath) {
     _visitor.visit_ident(& _i . ident);
     if let Some(ref it) = _i . rename { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &(& ( it ) . 0).0);
             _visitor.visit_ident(& ( it ) . 1);
          };
 }
@@ -2083,7 +2084,7 @@
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_variant_data(& _i . data);
     if let Some(ref it) = _i . discriminant { _visitor.visit_expr(it) };
-    // Skipped field _i . eq_token;
+    if let Some(ref it) = _i . eq_token { tokens_helper(_visitor, &(it).0) };
 }
 
 pub fn visit_variant_data<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VariantData) {
@@ -2102,22 +2103,22 @@
 }
 
 pub fn visit_vis_crate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisCrate) {
-    // Skipped field _i . pub_token;
+    tokens_helper(_visitor, &(& _i . pub_token).0);
     // Skipped field _i . paren_token;
-    // Skipped field _i . crate_token;
+    tokens_helper(_visitor, &(& _i . crate_token).0);
 }
 
 pub fn visit_vis_inherited<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisInherited) {
 }
 
 pub fn visit_vis_public<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisPublic) {
-    // Skipped field _i . pub_token;
+    tokens_helper(_visitor, &(& _i . pub_token).0);
 }
 
 pub fn visit_vis_restricted<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisRestricted) {
-    // Skipped field _i . pub_token;
+    tokens_helper(_visitor, &(& _i . pub_token).0);
     // Skipped field _i . paren_token;
-    // Skipped field _i . in_token;
+    if let Some(ref it) = _i . in_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_path(& * _i . path);
 }
 
@@ -2142,18 +2143,18 @@
 pub fn visit_where_bound_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereBoundPredicate) {
     if let Some(ref it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes(it) };
     _visitor.visit_type(& _i . bounded_ty);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &(& _i . colon_token).0);
     for el in & _i . bounds { let it = el.item(); _visitor.visit_type_param_bound(it) };
 }
 
 pub fn visit_where_clause<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereClause) {
-    // Skipped field _i . where_token;
+    tokens_helper(_visitor, &(& _i . where_token).0);
     for el in & _i . predicates { let it = el.item(); _visitor.visit_where_predicate(it) };
 }
 
 pub fn visit_where_eq_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereEqPredicate) {
     _visitor.visit_type(& _i . lhs_ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_type(& _i . rhs_ty);
 }
 
@@ -2174,7 +2175,7 @@
 
 pub fn visit_where_region_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereRegionPredicate) {
     _visitor.visit_lifetime(& _i . lifetime);
-    // Skipped field _i . colon_token;
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
     for el in & _i . bounds { let it = el.item(); _visitor.visit_lifetime(it) };
 }
 
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index ed05ffb..81a0a11 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -11,6 +11,7 @@
 
 use *;
 use proc_macro2::Span;
+use gen::helper::visit_mut::*;
 
 
 #[cfg(feature = "full")]
@@ -395,7 +396,7 @@
 
 
 pub fn visit_abi_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Abi) {
-    // Skipped field _i . extern_token;
+    tokens_helper(_visitor, &mut (& mut _i . extern_token).0);
     _visitor.visit_abi_kind_mut(& mut _i . kind);
 }
 
@@ -410,26 +411,26 @@
 }
 
 pub fn visit_angle_bracketed_generic_arguments_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AngleBracketedGenericArguments) {
-    // Skipped field _i . turbofish;
-    // Skipped field _i . lt_token;
+    if let Some(ref mut it) = _i . turbofish { tokens_helper(_visitor, &mut (it).0) };
+    tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
     for mut el in & mut _i . args { let it = el.item_mut(); _visitor.visit_generic_argument_mut(it) };
-    // Skipped field _i . gt_token;
+    tokens_helper(_visitor, &mut (& mut _i . gt_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_arg_captured_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgCaptured) {
     _visitor.visit_pat_mut(& mut _i . pat);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut _i . ty);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_arg_self_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgSelf) {
     _visitor.visit_mutability_mut(& mut _i . mutbl);
-    // Skipped field _i . self_token;
+    tokens_helper(_visitor, &mut (& mut _i . self_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_arg_self_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgSelfRef) {
-    // Skipped field _i . and_token;
-    // Skipped field _i . self_token;
+    tokens_helper(_visitor, &mut (& mut _i . and_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . self_token).0);
     if let Some(ref mut it) = _i . lifetime { _visitor.visit_lifetime_mut(it) };
     _visitor.visit_mutability_mut(& mut _i . mutbl);
 }
@@ -437,11 +438,11 @@
 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 & mut _i . pats { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
-    // Skipped field _i . if_token;
+    if let Some(ref mut it) = _i . if_token { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . guard { _visitor.visit_expr_mut(& mut * * it) };
-    // Skipped field _i . rocket_token;
+    tokens_helper(_visitor, &mut (& mut _i . rocket_token).0);
     _visitor.visit_expr_mut(& mut * _i . body);
-    // Skipped field _i . comma;
+    if let Some(ref mut it) = _i . comma { tokens_helper(_visitor, &mut (it).0) };
 }
 
 pub fn visit_attr_style_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut AttrStyle) {
@@ -449,14 +450,14 @@
     match *_i {
         Outer => { }
         Inner(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
 
 pub fn visit_attribute_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Attribute) {
     _visitor.visit_attr_style_mut(& mut _i . style);
-    // Skipped field _i . pound_token;
+    tokens_helper(_visitor, &mut (& mut _i . pound_token).0);
     // Skipped field _i . bracket_token;
     _visitor.visit_path_mut(& mut _i . path);
     // Skipped field _i . tts;
@@ -466,7 +467,7 @@
 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);
-            // Skipped field ( it ) . 1;
+            tokens_helper(_visitor, &mut (& mut ( it ) . 1).0);
          };
     _visitor.visit_type_mut(& mut _i . ty);
 }
@@ -478,7 +479,7 @@
             _visitor.visit_ident_mut(_binding_0);
         }
         Wild(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
@@ -487,10 +488,10 @@
     if let Some(ref mut it) = _i . lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
     _visitor.visit_unsafety_mut(& mut _i . unsafety);
     if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(it) };
-    // Skipped field _i . fn_token;
+    tokens_helper(_visitor, &mut (& mut _i . fn_token).0);
     // Skipped field _i . paren_token;
     for mut el in & mut _i . inputs { let it = el.item_mut(); _visitor.visit_bare_fn_arg_mut(it) };
-    // Skipped field _i . variadic;
+    if let Some(ref mut it) = _i . variadic { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_return_type_mut(& mut _i . output);
 }
 
@@ -498,88 +499,88 @@
     use ::BinOp::*;
     match *_i {
         Add(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Sub(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Mul(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Div(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Rem(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         And(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Or(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         BitXor(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         BitAnd(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         BitOr(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Shl(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Shr(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Eq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Lt(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Le(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Ne(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Ge(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Gt(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         AddEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         SubEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         MulEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         DivEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         RemEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         BitXorEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         BitAndEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         BitOrEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         ShlEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         ShrEq(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
@@ -588,7 +589,7 @@
     use ::BindingMode::*;
     match *_i {
         ByRef(ref mut _binding_0, ref mut _binding_1, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
             _visitor.visit_mutability_mut(_binding_1);
         }
         ByValue(ref mut _binding_0, ) => {
@@ -615,29 +616,29 @@
 }
 
 pub fn visit_body_enum_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BodyEnum) {
-    // Skipped field _i . enum_token;
+    tokens_helper(_visitor, &mut (& mut _i . enum_token).0);
     // Skipped field _i . brace_token;
     for mut el in & mut _i . variants { let it = el.item_mut(); _visitor.visit_variant_mut(it) };
 }
 
 pub fn visit_body_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BodyStruct) {
     _visitor.visit_variant_data_mut(& mut _i . data);
-    // Skipped field _i . struct_token;
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . struct_token).0);
+    if let Some(ref mut it) = _i . semi_token { tokens_helper(_visitor, &mut (it).0) };
 }
 
 pub fn visit_bound_lifetimes_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BoundLifetimes) {
-    // Skipped field _i . for_token;
-    // Skipped field _i . lt_token;
+    tokens_helper(_visitor, &mut (& mut _i . for_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
     for mut el in & mut _i . lifetimes { let it = el.item_mut(); _visitor.visit_lifetime_def_mut(it) };
-    // Skipped field _i . gt_token;
+    tokens_helper(_visitor, &mut (& mut _i . gt_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_capture_by_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut CaptureBy) {
     use ::CaptureBy::*;
     match *_i {
         Value(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Ref => { }
     }
@@ -645,11 +646,11 @@
 
 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) };
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &mut (& mut _i . const_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut _i . ty);
-    // Skipped field _i . eq_token;
+    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 ( feature = "full" ) ]
@@ -657,7 +658,7 @@
     use ::Constness::*;
     match *_i {
         Const(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         NotConst => { }
     }
@@ -667,7 +668,7 @@
     use ::Defaultness::*;
     match *_i {
         Default(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Final => { }
     }
@@ -687,7 +688,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_addr_of_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAddrOf) {
-    // Skipped field _i . and_token;
+    tokens_helper(_visitor, &mut (& mut _i . and_token).0);
     _visitor.visit_mutability_mut(& mut _i . mutbl);
     _visitor.visit_expr_mut(& mut * _i . expr);
 }
@@ -700,7 +701,7 @@
 pub fn visit_expr_assign_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssign) {
     _visitor.visit_expr_mut(& mut * _i . left);
     _visitor.visit_expr_mut(& mut * _i . right);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_assign_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssignOp) {
@@ -721,13 +722,13 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_box_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBox) {
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . box_token;
+    tokens_helper(_visitor, &mut (& mut _i . box_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_break_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBreak) {
     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) };
-    // Skipped field _i . break_token;
+    tokens_helper(_visitor, &mut (& mut _i . break_token).0);
 }
 
 pub fn visit_expr_call_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCall) {
@@ -738,33 +739,33 @@
 
 pub fn visit_expr_cast_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCast) {
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . as_token;
+    tokens_helper(_visitor, &mut (& mut _i . as_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_catch_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCatch) {
-    // Skipped field _i . do_token;
-    // Skipped field _i . catch_token;
+    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" ) ]
 pub fn visit_expr_closure_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprClosure) {
     _visitor.visit_capture_by_mut(& mut _i . capture);
-    // Skipped field _i . or1_token;
+    tokens_helper(_visitor, &mut (& mut _i . or1_token).0);
     for mut el in & mut _i . inputs { let it = el.item_mut(); _visitor.visit_fn_arg_mut(it) };
-    // Skipped field _i . or2_token;
+    tokens_helper(_visitor, &mut (& mut _i . or2_token).0);
     _visitor.visit_return_type_mut(& mut _i . output);
     _visitor.visit_expr_mut(& mut * _i . body);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_continue_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprContinue) {
     if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
-    // Skipped field _i . continue_token;
+    tokens_helper(_visitor, &mut (& mut _i . continue_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprField) {
     _visitor.visit_expr_mut(& mut * _i . base);
-    // Skipped field _i . dot_token;
+    tokens_helper(_visitor, &mut (& mut _i . dot_token).0);
     _visitor.visit_member_mut(& mut _i . member);
 }
 # [ cfg ( feature = "full" ) ]
@@ -773,9 +774,9 @@
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_block_mut(& mut _i . body);
     if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
-    // Skipped field _i . for_token;
-    // Skipped field _i . colon_token;
-    // Skipped field _i . in_token;
+    tokens_helper(_visitor, &mut (& mut _i . for_token).0);
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
+    tokens_helper(_visitor, &mut (& mut _i . in_token).0);
 }
 
 pub fn visit_expr_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprGroup) {
@@ -787,8 +788,8 @@
     _visitor.visit_expr_mut(& mut * _i . cond);
     _visitor.visit_block_mut(& mut _i . if_true);
     if let Some(ref mut it) = _i . if_false { _visitor.visit_expr_mut(& mut * * it) };
-    // Skipped field _i . if_token;
-    // Skipped field _i . else_token;
+    tokens_helper(_visitor, &mut (& mut _i . if_token).0);
+    if let Some(ref mut it) = _i . else_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_if_let_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIfLet) {
@@ -796,10 +797,10 @@
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_block_mut(& mut _i . if_true);
     if let Some(ref mut it) = _i . if_false { _visitor.visit_expr_mut(& mut * * it) };
-    // Skipped field _i . if_token;
-    // Skipped field _i . let_token;
-    // Skipped field _i . eq_token;
-    // Skipped field _i . else_token;
+    tokens_helper(_visitor, &mut (& mut _i . if_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . let_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
+    if let Some(ref mut it) = _i . else_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_in_place_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprInPlace) {
@@ -940,12 +941,12 @@
 pub fn visit_expr_loop_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprLoop) {
     _visitor.visit_block_mut(& mut _i . body);
     if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
-    // Skipped field _i . loop_token;
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . loop_token).0);
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_match_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMatch) {
-    // Skipped field _i . match_token;
+    tokens_helper(_visitor, &mut (& mut _i . match_token).0);
     // Skipped field _i . brace_token;
     _visitor.visit_expr_mut(& mut * _i . expr);
     for it in & mut _i . arms { _visitor.visit_arm_mut(it) };
@@ -957,10 +958,10 @@
     for mut el in & mut _i . typarams { let it = el.item_mut(); _visitor.visit_type_mut(it) };
     for mut el in & mut _i . args { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
     // Skipped field _i . paren_token;
-    // Skipped field _i . dot_token;
-    // Skipped field _i . lt_token;
-    // Skipped field _i . colon2_token;
-    // Skipped field _i . gt_token;
+    tokens_helper(_visitor, &mut (& mut _i . dot_token).0);
+    if let Some(ref mut it) = _i . lt_token { tokens_helper(_visitor, &mut (it).0) };
+    if let Some(ref mut it) = _i . colon2_token { tokens_helper(_visitor, &mut (it).0) };
+    if let Some(ref mut it) = _i . gt_token { tokens_helper(_visitor, &mut (it).0) };
 }
 
 pub fn visit_expr_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprParen) {
@@ -981,27 +982,27 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_repeat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRepeat) {
     // Skipped field _i . bracket_token;
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_expr_mut(& mut * _i . amt);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_ret_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRet) {
     if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(& mut * * it) };
-    // Skipped field _i . return_token;
+    tokens_helper(_visitor, &mut (& mut _i . return_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprStruct) {
     _visitor.visit_path_mut(& mut _i . path);
     for mut el in & mut _i . fields { let it = el.item_mut(); _visitor.visit_field_value_mut(it) };
     if let Some(ref mut it) = _i . rest { _visitor.visit_expr_mut(& mut * * it) };
-    // Skipped field _i . dot2_token;
+    if let Some(ref mut it) = _i . dot2_token { tokens_helper(_visitor, &mut (it).0) };
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_try_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTry) {
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . question_token;
+    tokens_helper(_visitor, &mut (& mut _i . question_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTuple) {
@@ -1011,7 +1012,7 @@
 
 pub fn visit_expr_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprType) {
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
 }
 
@@ -1021,7 +1022,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_unsafe_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprUnsafe) {
-    // Skipped field _i . unsafe_token;
+    tokens_helper(_visitor, &mut (& mut _i . unsafe_token).0);
     _visitor.visit_block_mut(& mut _i . block);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1029,8 +1030,8 @@
     _visitor.visit_expr_mut(& mut * _i . cond);
     _visitor.visit_block_mut(& mut _i . body);
     if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
-    // Skipped field _i . colon_token;
-    // Skipped field _i . while_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
+    tokens_helper(_visitor, &mut (& mut _i . while_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_while_let_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhileLet) {
@@ -1038,14 +1039,14 @@
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_block_mut(& mut _i . body);
     if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
-    // Skipped field _i . colon_token;
-    // Skipped field _i . while_token;
-    // Skipped field _i . let_token;
-    // Skipped field _i . eq_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
+    tokens_helper(_visitor, &mut (& mut _i . while_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . let_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_yield_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprYield) {
-    // Skipped field _i . yield_token;
+    tokens_helper(_visitor, &mut (& mut _i . yield_token).0);
     if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(& mut * * it) };
 }
 
@@ -1054,21 +1055,21 @@
     _visitor.visit_visibility_mut(& mut _i . vis);
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_type_mut(& mut _i . ty);
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_field_pat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldPat) {
     _visitor.visit_member_mut(& mut _i . member);
     _visitor.visit_pat_mut(& mut * _i . pat);
     // Skipped field _i . is_shorthand;
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
 }
 # [ 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);
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_expr_mut(& mut _i . expr);
     // Skipped field _i . is_shorthand;
 }
@@ -1101,12 +1102,12 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_fn_decl_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FnDecl) {
-    // Skipped field _i . fn_token;
+    tokens_helper(_visitor, &mut (& mut _i . fn_token).0);
     // Skipped field _i . paren_token;
     for mut el in & mut _i . inputs { let it = el.item_mut(); _visitor.visit_fn_arg_mut(it) };
     _visitor.visit_return_type_mut(& mut _i . output);
     _visitor.visit_generics_mut(& mut _i . generics);
-    // Skipped field _i . variadic;
+    if let Some(ref mut it) = _i . variadic { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_foreign_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItem) {
@@ -1129,26 +1130,26 @@
     _visitor.visit_visibility_mut(& mut _i . vis);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_fn_decl_mut(& mut * _i . decl);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_foreign_item_static_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemStatic) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . static_token;
+    tokens_helper(_visitor, &mut (& mut _i . static_token).0);
     _visitor.visit_mutability_mut(& mut _i . mutbl);
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_foreign_item_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemType) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &mut (& mut _i . type_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 
 pub fn visit_generic_argument_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut GenericArgument) {
@@ -1185,9 +1186,9 @@
 }
 
 pub fn visit_generics_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Generics) {
-    // Skipped field _i . lt_token;
+    if let Some(ref mut it) = _i . lt_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . params { let it = el.item_mut(); _visitor.visit_generic_param_mut(it) };
-    // Skipped field _i . gt_token;
+    if let Some(ref mut it) = _i . gt_token { tokens_helper(_visitor, &mut (it).0) };
     if let Some(ref mut it) = _i . where_clause { _visitor.visit_where_clause_mut(it) };
 }
 
@@ -1218,19 +1219,19 @@
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
     _visitor.visit_defaultness_mut(& mut _i . defaultness);
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &mut (& mut _i . const_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut _i . ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_expr_mut(& mut _i . expr);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemMacro) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_macro_mut(& mut _i . mac);
-    // Skipped field _i . semi_token;
+    if let Some(ref mut it) = _i . semi_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item_method_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItemMethod) {
@@ -1245,12 +1246,12 @@
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
     _visitor.visit_defaultness_mut(& mut _i . defaultness);
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &mut (& mut _i . type_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_generics_mut(& mut _i . generics);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_type_mut(& mut _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_polarity_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplPolarity) {
@@ -1258,7 +1259,7 @@
     match *_i {
         Positive => { }
         Negative(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
@@ -1267,10 +1268,10 @@
     use ::InPlaceKind::*;
     match *_i {
         Arrow(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         In(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
@@ -1337,29 +1338,29 @@
 pub fn visit_item_const_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemConst) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &mut (& mut _i . const_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_default_impl_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemDefaultImpl) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_unsafety_mut(& mut _i . unsafety);
-    // Skipped field _i . impl_token;
+    tokens_helper(_visitor, &mut (& mut _i . impl_token).0);
     _visitor.visit_path_mut(& mut _i . path);
-    // Skipped field _i . for_token;
-    // Skipped field _i . dot2_token;
+    tokens_helper(_visitor, &mut (& mut _i . for_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . dot2_token).0);
     // Skipped field _i . brace_token;
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_enum_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemEnum) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . enum_token;
+    tokens_helper(_visitor, &mut (& mut _i . enum_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_generics_mut(& mut _i . generics);
     // Skipped field _i . brace_token;
@@ -1369,14 +1370,14 @@
 pub fn visit_item_extern_crate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemExternCrate) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . extern_token;
-    // Skipped field _i . crate_token;
+    tokens_helper(_visitor, &mut (& mut _i . extern_token).0);
+    tokens_helper(_visitor, &mut (& mut _i . crate_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     if let Some(ref mut it) = _i . rename { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
             _visitor.visit_ident_mut(& mut ( it ) . 1);
          };
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_fn_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemFn) {
@@ -1401,12 +1402,12 @@
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_defaultness_mut(& mut _i . defaultness);
     _visitor.visit_unsafety_mut(& mut _i . unsafety);
-    // Skipped field _i . impl_token;
+    tokens_helper(_visitor, &mut (& mut _i . impl_token).0);
     _visitor.visit_generics_mut(& mut _i . generics);
     if let Some(ref mut it) = _i . trait_ { 
             _visitor.visit_impl_polarity_mut(& mut ( it ) . 0);
             _visitor.visit_path_mut(& mut ( it ) . 1);
-            // Skipped field ( it ) . 2;
+            tokens_helper(_visitor, &mut (& mut ( it ) . 2).0);
          };
     _visitor.visit_type_mut(& mut * _i . self_ty);
     // Skipped field _i . brace_token;
@@ -1417,13 +1418,13 @@
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     if let Some(ref mut it) = _i . ident { _visitor.visit_ident_mut(it) };
     _visitor.visit_macro_mut(& mut _i . mac);
-    // Skipped field _i . semi_token;
+    if let Some(ref mut it) = _i . semi_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_macro2_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemMacro2) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . macro_token;
+    tokens_helper(_visitor, &mut (& mut _i . macro_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     // Skipped field _i . args;
     // Skipped field _i . body;
@@ -1432,47 +1433,47 @@
 pub fn visit_item_mod_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemMod) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . mod_token;
+    tokens_helper(_visitor, &mut (& mut _i . mod_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     if let Some(ref mut it) = _i . content { 
             // Skipped field ( it ) . 0;
             for it in & mut ( it ) . 1 { _visitor.visit_item_mut(it) };
          };
-    // Skipped field _i . semi;
+    if let Some(ref mut it) = _i . semi { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_static_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemStatic) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . static_token;
+    tokens_helper(_visitor, &mut (& mut _i . static_token).0);
     _visitor.visit_mutability_mut(& mut _i . mutbl);
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemStruct) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . struct_token;
+    tokens_helper(_visitor, &mut (& mut _i . struct_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_generics_mut(& mut _i . generics);
     _visitor.visit_variant_data_mut(& mut _i . data);
-    // Skipped field _i . semi_token;
+    if let Some(ref mut it) = _i . semi_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_trait_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemTrait) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
     _visitor.visit_unsafety_mut(& mut _i . unsafety);
-    // Skipped field _i . auto_token;
-    // Skipped field _i . trait_token;
+    if let Some(ref mut it) = _i . auto_token { tokens_helper(_visitor, &mut (it).0) };
+    tokens_helper(_visitor, &mut (& mut _i . trait_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_generics_mut(& mut _i . generics);
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . supertraits { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
     // Skipped field _i . brace_token;
     for it in & mut _i . items { _visitor.visit_trait_item_mut(it) };
@@ -1481,18 +1482,18 @@
 pub fn visit_item_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemType) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &mut (& mut _i . type_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_generics_mut(& mut _i . generics);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_union_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemUnion) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . union_token;
+    tokens_helper(_visitor, &mut (& mut _i . union_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_generics_mut(& mut _i . generics);
     _visitor.visit_variant_data_mut(& mut _i . data);
@@ -1501,11 +1502,11 @@
 pub fn visit_item_use_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemUse) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_visibility_mut(& mut _i . vis);
-    // Skipped field _i . use_token;
-    // Skipped field _i . leading_colon;
+    tokens_helper(_visitor, &mut (& mut _i . use_token).0);
+    if let Some(ref mut it) = _i . leading_colon { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . prefix { let it = el.item_mut(); _visitor.visit_ident_mut(it) };
     _visitor.visit_use_tree_mut(& mut _i . tree);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 
 pub fn visit_lifetime_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Lifetime) {
@@ -1516,7 +1517,7 @@
 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);
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
 }
 
@@ -1526,10 +1527,10 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_local_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Local) {
-    // Skipped field _i . let_token;
-    // Skipped field _i . colon_token;
-    // Skipped field _i . eq_token;
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . let_token).0);
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
+    if let Some(ref mut it) = _i . eq_token { tokens_helper(_visitor, &mut (it).0) };
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
     _visitor.visit_pat_mut(& mut * _i . pat);
     if let Some(ref mut it) = _i . ty { _visitor.visit_type_mut(& mut * * it) };
     if let Some(ref mut it) = _i . init { _visitor.visit_expr_mut(& mut * * it) };
@@ -1538,7 +1539,7 @@
 
 pub fn visit_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Macro) {
     _visitor.visit_path_mut(& mut _i . path);
-    // Skipped field _i . bang_token;
+    tokens_helper(_visitor, &mut (& mut _i . bang_token).0);
     // Skipped field _i . tokens;
 }
 # [ cfg ( feature = "full" ) ]
@@ -1577,7 +1578,7 @@
 
 pub fn visit_meta_name_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaNameValue) {
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_lit_mut(& mut _i . lit);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1598,7 +1599,7 @@
     use ::Mutability::*;
     match *_i {
         Mutable(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Immutable => { }
     }
@@ -1666,14 +1667,14 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_box_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatBox) {
     _visitor.visit_pat_mut(& mut * _i . pat);
-    // Skipped field _i . box_token;
+    tokens_helper(_visitor, &mut (& mut _i . box_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ident_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatIdent) {
     _visitor.visit_binding_mode_mut(& mut _i . mode);
     _visitor.visit_ident_mut(& mut _i . ident);
     if let Some(ref mut it) = _i . subpat { _visitor.visit_pat_mut(& mut * * it) };
-    // Skipped field _i . at_token;
+    if let Some(ref mut it) = _i . at_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_lit_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatLit) {
@@ -1694,15 +1695,15 @@
 pub fn visit_pat_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatRef) {
     _visitor.visit_pat_mut(& mut * _i . pat);
     _visitor.visit_mutability_mut(& mut _i . mutbl);
-    // Skipped field _i . and_token;
+    tokens_helper(_visitor, &mut (& mut _i . and_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_slice_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatSlice) {
     for mut el in & mut _i . front { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
     if let Some(ref mut it) = _i . middle { _visitor.visit_pat_mut(& mut * * it) };
     for mut el in & mut _i . back { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
-    // Skipped field _i . dot2_token;
-    // Skipped field _i . comma_token;
+    if let Some(ref mut it) = _i . dot2_token { tokens_helper(_visitor, &mut (it).0) };
+    if let Some(ref mut it) = _i . comma_token { tokens_helper(_visitor, &mut (it).0) };
     // Skipped field _i . bracket_token;
 }
 # [ cfg ( feature = "full" ) ]
@@ -1710,15 +1711,15 @@
     _visitor.visit_path_mut(& mut _i . path);
     for mut el in & mut _i . fields { let it = el.item_mut(); _visitor.visit_field_pat_mut(it) };
     // Skipped field _i . brace_token;
-    // Skipped field _i . dot2_token;
+    if let Some(ref mut it) = _i . dot2_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatTuple) {
     for mut el in & mut _i . pats { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
     // Skipped field _i . dots_pos;
     // Skipped field _i . paren_token;
-    // Skipped field _i . dot2_token;
-    // Skipped field _i . comma_token;
+    if let Some(ref mut it) = _i . dot2_token { tokens_helper(_visitor, &mut (it).0) };
+    if let Some(ref mut it) = _i . comma_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_tuple_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatTupleStruct) {
@@ -1727,11 +1728,11 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_wild_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatWild) {
-    // Skipped field _i . underscore_token;
+    tokens_helper(_visitor, &mut (& mut _i . underscore_token).0);
 }
 
 pub fn visit_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Path) {
-    // Skipped field _i . leading_colon;
+    if let Some(ref mut it) = _i . leading_colon { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . segments { let it = el.item_mut(); _visitor.visit_path_segment_mut(it) };
 }
 
@@ -1759,21 +1760,21 @@
 }
 
 pub fn visit_qself_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut QSelf) {
-    // Skipped field _i . lt_token;
+    tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
     // Skipped field _i . position;
-    // Skipped field _i . as_token;
-    // Skipped field _i . gt_token;
+    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" ) ]
 pub fn visit_range_limits_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut RangeLimits) {
     use ::RangeLimits::*;
     match *_i {
         HalfOpen(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Closed(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
@@ -1784,7 +1785,7 @@
         Default => { }
         Type(ref mut _binding_0, ref mut _binding_1, ) => {
             _visitor.visit_type_mut(& mut * * _binding_0);
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &mut (_binding_1).0);
         }
     }
 }
@@ -1806,7 +1807,7 @@
         }
         Semi(ref mut _binding_0, ref mut _binding_1, ) => {
             _visitor.visit_expr_mut(& mut * * _binding_0);
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &mut (_binding_1).0);
         }
     }
 }
@@ -1816,7 +1817,7 @@
     match *_i {
         None => { }
         Maybe(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
@@ -1841,42 +1842,42 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_const_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemConst) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &mut (& mut _i . const_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     _visitor.visit_type_mut(& mut _i . ty);
     if let Some(ref mut it) = _i . default { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
             _visitor.visit_expr_mut(& mut ( it ) . 1);
          };
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemMacro) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_macro_mut(& mut _i . mac);
-    // Skipped field _i . semi_token;
+    if let Some(ref mut it) = _i . semi_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_method_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemMethod) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_method_sig_mut(& mut _i . sig);
     if let Some(ref mut it) = _i . default { _visitor.visit_block_mut(it) };
-    // Skipped field _i . semi_token;
+    if let Some(ref mut it) = _i . semi_token { tokens_helper(_visitor, &mut (it).0) };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_trait_item_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemType) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
-    // Skipped field _i . type_token;
+    tokens_helper(_visitor, &mut (& mut _i . type_token).0);
     _visitor.visit_ident_mut(& mut _i . ident);
     _visitor.visit_generics_mut(& mut _i . generics);
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
     if let Some(ref mut it) = _i . default { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
             _visitor.visit_type_mut(& mut ( it ) . 1);
          };
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
 
 pub fn visit_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Type) {
@@ -1930,7 +1931,7 @@
 pub fn visit_type_array_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeArray) {
     // Skipped field _i . bracket_token;
     _visitor.visit_type_mut(& mut * _i . ty);
-    // Skipped field _i . semi_token;
+    tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
     _visitor.visit_expr_mut(& mut _i . amt);
 }
 
@@ -1940,7 +1941,7 @@
 
 pub fn visit_type_binding_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeBinding) {
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_type_mut(& mut _i . ty);
 }
 
@@ -1950,24 +1951,24 @@
 }
 
 pub fn visit_type_impl_trait_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeImplTrait) {
-    // Skipped field _i . impl_token;
+    tokens_helper(_visitor, &mut (& mut _i . impl_token).0);
     for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
 }
 
 pub fn visit_type_infer_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeInfer) {
-    // Skipped field _i . underscore_token;
+    tokens_helper(_visitor, &mut (& mut _i . underscore_token).0);
 }
 
 pub fn visit_type_never_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeNever) {
-    // Skipped field _i . bang_token;
+    tokens_helper(_visitor, &mut (& mut _i . bang_token).0);
 }
 
 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);
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
-    // Skipped field _i . eq_token;
+    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) };
 }
 
@@ -1995,13 +1996,13 @@
 }
 
 pub fn visit_type_ptr_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypePtr) {
-    // Skipped field _i . star_token;
-    // Skipped field _i . const_token;
+    tokens_helper(_visitor, &mut (& mut _i . star_token).0);
+    if let Some(ref mut it) = _i . const_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_mut_type_mut(& mut * _i . ty);
 }
 
 pub fn visit_type_reference_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeReference) {
-    // Skipped field _i . and_token;
+    tokens_helper(_visitor, &mut (& mut _i . and_token).0);
     if let Some(ref mut it) = _i . lifetime { _visitor.visit_lifetime_mut(it) };
     _visitor.visit_mut_type_mut(& mut * _i . ty);
 }
@@ -2012,7 +2013,7 @@
 }
 
 pub fn visit_type_trait_object_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeTraitObject) {
-    // Skipped field _i . dyn_token;
+    if let Some(ref mut it) = _i . dyn_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
 }
 
@@ -2025,13 +2026,13 @@
     use ::UnOp::*;
     match *_i {
         Deref(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Not(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Neg(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
     }
 }
@@ -2040,14 +2041,14 @@
     use ::Unsafety::*;
     match *_i {
         Unsafe(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            tokens_helper(_visitor, &mut (_binding_0).0);
         }
         Normal => { }
     }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_glob_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut UseGlob) {
-    // Skipped field _i . star_token;
+    tokens_helper(_visitor, &mut (& mut _i . star_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_list_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut UseList) {
@@ -2058,7 +2059,7 @@
 pub fn visit_use_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut UsePath) {
     _visitor.visit_ident_mut(& mut _i . ident);
     if let Some(ref mut it) = _i . rename { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
             _visitor.visit_ident_mut(& mut ( it ) . 1);
          };
 }
@@ -2083,7 +2084,7 @@
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_variant_data_mut(& mut _i . data);
     if let Some(ref mut it) = _i . discriminant { _visitor.visit_expr_mut(it) };
-    // Skipped field _i . eq_token;
+    if let Some(ref mut it) = _i . eq_token { tokens_helper(_visitor, &mut (it).0) };
 }
 
 pub fn visit_variant_data_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VariantData) {
@@ -2102,22 +2103,22 @@
 }
 
 pub fn visit_vis_crate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisCrate) {
-    // Skipped field _i . pub_token;
+    tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
     // Skipped field _i . paren_token;
-    // Skipped field _i . crate_token;
+    tokens_helper(_visitor, &mut (& mut _i . crate_token).0);
 }
 
 pub fn visit_vis_inherited_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisInherited) {
 }
 
 pub fn visit_vis_public_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisPublic) {
-    // Skipped field _i . pub_token;
+    tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
 }
 
 pub fn visit_vis_restricted_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisRestricted) {
-    // Skipped field _i . pub_token;
+    tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
     // Skipped field _i . paren_token;
-    // Skipped field _i . in_token;
+    if let Some(ref mut it) = _i . in_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_path_mut(& mut * _i . path);
 }
 
@@ -2142,18 +2143,18 @@
 pub fn visit_where_bound_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereBoundPredicate) {
     if let Some(ref mut it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
     _visitor.visit_type_mut(& mut _i . bounded_ty);
-    // Skipped field _i . colon_token;
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
     for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
 }
 
 pub fn visit_where_clause_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereClause) {
-    // Skipped field _i . where_token;
+    tokens_helper(_visitor, &mut (& mut _i . where_token).0);
     for mut el in & mut _i . predicates { let it = el.item_mut(); _visitor.visit_where_predicate_mut(it) };
 }
 
 pub fn visit_where_eq_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereEqPredicate) {
     _visitor.visit_type_mut(& mut _i . lhs_ty);
-    // Skipped field _i . eq_token;
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_type_mut(& mut _i . rhs_ty);
 }
 
@@ -2174,7 +2175,7 @@
 
 pub fn visit_where_region_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereRegionPredicate) {
     _visitor.visit_lifetime_mut(& mut _i . lifetime);
-    // Skipped field _i . colon_token;
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
     for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
 }
 
diff --git a/src/gen_helper.rs b/src/gen_helper.rs
index bac8463..4970805 100644
--- a/src/gen_helper.rs
+++ b/src/gen_helper.rs
@@ -1,6 +1,8 @@
 #[cfg(feature = "fold")]
 pub mod fold {
     use delimited::Delimited;
+    use fold::Folder;
+    use proc_macro2::Span;
 
     pub trait FoldHelper {
         type Item;
@@ -23,4 +25,118 @@
             }).collect::<Vec<(T, Option<U>)>>().into()
         }
     }
+
+    pub fn tokens_helper<F: Folder + ?Sized, S: Spans>(folder: &mut F, spans: &S) -> S {
+        spans.fold(folder)
+    }
+
+    pub trait Spans {
+        fn fold<F: Folder + ?Sized>(&self, folder: &mut F) -> Self;
+    }
+
+    impl Spans for Span {
+        fn fold<F: Folder + ?Sized>(&self, folder: &mut F) -> Self {
+            folder.fold_span(*self)
+        }
+    }
+
+    impl Spans for [Span; 1] {
+        fn fold<F: Folder + ?Sized>(&self, folder: &mut F) -> Self {
+            [folder.fold_span(self[0])]
+        }
+    }
+
+    impl Spans for [Span; 2] {
+        fn fold<F: Folder + ?Sized>(&self, folder: &mut F) -> Self {
+            [folder.fold_span(self[0]), folder.fold_span(self[1])]
+        }
+    }
+
+    impl Spans for [Span; 3] {
+        fn fold<F: Folder + ?Sized>(&self, folder: &mut F) -> Self {
+            [folder.fold_span(self[0]), folder.fold_span(self[1]), folder.fold_span(self[2])]
+        }
+    }
+}
+
+#[cfg(feature = "visit")]
+pub mod visit {
+    use proc_macro2::Span;
+    use visit::Visitor;
+
+    pub fn tokens_helper<'ast, V: Visitor<'ast> + ?Sized, S: Spans>(visitor: &mut V, spans: &'ast S) {
+        spans.visit(visitor);
+    }
+
+    pub trait Spans {
+        fn visit<'ast, V: Visitor<'ast> + ?Sized>(&'ast self, visitor: &mut V);
+    }
+
+    impl Spans for Span {
+        fn visit<'ast, V: Visitor<'ast> + ?Sized>(&'ast self, visitor: &mut V) {
+            visitor.visit_span(self);
+        }
+    }
+
+    impl Spans for [Span; 1] {
+        fn visit<'ast, V: Visitor<'ast> + ?Sized>(&'ast self, visitor: &mut V) {
+            visitor.visit_span(&self[0]);
+        }
+    }
+
+    impl Spans for [Span; 2] {
+        fn visit<'ast, V: Visitor<'ast> + ?Sized>(&'ast self, visitor: &mut V) {
+            visitor.visit_span(&self[0]);
+            visitor.visit_span(&self[1]);
+        }
+    }
+
+    impl Spans for [Span; 3] {
+        fn visit<'ast, V: Visitor<'ast> + ?Sized>(&'ast self, visitor: &mut V) {
+            visitor.visit_span(&self[0]);
+            visitor.visit_span(&self[1]);
+            visitor.visit_span(&self[2]);
+        }
+    }
+}
+
+#[cfg(feature = "visit_mut")]
+pub mod visit_mut {
+    use proc_macro2::Span;
+    use visit_mut::VisitorMut;
+
+    pub fn tokens_helper<V: VisitorMut + ?Sized, S: Spans>(visitor: &mut V, spans: &mut S) {
+        spans.visit_mut(visitor);
+    }
+
+    pub trait Spans {
+        fn visit_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V);
+    }
+
+    impl Spans for Span {
+        fn visit_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V) {
+            visitor.visit_span_mut(self);
+        }
+    }
+
+    impl Spans for [Span; 1] {
+        fn visit_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V) {
+            visitor.visit_span_mut(&mut self[0]);
+        }
+    }
+
+    impl Spans for [Span; 2] {
+        fn visit_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V) {
+            visitor.visit_span_mut(&mut self[0]);
+            visitor.visit_span_mut(&mut self[1]);
+        }
+    }
+
+    impl Spans for [Span; 3] {
+        fn visit_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V) {
+            visitor.visit_span_mut(&mut self[0]);
+            visitor.visit_span_mut(&mut self[1]);
+            visitor.visit_span_mut(&mut self[2]);
+        }
+    }
 }
diff --git a/syn_codegen/src/main.rs b/syn_codegen/src/main.rs
index e0f7625..3c2912c 100644
--- a/syn_codegen/src/main.rs
+++ b/syn_codegen/src/main.rs
@@ -329,6 +329,7 @@
         Option(&'a Type),
         Tuple(&'a Delimited<Type, Token![,]>),
         Simple(&'a AstItem),
+        Token(&'a Macro),
         Pass,
     }
 
@@ -353,6 +354,9 @@
             Type::Tuple(TypeTuple { ref tys, .. }) => {
                 RelevantType::Tuple(tys)
             }
+            Type::Macro(ref mac) if mac.path.segments.last().unwrap().into_item().ident == "Token" => {
+                RelevantType::Token(mac)
+            }
             _ => RelevantType::Pass,
         }
     }
@@ -599,6 +603,24 @@
         }
     }
 
+    fn token_visit(mac: &Macro, kind: Kind, name: &Operand) -> String {
+        match kind {
+            Fold => format!(
+                "{mac}(tokens_helper(_visitor, &({name}).0))",
+                mac = mac.into_tokens(),
+                name = name.owned_tokens(),
+            ),
+            Visit => format!(
+                "tokens_helper(_visitor, &({name}).0)",
+                name = name.ref_tokens(),
+            ),
+            VisitMut => format!(
+                "tokens_helper(_visitor, &mut ({name}).0)",
+                name = name.ref_mut_tokens(),
+            ),
+        }
+    }
+
     fn noop_visit(kind: Kind, name: &Operand) -> String {
         match kind {
             Fold => name.owned_tokens().to_string(),
@@ -631,6 +653,9 @@
                     res
                 })
             }
+            RelevantType::Token(mac) => {
+                Some(token_visit(mac, kind, name))
+            }
             RelevantType::Pass => {
                 None
             }
@@ -997,6 +1022,7 @@
 
 use *;
 use proc_macro2::Span;
+use gen::helper::visit::*;
 
 {full_macro}
 
@@ -1037,6 +1063,7 @@
 
 use *;
 use proc_macro2::Span;
+use gen::helper::visit_mut::*;
 
 {full_macro}