diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index d9a1b92..05694a4 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -10,6 +10,7 @@
 #![cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))]
 
 use *;
+use token::{Brace, Bracket, Paren, Group};
 use proc_macro2::Span;
 use gen::helper::fold::*;
 
@@ -478,7 +479,7 @@
     Attribute {
         style: _visitor.fold_attr_style(_i . style),
         pound_token: Token ! [ # ](tokens_helper(_visitor, &(_i . pound_token).0)),
-        bracket_token: _i . bracket_token,
+        bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
         path: _visitor.fold_path(_i . path),
         tts: _i . tts,
         is_sugared_doc: _i . is_sugared_doc,
@@ -517,7 +518,7 @@
         unsafety: _visitor.fold_unsafety(_i . unsafety),
         abi: (_i . abi).map(|it| { _visitor.fold_abi(it) }),
         fn_token: Token ! [ fn ](tokens_helper(_visitor, &(_i . fn_token).0)),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_bare_fn_arg(it) }),
         variadic: (_i . variadic).map(|it| { Token ! [ ... ](tokens_helper(_visitor, &(it).0)) }),
         output: _visitor.fold_return_type(_i . output),
@@ -689,7 +690,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_block<V: Folder + ?Sized>(_visitor: &mut V, _i: Block) -> Block {
     Block {
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         stmts: FoldHelper::lift(_i . stmts, |it| { _visitor.fold_stmt(it) }),
     }
 }
@@ -713,7 +714,7 @@
 pub fn fold_body_enum<V: Folder + ?Sized>(_visitor: &mut V, _i: BodyEnum) -> BodyEnum {
     BodyEnum {
         enum_token: Token ! [ enum ](tokens_helper(_visitor, &(_i . enum_token).0)),
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         variants: FoldHelper::lift(_i . variants, |it| { _visitor.fold_variant(it) }),
     }
 }
@@ -811,7 +812,7 @@
 pub fn fold_expr_array<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprArray) -> ExprArray {
     ExprArray {
         exprs: FoldHelper::lift(_i . exprs, |it| { _visitor.fold_expr(it) }),
-        bracket_token: _i . bracket_token,
+        bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -864,7 +865,7 @@
     ExprCall {
         func: Box::new(_visitor.fold_expr(* _i . func)),
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
     }
 }
 
@@ -925,7 +926,7 @@
 pub fn fold_expr_group<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprGroup) -> ExprGroup {
     ExprGroup {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        group_token: _i . group_token,
+        group_token: Group(tokens_helper(_visitor, &(_i . group_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -964,7 +965,7 @@
     ExprIndex {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         index: Box::new(_visitor.fold_expr(* _i . index)),
-        bracket_token: _i . bracket_token,
+        bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
     }
 }
 
@@ -1181,7 +1182,7 @@
 pub fn fold_expr_match<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMatch) -> ExprMatch {
     ExprMatch {
         match_token: Token ! [ match ](tokens_helper(_visitor, &(_i . match_token).0)),
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         arms: FoldHelper::lift(_i . arms, |it| { _visitor.fold_arm(it) }),
     }
@@ -1193,7 +1194,7 @@
         method: _visitor.fold_ident(_i . method),
         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,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         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)) }),
@@ -1204,7 +1205,7 @@
 pub fn fold_expr_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprParen) -> ExprParen {
     ExprParen {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
     }
 }
 
@@ -1225,7 +1226,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_repeat<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRepeat) -> ExprRepeat {
     ExprRepeat {
-        bracket_token: _i . bracket_token,
+        bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
         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)),
@@ -1245,7 +1246,7 @@
         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).map(|it| { Token ! [ .. ](tokens_helper(_visitor, &(it).0)) }),
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1259,7 +1260,7 @@
 pub fn fold_expr_tuple<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprTuple) -> ExprTuple {
     ExprTuple {
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
     }
 }
 
@@ -1387,7 +1388,7 @@
 pub fn fold_fn_decl<V: Folder + ?Sized>(_visitor: &mut V, _i: FnDecl) -> FnDecl {
     FnDecl {
         fn_token: Token ! [ fn ](tokens_helper(_visitor, &(_i . fn_token).0)),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_fn_arg(it) }),
         output: _visitor.fold_return_type(_i . output),
         generics: _visitor.fold_generics(_i . generics),
