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}
 