@@ -1728,7 +1729,7 @@
         path: _visitor.fold_path(_i . path),
         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,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1739,7 +1740,7 @@
         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,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         variants: FoldHelper::lift(_i . variants, |it| { _visitor.fold_variant(it) }),
     }
 }
@@ -1776,7 +1777,7 @@
     ItemForeignMod {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         abi: _visitor.fold_abi(_i . abi),
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         items: FoldHelper::lift(_i . items, |it| { _visitor.fold_foreign_item(it) }),
     }
 }
@@ -1794,7 +1795,7 @@
             Token ! [ for ](tokens_helper(_visitor, &(( it ) . 2).0)),
         ) }),
         self_ty: Box::new(_visitor.fold_type(* _i . self_ty)),
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         items: FoldHelper::lift(_i . items, |it| { _visitor.fold_impl_item(it) }),
     }
 }
@@ -1826,7 +1827,7 @@
         mod_token: Token ! [ mod ](tokens_helper(_visitor, &(_i . mod_token).0)),
         ident: _visitor.fold_ident(_i . ident),
         content: (_i . content).map(|it| { (
-            ( it ) . 0,
+            Brace(tokens_helper(_visitor, &(( it ) . 0).0)),
             FoldHelper::lift(( it ) . 1, |it| { _visitor.fold_item(it) }),
         ) }),
         semi: (_i . semi).map(|it| { Token ! [ ; ](tokens_helper(_visitor, &(it).0)) }),
@@ -1871,7 +1872,7 @@
         generics: _visitor.fold_generics(_i . generics),
         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,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         items: FoldHelper::lift(_i . items, |it| { _visitor.fold_trait_item(it) }),
     }
 }
@@ -1996,7 +1997,7 @@
 pub fn fold_meta_item_list<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItemList) -> MetaItemList {
     MetaItemList {
         ident: _visitor.fold_ident(_i . ident),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         nested: FoldHelper::lift(_i . nested, |it| { _visitor.fold_nested_meta_item(it) }),
     }
 }
@@ -2056,7 +2057,7 @@
 
 pub fn fold_parenthesized_generic_arguments<V: Folder + ?Sized>(_visitor: &mut V, _i: ParenthesizedGenericArguments) -> ParenthesizedGenericArguments {
     ParenthesizedGenericArguments {
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_type(it) }),
         output: _visitor.fold_return_type(_i . output),
     }
@@ -2180,7 +2181,7 @@
         back: FoldHelper::lift(_i . back, |it| { _visitor.fold_pat(it) }),
         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,
+        bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2188,7 +2189,7 @@
     PatStruct {
         path: _visitor.fold_path(_i . path),
         fields: FoldHelper::lift(_i . fields, |it| { _visitor.fold_field_pat(it) }),
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         dot2_token: (_i . dot2_token).map(|it| { Token ! [ .. ](tokens_helper(_visitor, &(it).0)) }),
     }
 }
@@ -2197,7 +2198,7 @@
     PatTuple {
         pats: FoldHelper::lift(_i . pats, |it| { _visitor.fold_pat(it) }),
         dots_pos: _i . dots_pos,
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         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)) }),
     }
@@ -2488,7 +2489,7 @@
 
 pub fn fold_type_array<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeArray) -> TypeArray {
     TypeArray {
-        bracket_token: _i . bracket_token,
+        bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
         semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
         amt: _visitor.fold_expr(_i . amt),
@@ -2511,7 +2512,7 @@
 
 pub fn fold_type_group<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeGroup) -> TypeGroup {
     TypeGroup {
-        group_token: _i . group_token,
+        group_token: Group(tokens_helper(_visitor, &(_i . group_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
     }
 }
@@ -2565,7 +2566,7 @@
 
 pub fn fold_type_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeParen) -> TypeParen {
     TypeParen {
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         ty: Box::new(_visitor.fold_type(* _i . ty)),
     }
 }
@@ -2596,7 +2597,7 @@
 pub fn fold_type_slice<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeSlice) -> TypeSlice {
     TypeSlice {
         ty: Box::new(_visitor.fold_type(* _i . ty)),
-        bracket_token: _i . bracket_token,
+        bracket_token: Bracket(tokens_helper(_visitor, &(_i . bracket_token).0)),
     }
 }
 
@@ -2609,7 +2610,7 @@
 
 pub fn fold_type_tuple<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeTuple) -> TypeTuple {
     TypeTuple {
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         tys: FoldHelper::lift(_i . tys, |it| { _visitor.fold_type(it) }),
     }
 }
@@ -2655,7 +2656,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_use_list<V: Folder + ?Sized>(_visitor: &mut V, _i: UseList) -> UseList {
     UseList {
-        brace_token: _i . brace_token,
+        brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         items: FoldHelper::lift(_i . items, |it| { _visitor.fold_use_tree(it) }),
     }
 }
@@ -2707,13 +2708,13 @@
         Struct(_binding_0, _binding_1, ) => {
             Struct (
                 FoldHelper::lift(_binding_0, |it| { _visitor.fold_field(it) }),
-                _binding_1,
+                Brace(tokens_helper(_visitor, &(_binding_1).0)),
             )
         }
         Tuple(_binding_0, _binding_1, ) => {
             Tuple (
                 FoldHelper::lift(_binding_0, |it| { _visitor.fold_field(it) }),
-                _binding_1,
+                Paren(tokens_helper(_visitor, &(_binding_1).0)),
             )
         }
         Unit => { Unit }
@@ -2723,7 +2724,7 @@
 pub fn fold_vis_crate<V: Folder + ?Sized>(_visitor: &mut V, _i: VisCrate) -> VisCrate {
     VisCrate {
         pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         crate_token: Token ! [ crate ](tokens_helper(_visitor, &(_i . crate_token).0)),
     }
 }
@@ -2742,7 +2743,7 @@
 pub fn fold_vis_restricted<V: Folder + ?Sized>(_visitor: &mut V, _i: VisRestricted) -> VisRestricted {
     VisRestricted {
         pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
-        paren_token: _i . paren_token,
+        paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
         in_token: (_i . in_token).map(|it| { Token ! [ in ](tokens_helper(_visitor, &(it).0)) }),
         path: Box::new(_visitor.fold_path(* _i . path)),
     }
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index 5c1a7d6..12fd3b6 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -458,7 +458,7 @@
 pub fn visit_attribute<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Attribute) {
     _visitor.visit_attr_style(& _i . style);
     tokens_helper(_visitor, &(& _i . pound_token).0);
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &(& _i . bracket_token).0);
     _visitor.visit_path(& _i . path);
     // Skipped field _i . tts;
     // Skipped field _i . is_sugared_doc;
@@ -489,7 +489,7 @@
     _visitor.visit_unsafety(& _i . unsafety);
     if let Some(ref it) = _i . abi { _visitor.visit_abi(it) };
     tokens_helper(_visitor, &(& _i . fn_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in & _i . inputs { let it = el.item(); _visitor.visit_bare_fn_arg(it) };
     if let Some(ref it) = _i . variadic { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_return_type(& _i . output);
@@ -599,7 +599,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_block<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Block) {
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     for it in & _i . stmts { _visitor.visit_stmt(it) };
 }
 
@@ -617,7 +617,7 @@
 
 pub fn visit_body_enum<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BodyEnum) {
     tokens_helper(_visitor, &(& _i . enum_token).0);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     for el in & _i . variants { let it = el.item(); _visitor.visit_variant(it) };
 }
 
@@ -695,7 +695,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_array<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprArray) {
     for el in & _i . exprs { let it = el.item(); _visitor.visit_expr(it) };
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &(& _i . bracket_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_assign<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprAssign) {
@@ -734,7 +734,7 @@
 pub fn visit_expr_call<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCall) {
     _visitor.visit_expr(& * _i . func);
     for el in & _i . args { let it = el.item(); _visitor.visit_expr(it) };
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
 }
 
 pub fn visit_expr_cast<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprCast) {
@@ -781,7 +781,7 @@
 
 pub fn visit_expr_group<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprGroup) {
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . group_token;
+    tokens_helper(_visitor, &(& _i . group_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_if<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprIf) {
@@ -812,7 +812,7 @@
 pub fn visit_expr_index<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprIndex) {
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_expr(& * _i . index);
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &(& _i . bracket_token).0);
 }
 
 pub fn visit_expr_kind<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprKind) {
@@ -947,7 +947,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_match<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprMatch) {
     tokens_helper(_visitor, &(& _i . match_token).0);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     _visitor.visit_expr(& * _i . expr);
     for it in & _i . arms { _visitor.visit_arm(it) };
 }
@@ -957,7 +957,7 @@
     _visitor.visit_ident(& _i . method);
     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;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     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) };
@@ -966,7 +966,7 @@
 
 pub fn visit_expr_paren<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprParen) {
     _visitor.visit_expr(& * _i . expr);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
 }
 
 pub fn visit_expr_path<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprPath) {
@@ -981,7 +981,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_repeat<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprRepeat) {
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &(& _i . bracket_token).0);
     tokens_helper(_visitor, &(& _i . semi_token).0);
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_expr(& * _i . amt);
@@ -997,7 +997,7 @@
     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) };
     if let Some(ref it) = _i . dot2_token { tokens_helper(_visitor, &(it).0) };
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_try<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprTry) {
@@ -1007,7 +1007,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_tuple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprTuple) {
     for el in & _i . args { let it = el.item(); _visitor.visit_expr(it) };
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
 }
 
 pub fn visit_expr_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprType) {
@@ -1103,7 +1103,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_fn_decl<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FnDecl) {
     tokens_helper(_visitor, &(& _i . fn_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     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);
@@ -1354,7 +1354,7 @@
     _visitor.visit_path(& _i . path);
     tokens_helper(_visitor, &(& _i . for_token).0);
     tokens_helper(_visitor, &(& _i . dot2_token).0);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_enum<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemEnum) {
@@ -1363,7 +1363,7 @@
     tokens_helper(_visitor, &(& _i . enum_token).0);
     _visitor.visit_ident(& _i . ident);
     _visitor.visit_generics(& _i . generics);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     for el in & _i . variants { let it = el.item(); _visitor.visit_variant(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1394,7 +1394,7 @@
 pub fn visit_item_foreign_mod<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemForeignMod) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     _visitor.visit_abi(& _i . abi);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     for it in & _i . items { _visitor.visit_foreign_item(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1410,7 +1410,7 @@
             tokens_helper(_visitor, &(& ( it ) . 2).0);
          };
     _visitor.visit_type(& * _i . self_ty);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     for it in & _i . items { _visitor.visit_impl_item(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1436,7 +1436,7 @@
     tokens_helper(_visitor, &(& _i . mod_token).0);
     _visitor.visit_ident(& _i . ident);
     if let Some(ref it) = _i . content { 
-            // Skipped field ( it ) . 0;
+            tokens_helper(_visitor, &(& ( it ) . 0).0);
             for it in & ( it ) . 1 { _visitor.visit_item(it) };
          };
     if let Some(ref it) = _i . semi { tokens_helper(_visitor, &(it).0) };
@@ -1475,7 +1475,7 @@
     _visitor.visit_generics(& _i . generics);
     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;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     for it in & _i . items { _visitor.visit_trait_item(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1572,7 +1572,7 @@
 
 pub fn visit_meta_item_list<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaItemList) {
     _visitor.visit_ident(& _i . ident);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in & _i . nested { let it = el.item(); _visitor.visit_nested_meta_item(it) };
 }
 
@@ -1618,7 +1618,7 @@
 }
 
 pub fn visit_parenthesized_generic_arguments<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ParenthesizedGenericArguments) {
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in & _i . inputs { let it = el.item(); _visitor.visit_type(it) };
     _visitor.visit_return_type(& _i . output);
 }
@@ -1704,20 +1704,20 @@
     for el in & _i . back { let it = el.item(); _visitor.visit_pat(it) };
     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;
+    tokens_helper(_visitor, &(& _i . bracket_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_struct<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatStruct) {
     _visitor.visit_path(& _i . path);
     for el in & _i . fields { let it = el.item(); _visitor.visit_field_pat(it) };
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     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;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     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) };
 }
@@ -1929,7 +1929,7 @@
 }
 
 pub fn visit_type_array<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeArray) {
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &(& _i . bracket_token).0);
     _visitor.visit_type(& * _i . ty);
     tokens_helper(_visitor, &(& _i . semi_token).0);
     _visitor.visit_expr(& _i . amt);
@@ -1946,7 +1946,7 @@
 }
 
 pub fn visit_type_group<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeGroup) {
-    // Skipped field _i . group_token;
+    tokens_helper(_visitor, &(& _i . group_token).0);
     _visitor.visit_type(& * _i . ty);
 }
 
@@ -1986,7 +1986,7 @@
 }
 
 pub fn visit_type_paren<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeParen) {
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     _visitor.visit_type(& * _i . ty);
 }
 
@@ -2009,7 +2009,7 @@
 
 pub fn visit_type_slice<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeSlice) {
     _visitor.visit_type(& * _i . ty);
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &(& _i . bracket_token).0);
 }
 
 pub fn visit_type_trait_object<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeTraitObject) {
@@ -2018,7 +2018,7 @@
 }
 
 pub fn visit_type_tuple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeTuple) {
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in & _i . tys { let it = el.item(); _visitor.visit_type(it) };
 }
 
@@ -2052,7 +2052,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_list<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseList) {
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &(& _i . brace_token).0);
     for el in & _i . items { let it = el.item(); _visitor.visit_use_tree(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -2092,11 +2092,11 @@
     match *_i {
         Struct(ref _binding_0, ref _binding_1, ) => {
             for el in _binding_0 { let it = el.item(); _visitor.visit_field(it) };
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &(_binding_1).0);
         }
         Tuple(ref _binding_0, ref _binding_1, ) => {
             for el in _binding_0 { let it = el.item(); _visitor.visit_field(it) };
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &(_binding_1).0);
         }
         Unit => { }
     }
@@ -2104,7 +2104,7 @@
 
 pub fn visit_vis_crate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisCrate) {
     tokens_helper(_visitor, &(& _i . pub_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     tokens_helper(_visitor, &(& _i . crate_token).0);
 }
 
@@ -2117,7 +2117,7 @@
 
 pub fn visit_vis_restricted<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisRestricted) {
     tokens_helper(_visitor, &(& _i . pub_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &(& _i . paren_token).0);
     if let Some(ref it) = _i . in_token { tokens_helper(_visitor, &(it).0) };
     _visitor.visit_path(& * _i . path);
 }
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 81a0a11..1f06b98 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -458,7 +458,7 @@
 pub fn visit_attribute_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Attribute) {
     _visitor.visit_attr_style_mut(& mut _i . style);
     tokens_helper(_visitor, &mut (& mut _i . pound_token).0);
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     _visitor.visit_path_mut(& mut _i . path);
     // Skipped field _i . tts;
     // Skipped field _i . is_sugared_doc;
@@ -489,7 +489,7 @@
     _visitor.visit_unsafety_mut(& mut _i . unsafety);
     if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . fn_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in & mut _i . inputs { let it = el.item_mut(); _visitor.visit_bare_fn_arg_mut(it) };
     if let Some(ref mut it) = _i . variadic { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_return_type_mut(& mut _i . output);
@@ -599,7 +599,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_block_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Block) {
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for it in & mut _i . stmts { _visitor.visit_stmt_mut(it) };
 }
 
@@ -617,7 +617,7 @@
 
 pub fn visit_body_enum_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BodyEnum) {
     tokens_helper(_visitor, &mut (& mut _i . enum_token).0);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for mut el in & mut _i . variants { let it = el.item_mut(); _visitor.visit_variant_mut(it) };
 }
 
@@ -695,7 +695,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_array_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprArray) {
     for mut el in & mut _i . exprs { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_assign_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprAssign) {
@@ -734,7 +734,7 @@
 pub fn visit_expr_call_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCall) {
     _visitor.visit_expr_mut(& mut * _i . func);
     for mut el in & mut _i . args { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
 }
 
 pub fn visit_expr_cast_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprCast) {
@@ -781,7 +781,7 @@
 
 pub fn visit_expr_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprGroup) {
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . group_token;
+    tokens_helper(_visitor, &mut (& mut _i . group_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_if_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIf) {
@@ -812,7 +812,7 @@
 pub fn visit_expr_index_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIndex) {
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_expr_mut(& mut * _i . index);
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
 }
 
 pub fn visit_expr_kind_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprKind) {
@@ -947,7 +947,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_match_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMatch) {
     tokens_helper(_visitor, &mut (& mut _i . match_token).0);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
     for it in & mut _i . arms { _visitor.visit_arm_mut(it) };
 }
@@ -957,7 +957,7 @@
     _visitor.visit_ident_mut(& mut _i . method);
     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;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     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) };
@@ -966,7 +966,7 @@
 
 pub fn visit_expr_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprParen) {
     _visitor.visit_expr_mut(& mut * _i . expr);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
 }
 
 pub fn visit_expr_path_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprPath) {
@@ -981,7 +981,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_repeat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRepeat) {
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_expr_mut(& mut * _i . amt);
@@ -997,7 +997,7 @@
     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) };
     if let Some(ref mut it) = _i . dot2_token { tokens_helper(_visitor, &mut (it).0) };
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_try_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTry) {
@@ -1007,7 +1007,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprTuple) {
     for mut el in & mut _i . args { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
 }
 
 pub fn visit_expr_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprType) {
@@ -1103,7 +1103,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_fn_decl_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FnDecl) {
     tokens_helper(_visitor, &mut (& mut _i . fn_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     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);
@@ -1354,7 +1354,7 @@
     _visitor.visit_path_mut(& mut _i . path);
     tokens_helper(_visitor, &mut (& mut _i . for_token).0);
     tokens_helper(_visitor, &mut (& mut _i . dot2_token).0);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_enum_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemEnum) {
@@ -1363,7 +1363,7 @@
     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;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for mut el in & mut _i . variants { let it = el.item_mut(); _visitor.visit_variant_mut(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1394,7 +1394,7 @@
 pub fn visit_item_foreign_mod_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemForeignMod) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     _visitor.visit_abi_mut(& mut _i . abi);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for it in & mut _i . items { _visitor.visit_foreign_item_mut(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1410,7 +1410,7 @@
             tokens_helper(_visitor, &mut (& mut ( it ) . 2).0);
          };
     _visitor.visit_type_mut(& mut * _i . self_ty);
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for it in & mut _i . items { _visitor.visit_impl_item_mut(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1436,7 +1436,7 @@
     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;
+            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
             for it in & mut ( it ) . 1 { _visitor.visit_item_mut(it) };
          };
     if let Some(ref mut it) = _i . semi { tokens_helper(_visitor, &mut (it).0) };
@@ -1475,7 +1475,7 @@
     _visitor.visit_generics_mut(& mut _i . generics);
     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;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for it in & mut _i . items { _visitor.visit_trait_item_mut(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -1572,7 +1572,7 @@
 
 pub fn visit_meta_item_list_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItemList) {
     _visitor.visit_ident_mut(& mut _i . ident);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in & mut _i . nested { let it = el.item_mut(); _visitor.visit_nested_meta_item_mut(it) };
 }
 
@@ -1618,7 +1618,7 @@
 }
 
 pub fn visit_parenthesized_generic_arguments_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ParenthesizedGenericArguments) {
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in & mut _i . inputs { let it = el.item_mut(); _visitor.visit_type_mut(it) };
     _visitor.visit_return_type_mut(& mut _i . output);
 }
@@ -1704,20 +1704,20 @@
     for mut el in & mut _i . back { let it = el.item_mut(); _visitor.visit_pat_mut(it) };
     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;
+    tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_struct_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatStruct) {
     _visitor.visit_path_mut(& mut _i . path);
     for mut el in & mut _i . fields { let it = el.item_mut(); _visitor.visit_field_pat_mut(it) };
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     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;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     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) };
 }
@@ -1929,7 +1929,7 @@
 }
 
 pub fn visit_type_array_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeArray) {
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
     tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
     _visitor.visit_expr_mut(& mut _i . amt);
@@ -1946,7 +1946,7 @@
 }
 
 pub fn visit_type_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeGroup) {
-    // Skipped field _i . group_token;
+    tokens_helper(_visitor, &mut (& mut _i . group_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
 }
 
@@ -1986,7 +1986,7 @@
 }
 
 pub fn visit_type_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeParen) {
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
 }
 
@@ -2009,7 +2009,7 @@
 
 pub fn visit_type_slice_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeSlice) {
     _visitor.visit_type_mut(& mut * _i . ty);
-    // Skipped field _i . bracket_token;
+    tokens_helper(_visitor, &mut (& mut _i . bracket_token).0);
 }
 
 pub fn visit_type_trait_object_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeTraitObject) {
@@ -2018,7 +2018,7 @@
 }
 
 pub fn visit_type_tuple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeTuple) {
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in & mut _i . tys { let it = el.item_mut(); _visitor.visit_type_mut(it) };
 }
 
@@ -2052,7 +2052,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_list_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut UseList) {
-    // Skipped field _i . brace_token;
+    tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for mut el in & mut _i . items { let it = el.item_mut(); _visitor.visit_use_tree_mut(it) };
 }
 # [ cfg ( feature = "full" ) ]
@@ -2092,11 +2092,11 @@
     match *_i {
         Struct(ref mut _binding_0, ref mut _binding_1, ) => {
             for mut el in _binding_0 { let it = el.item_mut(); _visitor.visit_field_mut(it) };
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &mut (_binding_1).0);
         }
         Tuple(ref mut _binding_0, ref mut _binding_1, ) => {
             for mut el in _binding_0 { let it = el.item_mut(); _visitor.visit_field_mut(it) };
-            // Skipped field _binding_1;
+            tokens_helper(_visitor, &mut (_binding_1).0);
         }
         Unit => { }
     }
@@ -2104,7 +2104,7 @@
 
 pub fn visit_vis_crate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisCrate) {
     tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     tokens_helper(_visitor, &mut (& mut _i . crate_token).0);
 }
 
@@ -2117,7 +2117,7 @@
 
 pub fn visit_vis_restricted_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut VisRestricted) {
     tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
-    // Skipped field _i . paren_token;
+    tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     if let Some(ref mut it) = _i . in_token { tokens_helper(_visitor, &mut (it).0) };
     _visitor.visit_path_mut(& mut * _i . path);
 }
diff --git a/syn_codegen/src/main.rs b/syn_codegen/src/main.rs
index 3c2912c..3624655 100644
--- a/syn_codegen/src/main.rs
+++ b/syn_codegen/src/main.rs
@@ -329,7 +329,7 @@
         Option(&'a Type),
         Tuple(&'a Delimited<Type, Token![,]>),
         Simple(&'a AstItem),
-        Token(&'a Macro),
+        Token(Tokens),
         Pass,
     }
 
@@ -342,6 +342,9 @@
                     "Vec" => RelevantType::Vec(first_arg(&last.arguments)),
                     "Delimited" => RelevantType::Delimited(first_arg(&last.arguments)),
                     "Option" => RelevantType::Option(first_arg(&last.arguments)),
+                    "Brace" | "Bracket" | "Paren" | "Group" => {
+                        RelevantType::Token(last.ident.into_tokens())
+                    }
                     _ => {
                         if let Some(item) = lookup.get(&last.ident) {
                             RelevantType::Simple(item)
@@ -355,7 +358,7 @@
                 RelevantType::Tuple(tys)
             }
             Type::Macro(ref mac) if mac.path.segments.last().unwrap().into_item().ident == "Token" => {
-                RelevantType::Token(mac)
+                RelevantType::Token(mac.into_tokens())
             }
             _ => RelevantType::Pass,
         }
@@ -603,11 +606,11 @@
         }
     }
 
-    fn token_visit(mac: &Macro, kind: Kind, name: &Operand) -> String {
+    fn token_visit(ty: Tokens, kind: Kind, name: &Operand) -> String {
         match kind {
             Fold => format!(
-                "{mac}(tokens_helper(_visitor, &({name}).0))",
-                mac = mac.into_tokens(),
+                "{ty}(tokens_helper(_visitor, &({name}).0))",
+                ty = ty,
                 name = name.owned_tokens(),
             ),
             Visit => format!(
@@ -653,8 +656,8 @@
                     res
                 })
             }
-            RelevantType::Token(mac) => {
-                Some(token_visit(mac, kind, name))
+            RelevantType::Token(ty) => {
+                Some(token_visit(ty, kind, name))
             }
             RelevantType::Pass => {
                 None
@@ -977,6 +980,7 @@
 #![cfg_attr(feature = \"cargo-clippy\", allow(needless_pass_by_value))]
 
 use *;
+use token::{{Brace, Bracket, Paren, Group}};
 use proc_macro2::Span;
 use gen::helper::fold::*;
 
