Remove redundancy about tokens in json
diff --git a/codegen/src/gen.rs b/codegen/src/gen.rs
index 1186ff9..3937b4e 100644
--- a/codegen/src/gen.rs
+++ b/codegen/src/gen.rs
@@ -116,12 +116,12 @@
     fn box_visit(
         elem: &types::Type,
         features: &types::Features,
-        types: &[types::Node],
+        defs: &types::Definitions,
         kind: Kind,
         name: &Operand,
     ) -> Option<TokenStream> {
         let name = name.owned_tokens();
-        let res = visit(elem, features, types, kind, &Owned(quote!(*#name)))?;
+        let res = visit(elem, features, defs, kind, &Owned(quote!(*#name)))?;
         Some(match kind {
             Fold => quote! {
                 Box::new(#res)
@@ -133,7 +133,7 @@
     fn vec_visit(
         elem: &types::Type,
         features: &types::Features,
-        types: &[types::Node],
+        defs: &types::Definitions,
         kind: Kind,
         name: &Operand,
     ) -> Option<TokenStream> {
@@ -141,7 +141,7 @@
             Visit | VisitMut => Borrowed(quote!(it)),
             Fold => Owned(quote!(it)),
         };
-        let val = visit(elem, features, types, kind, &operand)?;
+        let val = visit(elem, features, defs, kind, &operand)?;
         Some(match kind {
             Visit => {
                 let name = name.ref_tokens();
@@ -171,7 +171,7 @@
     fn punctuated_visit(
         elem: &types::Type,
         features: &types::Features,
-        types: &[types::Node],
+        defs: &types::Definitions,
         kind: Kind,
         name: &Operand,
     ) -> Option<TokenStream> {
@@ -179,7 +179,7 @@
             Visit | VisitMut => Borrowed(quote!(it)),
             Fold => Owned(quote!(it)),
         };
-        let val = visit(elem, features, types, kind, &operand)?;
+        let val = visit(elem, features, defs, kind, &operand)?;
         Some(match kind {
             Visit => {
                 let name = name.ref_tokens();
@@ -211,7 +211,7 @@
     fn option_visit(
         elem: &types::Type,
         features: &types::Features,
-        types: &[types::Node],
+        defs: &types::Definitions,
         kind: Kind,
         name: &Operand,
     ) -> Option<TokenStream> {
@@ -219,7 +219,7 @@
             Visit | VisitMut => Borrowed(quote!(it)),
             Fold => Owned(quote!(it)),
         };
-        let val = visit(elem, features, types, kind, &it)?;
+        let val = visit(elem, features, defs, kind, &it)?;
         let name = name.owned_tokens();
         Some(match kind {
             Visit => quote! {
@@ -241,7 +241,7 @@
     fn tuple_visit(
         elems: &[types::Type],
         features: &types::Features,
-        types: &[types::Node],
+        defs: &types::Definitions,
         kind: Kind,
         name: &Operand,
     ) -> Option<TokenStream> {
@@ -255,7 +255,7 @@
             let i = Index::from(i);
             let it = Owned(quote!((#name).#i));
             let val =
-                visit(elem, features, types, kind, &it).unwrap_or_else(|| noop_visit(kind, &it));
+                visit(elem, features, defs, kind, &it).unwrap_or_else(|| noop_visit(kind, &it));
             code.append_all(val);
             match kind {
                 Fold => code.append_all(quote!(,)),
@@ -270,8 +270,8 @@
         })
     }
 
-    fn token_punct_visit(token: &types::Token, kind: Kind, name: &Operand) -> TokenStream {
-        let ty: TokenStream = syn::parse_str(&format!("Token![{}]", token.repr())).unwrap();
+    fn token_punct_visit(repr: &str, kind: Kind, name: &Operand) -> TokenStream {
+        let ty: TokenStream = syn::parse_str(&format!("Token![{}]", repr)).unwrap();
         let name = name.tokens();
         match kind {
             Fold => quote! {
@@ -286,8 +286,8 @@
         }
     }
 
-    fn token_keyword_visit(token: &types::Token, kind: Kind, name: &Operand) -> TokenStream {
-        let ty: TokenStream = syn::parse_str(&format!("Token![{}]", token.repr())).unwrap();
+    fn token_keyword_visit(repr: &str, kind: Kind, name: &Operand) -> TokenStream {
+        let ty: TokenStream = syn::parse_str(&format!("Token![{}]", repr)).unwrap();
         let name = name.tokens();
         match kind {
             Fold => quote! {
@@ -333,23 +333,25 @@
     fn visit(
         ty: &types::Type,
         features: &types::Features,
-        types: &[types::Node],
+        defs: &types::Definitions,
         kind: Kind,
         name: &Operand,
     ) -> Option<TokenStream> {
         match ty {
-            types::Type::Box(t) => box_visit(&*t, features, types, kind, name),
-            types::Type::Vec(t) => vec_visit(&*t, features, types, kind, name),
+            types::Type::Box(t) => box_visit(&*t, features, defs, kind, name),
+            types::Type::Vec(t) => vec_visit(&*t, features, defs, kind, name),
             types::Type::Punctuated(p) => {
-                punctuated_visit(p.element(), features, types, kind, name)
+                punctuated_visit(p.element(), features, defs, kind, name)
             }
-            types::Type::Option(t) => option_visit(&*t, features, types, kind, name),
-            types::Type::Tuple(t) => tuple_visit(t, features, types, kind, name),
+            types::Type::Option(t) => option_visit(&*t, features, defs, kind, name),
+            types::Type::Tuple(t) => tuple_visit(t, features, defs, kind, name),
             types::Type::Token(t) => {
-                if t.is_keyword() {
-                    Some(token_keyword_visit(t, kind, name))
+                let repr = &defs.tokens[t];
+                let is_keyword = repr.chars().next().unwrap().is_alphabetic();
+                if is_keyword {
+                    Some(token_keyword_visit(repr, kind, name))
                 } else {
-                    Some(token_punct_visit(t, kind, name))
+                    Some(token_punct_visit(repr, kind, name))
                 }
             }
             types::Type::Group(t) => Some(token_group_visit(&t[..], kind, name)),
@@ -360,7 +362,7 @@
 
                 let mut res = simple_visit(t, kind, name);
 
-                let target = types.iter().find(|ty| ty.ident() == t).unwrap();
+                let target = defs.types.iter().find(|ty| ty.ident() == t).unwrap();
 
                 Some(
                     if requires_full(target.features()) && !requires_full(features) {
@@ -391,7 +393,7 @@
         }
     }
 
-    pub fn generate(state: &mut State, s: &types::Node, types: &[types::Node]) {
+    pub fn generate(state: &mut State, s: &types::Node, defs: &types::Definitions) {
         let features = visit_features(s.features());
         let under_name = under_name(s.ident());
         let ty = Ident::new(s.ident(), Span::call_site());
@@ -451,15 +453,15 @@
                             let owned_binding = Owned(quote!(#binding));
 
                             visit_fields.append_all(
-                                visit(ty, s.features(), types, Visit, &borrowed_binding)
+                                visit(ty, s.features(), defs, Visit, &borrowed_binding)
                                     .unwrap_or_else(|| noop_visit(Visit, &borrowed_binding)),
                             );
                             visit_mut_fields.append_all(
-                                visit(ty, s.features(), types, VisitMut, &borrowed_binding)
+                                visit(ty, s.features(), defs, VisitMut, &borrowed_binding)
                                     .unwrap_or_else(|| noop_visit(VisitMut, &borrowed_binding)),
                             );
                             fold_fields.append_all(
-                                visit(ty, s.features(), types, Fold, &owned_binding)
+                                visit(ty, s.features(), defs, Fold, &owned_binding)
                                     .unwrap_or_else(|| noop_visit(Fold, &owned_binding)),
                             );
 
@@ -514,18 +516,18 @@
                 for field in v.fields() {
                     let id = Ident::new(field.ident(), Span::call_site());
                     let ref_toks = Owned(quote!(_i.#id));
-                    let visit_field = visit(field.ty(), v.features(), types, Visit, &ref_toks)
+                    let visit_field = visit(field.ty(), v.features(), defs, Visit, &ref_toks)
                         .unwrap_or_else(|| noop_visit(Visit, &ref_toks));
                     visit_impl.append_all(quote! {
                         #visit_field;
                     });
                     let visit_mut_field =
-                        visit(field.ty(), v.features(), types, VisitMut, &ref_toks)
+                        visit(field.ty(), v.features(), defs, VisitMut, &ref_toks)
                             .unwrap_or_else(|| noop_visit(VisitMut, &ref_toks));
                     visit_mut_impl.append_all(quote! {
                         #visit_mut_field;
                     });
-                    let fold = visit(field.ty(), v.features(), types, Fold, &ref_toks)
+                    let fold = visit(field.ty(), v.features(), defs, Fold, &ref_toks)
                         .unwrap_or_else(|| noop_visit(Fold, &ref_toks));
 
                     fold_fields.append_all(quote! {
@@ -634,7 +636,7 @@
 pub fn generate(defs: &types::Definitions) {
     let mut state = codegen::State::default();
     for s in &defs.types {
-        codegen::generate(&mut state, s, &defs.types);
+        codegen::generate(&mut state, s, defs);
     }
 
     let full_macro = quote! {
diff --git a/codegen/src/parse.rs b/codegen/src/parse.rs
index cd43d60..d239c5b 100644
--- a/codegen/src/parse.rs
+++ b/codegen/src/parse.rs
@@ -203,7 +203,7 @@
             let content = mac.tts.to_string();
             let ty = tokens.get(&content).unwrap().to_string();
 
-            types::Type::Token(types::Token::new(content, ty))
+            types::Type::Token(ty)
         }
         _ => panic!("{}", quote!(#item).to_string()),
     }
diff --git a/codegen/src/types.rs b/codegen/src/types.rs
index 1eea214..6891e79 100644
--- a/codegen/src/types.rs
+++ b/codegen/src/types.rs
@@ -54,7 +54,7 @@
     Ext(String),
 
     /// Token type
-    Token(Token),
+    Token(String),
 
     /// Token group
     Group(String),
@@ -68,17 +68,10 @@
     Tuple(Vec<Type>),
 }
 
-#[derive(Debug, Clone, Serialize)]
-pub struct Token {
-    repr: String,
-    #[serde(rename = "type")]
-    ty: String,
-}
-
 #[derive(Debug, Serialize)]
 pub struct Punctuated {
     element: Box<Type>,
-    punct: Token,
+    punct: String,
 }
 
 #[derive(Debug, Default, Clone, Serialize)]
@@ -172,23 +165,8 @@
     }
 }
 
-impl Token {
-    pub fn new(repr: String, ty: String) -> Token {
-        Token { repr, ty }
-    }
-
-    pub fn is_keyword(&self) -> bool {
-        let c = self.repr.chars().next().unwrap();
-        c.is_alphabetic()
-    }
-
-    pub fn repr(&self) -> &str {
-        &self.repr
-    }
-}
-
 impl Punctuated {
-    pub fn new(element: Type, punct: Token) -> Self {
+    pub fn new(element: Type, punct: String) -> Self {
         Punctuated { element: Box::new(element), punct }
     }
 
diff --git a/syn.json b/syn.json
index 80dcb73..fcde87f 100644
--- a/syn.json
+++ b/syn.json
@@ -14,10 +14,7 @@
         {
           "ident": "extern_token",
           "type": {
-            "token": {
-              "repr": "extern",
-              "type": "Extern"
-            }
+            "token": "Extern"
           }
         },
         {
@@ -45,20 +42,14 @@
           "ident": "colon2_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "::",
-                "type": "Colon2"
-              }
+              "token": "Colon2"
             }
           }
         },
         {
           "ident": "lt_token",
           "type": {
-            "token": {
-              "repr": "<",
-              "type": "Lt"
-            }
+            "token": "Lt"
           }
         },
         {
@@ -68,20 +59,14 @@
               "element": {
                 "item": "GenericArgument"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
         {
           "ident": "gt_token",
           "type": {
-            "token": {
-              "repr": ">",
-              "type": "Gt"
-            }
+            "token": "Gt"
           }
         }
       ],
@@ -105,10 +90,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -133,20 +115,14 @@
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
         {
           "ident": "self_token",
           "type": {
-            "token": {
-              "repr": "self",
-              "type": "SelfValue"
-            }
+            "token": "SelfValue"
           }
         }
       ],
@@ -164,10 +140,7 @@
         {
           "ident": "and_token",
           "type": {
-            "token": {
-              "repr": "&",
-              "type": "And"
-            }
+            "token": "And"
           }
         },
         {
@@ -182,20 +155,14 @@
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
         {
           "ident": "self_token",
           "type": {
-            "token": {
-              "repr": "self",
-              "type": "SelfValue"
-            }
+            "token": "SelfValue"
           }
         }
       ],
@@ -222,10 +189,7 @@
           "ident": "leading_vert",
           "type": {
             "option": {
-              "token": {
-                "repr": "|",
-                "type": "Or"
-              }
+              "token": "Or"
             }
           }
         },
@@ -236,10 +200,7 @@
               "element": {
                 "item": "Pat"
               },
-              "punct": {
-                "repr": "|",
-                "type": "Or"
-              }
+              "punct": "Or"
             }
           }
         },
@@ -249,10 +210,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "if",
-                    "type": "If"
-                  }
+                  "token": "If"
                 },
                 {
                   "box": {
@@ -266,10 +224,7 @@
         {
           "ident": "fat_arrow_token",
           "type": {
-            "token": {
-              "repr": "=>",
-              "type": "FatArrow"
-            }
+            "token": "FatArrow"
           }
         },
         {
@@ -284,10 +239,7 @@
           "ident": "comma",
           "type": {
             "option": {
-              "token": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "token": "Comma"
             }
           }
         }
@@ -312,10 +264,7 @@
           "ident": "Inner",
           "fields": [
             {
-              "token": {
-                "repr": "!",
-                "type": "Bang"
-              }
+              "token": "Bang"
             }
           ]
         }
@@ -334,10 +283,7 @@
         {
           "ident": "pound_token",
           "type": {
-            "token": {
-              "repr": "#",
-              "type": "Pound"
-            }
+            "token": "Pound"
           }
         },
         {
@@ -386,10 +332,7 @@
                   "item": "BareFnArgName"
                 },
                 {
-                  "token": {
-                    "repr": ":",
-                    "type": "Colon"
-                  }
+                  "token": "Colon"
                 }
               ]
             }
@@ -426,10 +369,7 @@
           "ident": "Wild",
           "fields": [
             {
-              "token": {
-                "repr": "_",
-                "type": "Underscore"
-              }
+              "token": "Underscore"
             }
           ]
         }
@@ -449,10 +389,7 @@
           "ident": "Add",
           "fields": [
             {
-              "token": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "token": "Add"
             }
           ]
         },
@@ -460,10 +397,7 @@
           "ident": "Sub",
           "fields": [
             {
-              "token": {
-                "repr": "-",
-                "type": "Sub"
-              }
+              "token": "Sub"
             }
           ]
         },
@@ -471,10 +405,7 @@
           "ident": "Mul",
           "fields": [
             {
-              "token": {
-                "repr": "*",
-                "type": "Star"
-              }
+              "token": "Star"
             }
           ]
         },
@@ -482,10 +413,7 @@
           "ident": "Div",
           "fields": [
             {
-              "token": {
-                "repr": "/",
-                "type": "Div"
-              }
+              "token": "Div"
             }
           ]
         },
@@ -493,10 +421,7 @@
           "ident": "Rem",
           "fields": [
             {
-              "token": {
-                "repr": "%",
-                "type": "Rem"
-              }
+              "token": "Rem"
             }
           ]
         },
@@ -504,10 +429,7 @@
           "ident": "And",
           "fields": [
             {
-              "token": {
-                "repr": "&&",
-                "type": "AndAnd"
-              }
+              "token": "AndAnd"
             }
           ]
         },
@@ -515,10 +437,7 @@
           "ident": "Or",
           "fields": [
             {
-              "token": {
-                "repr": "||",
-                "type": "OrOr"
-              }
+              "token": "OrOr"
             }
           ]
         },
@@ -526,10 +445,7 @@
           "ident": "BitXor",
           "fields": [
             {
-              "token": {
-                "repr": "^",
-                "type": "Caret"
-              }
+              "token": "Caret"
             }
           ]
         },
@@ -537,10 +453,7 @@
           "ident": "BitAnd",
           "fields": [
             {
-              "token": {
-                "repr": "&",
-                "type": "And"
-              }
+              "token": "And"
             }
           ]
         },
@@ -548,10 +461,7 @@
           "ident": "BitOr",
           "fields": [
             {
-              "token": {
-                "repr": "|",
-                "type": "Or"
-              }
+              "token": "Or"
             }
           ]
         },
@@ -559,10 +469,7 @@
           "ident": "Shl",
           "fields": [
             {
-              "token": {
-                "repr": "<<",
-                "type": "Shl"
-              }
+              "token": "Shl"
             }
           ]
         },
@@ -570,10 +477,7 @@
           "ident": "Shr",
           "fields": [
             {
-              "token": {
-                "repr": ">>",
-                "type": "Shr"
-              }
+              "token": "Shr"
             }
           ]
         },
@@ -581,10 +485,7 @@
           "ident": "Eq",
           "fields": [
             {
-              "token": {
-                "repr": "==",
-                "type": "EqEq"
-              }
+              "token": "EqEq"
             }
           ]
         },
@@ -592,10 +493,7 @@
           "ident": "Lt",
           "fields": [
             {
-              "token": {
-                "repr": "<",
-                "type": "Lt"
-              }
+              "token": "Lt"
             }
           ]
         },
@@ -603,10 +501,7 @@
           "ident": "Le",
           "fields": [
             {
-              "token": {
-                "repr": "<=",
-                "type": "Le"
-              }
+              "token": "Le"
             }
           ]
         },
@@ -614,10 +509,7 @@
           "ident": "Ne",
           "fields": [
             {
-              "token": {
-                "repr": "!=",
-                "type": "Ne"
-              }
+              "token": "Ne"
             }
           ]
         },
@@ -625,10 +517,7 @@
           "ident": "Ge",
           "fields": [
             {
-              "token": {
-                "repr": ">=",
-                "type": "Ge"
-              }
+              "token": "Ge"
             }
           ]
         },
@@ -636,10 +525,7 @@
           "ident": "Gt",
           "fields": [
             {
-              "token": {
-                "repr": ">",
-                "type": "Gt"
-              }
+              "token": "Gt"
             }
           ]
         },
@@ -647,10 +533,7 @@
           "ident": "AddEq",
           "fields": [
             {
-              "token": {
-                "repr": "+=",
-                "type": "AddEq"
-              }
+              "token": "AddEq"
             }
           ]
         },
@@ -658,10 +541,7 @@
           "ident": "SubEq",
           "fields": [
             {
-              "token": {
-                "repr": "-=",
-                "type": "SubEq"
-              }
+              "token": "SubEq"
             }
           ]
         },
@@ -669,10 +549,7 @@
           "ident": "MulEq",
           "fields": [
             {
-              "token": {
-                "repr": "*=",
-                "type": "MulEq"
-              }
+              "token": "MulEq"
             }
           ]
         },
@@ -680,10 +557,7 @@
           "ident": "DivEq",
           "fields": [
             {
-              "token": {
-                "repr": "/=",
-                "type": "DivEq"
-              }
+              "token": "DivEq"
             }
           ]
         },
@@ -691,10 +565,7 @@
           "ident": "RemEq",
           "fields": [
             {
-              "token": {
-                "repr": "%=",
-                "type": "RemEq"
-              }
+              "token": "RemEq"
             }
           ]
         },
@@ -702,10 +573,7 @@
           "ident": "BitXorEq",
           "fields": [
             {
-              "token": {
-                "repr": "^=",
-                "type": "CaretEq"
-              }
+              "token": "CaretEq"
             }
           ]
         },
@@ -713,10 +581,7 @@
           "ident": "BitAndEq",
           "fields": [
             {
-              "token": {
-                "repr": "&=",
-                "type": "AndEq"
-              }
+              "token": "AndEq"
             }
           ]
         },
@@ -724,10 +589,7 @@
           "ident": "BitOrEq",
           "fields": [
             {
-              "token": {
-                "repr": "|=",
-                "type": "OrEq"
-              }
+              "token": "OrEq"
             }
           ]
         },
@@ -735,10 +597,7 @@
           "ident": "ShlEq",
           "fields": [
             {
-              "token": {
-                "repr": "<<=",
-                "type": "ShlEq"
-              }
+              "token": "ShlEq"
             }
           ]
         },
@@ -746,10 +605,7 @@
           "ident": "ShrEq",
           "fields": [
             {
-              "token": {
-                "repr": ">>=",
-                "type": "ShrEq"
-              }
+              "token": "ShrEq"
             }
           ]
         }
@@ -774,10 +630,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -828,19 +681,13 @@
         {
           "ident": "for_token",
           "type": {
-            "token": {
-              "repr": "for",
-              "type": "For"
-            }
+            "token": "For"
           }
         },
         {
           "ident": "lt_token",
           "type": {
-            "token": {
-              "repr": "<",
-              "type": "Lt"
-            }
+            "token": "Lt"
           }
         },
         {
@@ -850,20 +697,14 @@
               "element": {
                 "item": "LifetimeDef"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
         {
           "ident": "gt_token",
           "type": {
-            "token": {
-              "repr": ">",
-              "type": "Gt"
-            }
+            "token": "Gt"
           }
         }
       ],
@@ -890,10 +731,7 @@
         {
           "ident": "const_token",
           "type": {
-            "token": {
-              "repr": "const",
-              "type": "Const"
-            }
+            "token": "Const"
           }
         },
         {
@@ -905,10 +743,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -921,10 +756,7 @@
           "ident": "eq_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "=",
-                "type": "Eq"
-              }
+              "token": "Eq"
             }
           }
         },
@@ -958,10 +790,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -971,10 +800,7 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         }
@@ -1028,10 +854,7 @@
         {
           "ident": "enum_token",
           "type": {
-            "token": {
-              "repr": "enum",
-              "type": "Enum"
-            }
+            "token": "Enum"
           }
         },
         {
@@ -1047,10 +870,7 @@
               "element": {
                 "item": "Variant"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -1069,10 +889,7 @@
         {
           "ident": "struct_token",
           "type": {
-            "token": {
-              "repr": "struct",
-              "type": "Struct"
-            }
+            "token": "Struct"
           }
         },
         {
@@ -1085,10 +902,7 @@
           "ident": "semi_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -1107,10 +921,7 @@
         {
           "ident": "union_token",
           "type": {
-            "token": {
-              "repr": "union",
-              "type": "Union"
-            }
+            "token": "Union"
           }
         },
         {
@@ -1528,10 +1339,7 @@
               "element": {
                 "item": "Expr"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -1566,10 +1374,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -1645,20 +1450,14 @@
         {
           "ident": "async_token",
           "type": {
-            "token": {
-              "repr": "async",
-              "type": "Async"
-            }
+            "token": "Async"
           }
         },
         {
           "ident": "capture",
           "type": {
             "option": {
-              "token": {
-                "repr": "move",
-                "type": "Move"
-              }
+              "token": "Move"
             }
           }
         },
@@ -1768,10 +1567,7 @@
         {
           "ident": "box_token",
           "type": {
-            "token": {
-              "repr": "box",
-              "type": "Box"
-            }
+            "token": "Box"
           }
         },
         {
@@ -1805,10 +1601,7 @@
         {
           "ident": "break_token",
           "type": {
-            "token": {
-              "repr": "break",
-              "type": "Break"
-            }
+            "token": "Break"
           }
         },
         {
@@ -1871,10 +1664,7 @@
               "element": {
                 "item": "Expr"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -1910,10 +1700,7 @@
         {
           "ident": "as_token",
           "type": {
-            "token": {
-              "repr": "as",
-              "type": "As"
-            }
+            "token": "As"
           }
         },
         {
@@ -1948,10 +1735,7 @@
           "ident": "asyncness",
           "type": {
             "option": {
-              "token": {
-                "repr": "async",
-                "type": "Async"
-              }
+              "token": "Async"
             }
           }
         },
@@ -1959,10 +1743,7 @@
           "ident": "movability",
           "type": {
             "option": {
-              "token": {
-                "repr": "static",
-                "type": "Static"
-              }
+              "token": "Static"
             }
           }
         },
@@ -1970,20 +1751,14 @@
           "ident": "capture",
           "type": {
             "option": {
-              "token": {
-                "repr": "move",
-                "type": "Move"
-              }
+              "token": "Move"
             }
           }
         },
         {
           "ident": "or1_token",
           "type": {
-            "token": {
-              "repr": "|",
-              "type": "Or"
-            }
+            "token": "Or"
           }
         },
         {
@@ -1993,20 +1768,14 @@
               "element": {
                 "item": "FnArg"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
         {
           "ident": "or2_token",
           "type": {
-            "token": {
-              "repr": "|",
-              "type": "Or"
-            }
+            "token": "Or"
           }
         },
         {
@@ -2046,10 +1815,7 @@
         {
           "ident": "continue_token",
           "type": {
-            "token": {
-              "repr": "continue",
-              "type": "Continue"
-            }
+            "token": "Continue"
           }
         },
         {
@@ -2092,10 +1858,7 @@
         {
           "ident": "dot_token",
           "type": {
-            "token": {
-              "repr": ".",
-              "type": "Dot"
-            }
+            "token": "Dot"
           }
         },
         {
@@ -2135,10 +1898,7 @@
         {
           "ident": "for_token",
           "type": {
-            "token": {
-              "repr": "for",
-              "type": "For"
-            }
+            "token": "For"
           }
         },
         {
@@ -2152,10 +1912,7 @@
         {
           "ident": "in_token",
           "type": {
-            "token": {
-              "repr": "in",
-              "type": "In"
-            }
+            "token": "In"
           }
         },
         {
@@ -2229,10 +1986,7 @@
         {
           "ident": "if_token",
           "type": {
-            "token": {
-              "repr": "if",
-              "type": "If"
-            }
+            "token": "If"
           }
         },
         {
@@ -2255,10 +2009,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "else",
-                    "type": "Else"
-                  }
+                  "token": "Else"
                 },
                 {
                   "box": {
@@ -2300,10 +2051,7 @@
         {
           "ident": "arrow_token",
           "type": {
-            "token": {
-              "repr": "<-",
-              "type": "LArrow"
-            }
+            "token": "LArrow"
           }
         },
         {
@@ -2380,10 +2128,7 @@
         {
           "ident": "let_token",
           "type": {
-            "token": {
-              "repr": "let",
-              "type": "Let"
-            }
+            "token": "Let"
           }
         },
         {
@@ -2393,20 +2138,14 @@
               "element": {
                 "item": "Pat"
               },
-              "punct": {
-                "repr": "|",
-                "type": "Or"
-              }
+              "punct": "Or"
             }
           }
         },
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -2475,10 +2214,7 @@
         {
           "ident": "loop_token",
           "type": {
-            "token": {
-              "repr": "loop",
-              "type": "Loop"
-            }
+            "token": "Loop"
           }
         },
         {
@@ -2536,10 +2272,7 @@
         {
           "ident": "match_token",
           "type": {
-            "token": {
-              "repr": "match",
-              "type": "Match"
-            }
+            "token": "Match"
           }
         },
         {
@@ -2595,10 +2328,7 @@
         {
           "ident": "dot_token",
           "type": {
-            "token": {
-              "repr": ".",
-              "type": "Dot"
-            }
+            "token": "Dot"
           }
         },
         {
@@ -2628,10 +2358,7 @@
               "element": {
                 "item": "Expr"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -2774,20 +2501,14 @@
         {
           "ident": "and_token",
           "type": {
-            "token": {
-              "repr": "&",
-              "type": "And"
-            }
+            "token": "And"
           }
         },
         {
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
@@ -2836,10 +2557,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         },
         {
@@ -2873,10 +2591,7 @@
         {
           "ident": "return_token",
           "type": {
-            "token": {
-              "repr": "return",
-              "type": "Return"
-            }
+            "token": "Return"
           }
         },
         {
@@ -2928,10 +2643,7 @@
               "element": {
                 "item": "FieldValue"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -2939,10 +2651,7 @@
           "ident": "dot2_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "..",
-                "type": "Dot2"
-              }
+              "token": "Dot2"
             }
           }
         },
@@ -2987,10 +2696,7 @@
         {
           "ident": "question_token",
           "type": {
-            "token": {
-              "repr": "?",
-              "type": "Question"
-            }
+            "token": "Question"
           }
         }
       ],
@@ -3016,10 +2722,7 @@
         {
           "ident": "try_token",
           "type": {
-            "token": {
-              "repr": "try",
-              "type": "Try"
-            }
+            "token": "Try"
           }
         },
         {
@@ -3061,10 +2764,7 @@
               "element": {
                 "item": "Expr"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -3099,10 +2799,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -3171,10 +2868,7 @@
         {
           "ident": "unsafe_token",
           "type": {
-            "token": {
-              "repr": "unsafe",
-              "type": "Unsafe"
-            }
+            "token": "Unsafe"
           }
         },
         {
@@ -3233,10 +2927,7 @@
         {
           "ident": "while_token",
           "type": {
-            "token": {
-              "repr": "while",
-              "type": "While"
-            }
+            "token": "While"
           }
         },
         {
@@ -3276,10 +2967,7 @@
         {
           "ident": "yield_token",
           "type": {
-            "token": {
-              "repr": "yield",
-              "type": "Yield"
-            }
+            "token": "Yield"
           }
         },
         {
@@ -3331,10 +3019,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -3374,10 +3059,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -3419,10 +3101,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -3490,10 +3169,7 @@
               "element": {
                 "item": "Field"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -3523,10 +3199,7 @@
               "element": {
                 "item": "Field"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -3632,10 +3305,7 @@
         {
           "ident": "fn_token",
           "type": {
-            "token": {
-              "repr": "fn",
-              "type": "Fn"
-            }
+            "token": "Fn"
           }
         },
         {
@@ -3657,10 +3327,7 @@
               "element": {
                 "item": "FnArg"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -3668,10 +3335,7 @@
           "ident": "variadic",
           "type": {
             "option": {
-              "token": {
-                "repr": "...",
-                "type": "Dot3"
-              }
+              "token": "Dot3"
             }
           }
         },
@@ -3775,10 +3439,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -3811,10 +3472,7 @@
           "ident": "semi_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -3847,20 +3505,14 @@
         {
           "ident": "static_token",
           "type": {
-            "token": {
-              "repr": "static",
-              "type": "Static"
-            }
+            "token": "Static"
           }
         },
         {
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
@@ -3873,10 +3525,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -3890,10 +3539,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -3925,10 +3571,7 @@
         {
           "ident": "type_token",
           "type": {
-            "token": {
-              "repr": "type",
-              "type": "Type"
-            }
+            "token": "Type"
           }
         },
         {
@@ -3940,10 +3583,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -4096,10 +3736,7 @@
           "ident": "lt_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "<",
-                "type": "Lt"
-              }
+              "token": "Lt"
             }
           }
         },
@@ -4110,10 +3747,7 @@
               "element": {
                 "item": "GenericParam"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -4121,10 +3755,7 @@
           "ident": "gt_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ">",
-                "type": "Gt"
-              }
+              "token": "Gt"
             }
           }
         },
@@ -4234,20 +3865,14 @@
           "ident": "defaultness",
           "type": {
             "option": {
-              "token": {
-                "repr": "default",
-                "type": "Default"
-              }
+              "token": "Default"
             }
           }
         },
         {
           "ident": "const_token",
           "type": {
-            "token": {
-              "repr": "const",
-              "type": "Const"
-            }
+            "token": "Const"
           }
         },
         {
@@ -4259,10 +3884,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -4274,10 +3896,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -4289,10 +3908,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -4318,19 +3934,13 @@
         {
           "ident": "existential_token",
           "type": {
-            "token": {
-              "repr": "existential",
-              "type": "Existential"
-            }
+            "token": "Existential"
           }
         },
         {
           "ident": "type_token",
           "type": {
-            "token": {
-              "repr": "type",
-              "type": "Type"
-            }
+            "token": "Type"
           }
         },
         {
@@ -4349,10 +3959,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -4363,20 +3970,14 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         },
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -4409,10 +4010,7 @@
           "ident": "semi_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -4446,10 +4044,7 @@
           "ident": "defaultness",
           "type": {
             "option": {
-              "token": {
-                "repr": "default",
-                "type": "Default"
-              }
+              "token": "Default"
             }
           }
         },
@@ -4495,20 +4090,14 @@
           "ident": "defaultness",
           "type": {
             "option": {
-              "token": {
-                "repr": "default",
-                "type": "Default"
-              }
+              "token": "Default"
             }
           }
         },
         {
           "ident": "type_token",
           "type": {
-            "token": {
-              "repr": "type",
-              "type": "Type"
-            }
+            "token": "Type"
           }
         },
         {
@@ -4526,10 +4115,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -4541,10 +4127,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -4774,10 +4357,7 @@
         {
           "ident": "const_token",
           "type": {
-            "token": {
-              "repr": "const",
-              "type": "Const"
-            }
+            "token": "Const"
           }
         },
         {
@@ -4789,10 +4369,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -4806,10 +4383,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -4823,10 +4397,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -4858,10 +4429,7 @@
         {
           "ident": "enum_token",
           "type": {
-            "token": {
-              "repr": "enum",
-              "type": "Enum"
-            }
+            "token": "Enum"
           }
         },
         {
@@ -4889,10 +4457,7 @@
               "element": {
                 "item": "Variant"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -4925,19 +4490,13 @@
         {
           "ident": "existential_token",
           "type": {
-            "token": {
-              "repr": "existential",
-              "type": "Existential"
-            }
+            "token": "Existential"
           }
         },
         {
           "ident": "type_token",
           "type": {
-            "token": {
-              "repr": "type",
-              "type": "Type"
-            }
+            "token": "Type"
           }
         },
         {
@@ -4956,10 +4515,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -4970,20 +4526,14 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         },
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -5015,19 +4565,13 @@
         {
           "ident": "extern_token",
           "type": {
-            "token": {
-              "repr": "extern",
-              "type": "Extern"
-            }
+            "token": "Extern"
           }
         },
         {
           "ident": "crate_token",
           "type": {
-            "token": {
-              "repr": "crate",
-              "type": "Crate"
-            }
+            "token": "Crate"
           }
         },
         {
@@ -5042,10 +4586,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "as",
-                    "type": "As"
-                  }
+                  "token": "As"
                 },
                 {
                   "item": "Ident"
@@ -5057,10 +4598,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -5093,10 +4631,7 @@
           "ident": "constness",
           "type": {
             "option": {
-              "token": {
-                "repr": "const",
-                "type": "Const"
-              }
+              "token": "Const"
             }
           }
         },
@@ -5104,10 +4639,7 @@
           "ident": "unsafety",
           "type": {
             "option": {
-              "token": {
-                "repr": "unsafe",
-                "type": "Unsafe"
-              }
+              "token": "Unsafe"
             }
           }
         },
@@ -5115,10 +4647,7 @@
           "ident": "asyncness",
           "type": {
             "option": {
-              "token": {
-                "repr": "async",
-                "type": "Async"
-              }
+              "token": "Async"
             }
           }
         },
@@ -5216,10 +4745,7 @@
           "ident": "defaultness",
           "type": {
             "option": {
-              "token": {
-                "repr": "default",
-                "type": "Default"
-              }
+              "token": "Default"
             }
           }
         },
@@ -5227,20 +4753,14 @@
           "ident": "unsafety",
           "type": {
             "option": {
-              "token": {
-                "repr": "unsafe",
-                "type": "Unsafe"
-              }
+              "token": "Unsafe"
             }
           }
         },
         {
           "ident": "impl_token",
           "type": {
-            "token": {
-              "repr": "impl",
-              "type": "Impl"
-            }
+            "token": "Impl"
           }
         },
         {
@@ -5256,20 +4776,14 @@
               "tuple": [
                 {
                   "option": {
-                    "token": {
-                      "repr": "!",
-                      "type": "Bang"
-                    }
+                    "token": "Bang"
                   }
                 },
                 {
                   "item": "Path"
                 },
                 {
-                  "token": {
-                    "repr": "for",
-                    "type": "For"
-                  }
+                  "token": "For"
                 }
               ]
             }
@@ -5335,10 +4849,7 @@
           "ident": "semi_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -5371,10 +4882,7 @@
         {
           "ident": "macro_token",
           "type": {
-            "token": {
-              "repr": "macro",
-              "type": "Macro"
-            }
+            "token": "Macro"
           }
         },
         {
@@ -5436,10 +4944,7 @@
         {
           "ident": "mod_token",
           "type": {
-            "token": {
-              "repr": "mod",
-              "type": "Mod"
-            }
+            "token": "Mod"
           }
         },
         {
@@ -5469,10 +4974,7 @@
           "ident": "semi",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -5505,20 +5007,14 @@
         {
           "ident": "static_token",
           "type": {
-            "token": {
-              "repr": "static",
-              "type": "Static"
-            }
+            "token": "Static"
           }
         },
         {
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
@@ -5531,10 +5027,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -5548,10 +5041,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -5565,10 +5055,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -5600,10 +5087,7 @@
         {
           "ident": "struct_token",
           "type": {
-            "token": {
-              "repr": "struct",
-              "type": "Struct"
-            }
+            "token": "Struct"
           }
         },
         {
@@ -5628,10 +5112,7 @@
           "ident": "semi_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -5665,10 +5146,7 @@
           "ident": "unsafety",
           "type": {
             "option": {
-              "token": {
-                "repr": "unsafe",
-                "type": "Unsafe"
-              }
+              "token": "Unsafe"
             }
           }
         },
@@ -5676,20 +5154,14 @@
           "ident": "auto_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "auto",
-                "type": "Auto"
-              }
+              "token": "Auto"
             }
           }
         },
         {
           "ident": "trait_token",
           "type": {
-            "token": {
-              "repr": "trait",
-              "type": "Trait"
-            }
+            "token": "Trait"
           }
         },
         {
@@ -5708,10 +5180,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -5722,10 +5191,7 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         },
@@ -5772,10 +5238,7 @@
         {
           "ident": "trait_token",
           "type": {
-            "token": {
-              "repr": "trait",
-              "type": "Trait"
-            }
+            "token": "Trait"
           }
         },
         {
@@ -5793,10 +5256,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -5806,20 +5266,14 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         },
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -5851,10 +5305,7 @@
         {
           "ident": "type_token",
           "type": {
-            "token": {
-              "repr": "type",
-              "type": "Type"
-            }
+            "token": "Type"
           }
         },
         {
@@ -5872,10 +5323,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -5889,10 +5337,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -5924,10 +5369,7 @@
         {
           "ident": "union_token",
           "type": {
-            "token": {
-              "repr": "union",
-              "type": "Union"
-            }
+            "token": "Union"
           }
         },
         {
@@ -5977,20 +5419,14 @@
         {
           "ident": "use_token",
           "type": {
-            "token": {
-              "repr": "use",
-              "type": "Use"
-            }
+            "token": "Use"
           }
         },
         {
           "ident": "leading_colon",
           "type": {
             "option": {
-              "token": {
-                "repr": "::",
-                "type": "Colon2"
-              }
+              "token": "Colon2"
             }
           }
         },
@@ -6003,10 +5439,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -6048,10 +5481,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         }
       ],
@@ -6107,10 +5537,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -6121,10 +5548,7 @@
               "element": {
                 "item": "Lifetime"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         }
@@ -6385,10 +5809,7 @@
         {
           "ident": "let_token",
           "type": {
-            "token": {
-              "repr": "let",
-              "type": "Let"
-            }
+            "token": "Let"
           }
         },
         {
@@ -6398,10 +5819,7 @@
               "element": {
                 "item": "Pat"
               },
-              "punct": {
-                "repr": "|",
-                "type": "Or"
-              }
+              "punct": "Or"
             }
           }
         },
@@ -6411,10 +5829,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": ":",
-                    "type": "Colon"
-                  }
+                  "token": "Colon"
                 },
                 {
                   "box": {
@@ -6431,10 +5846,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "=",
-                    "type": "Eq"
-                  }
+                  "token": "Eq"
                 },
                 {
                   "box": {
@@ -6448,10 +5860,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -6476,10 +5885,7 @@
         {
           "ident": "bang_token",
           "type": {
-            "token": {
-              "repr": "!",
-              "type": "Bang"
-            }
+            "token": "Bang"
           }
         },
         {
@@ -6626,10 +6032,7 @@
               "element": {
                 "item": "NestedMeta"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -6655,10 +6058,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -6683,10 +6083,7 @@
           "ident": "constness",
           "type": {
             "option": {
-              "token": {
-                "repr": "const",
-                "type": "Const"
-              }
+              "token": "Const"
             }
           }
         },
@@ -6694,10 +6091,7 @@
           "ident": "unsafety",
           "type": {
             "option": {
-              "token": {
-                "repr": "unsafe",
-                "type": "Unsafe"
-              }
+              "token": "Unsafe"
             }
           }
         },
@@ -6705,10 +6099,7 @@
           "ident": "asyncness",
           "type": {
             "option": {
-              "token": {
-                "repr": "async",
-                "type": "Async"
-              }
+              "token": "Async"
             }
           }
         },
@@ -6747,19 +6138,13 @@
         {
           "ident": "colon2_token",
           "type": {
-            "token": {
-              "repr": "::",
-              "type": "Colon2"
-            }
+            "token": "Colon2"
           }
         },
         {
           "ident": "lt_token",
           "type": {
-            "token": {
-              "repr": "<",
-              "type": "Lt"
-            }
+            "token": "Lt"
           }
         },
         {
@@ -6769,20 +6154,14 @@
               "element": {
                 "item": "GenericMethodArgument"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
         {
           "ident": "gt_token",
           "type": {
-            "token": {
-              "repr": ">",
-              "type": "Gt"
-            }
+            "token": "Gt"
           }
         }
       ],
@@ -6839,10 +6218,7 @@
               "element": {
                 "item": "Type"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -6982,10 +6358,7 @@
         {
           "ident": "box_token",
           "type": {
-            "token": {
-              "repr": "box",
-              "type": "Box"
-            }
+            "token": "Box"
           }
         },
         {
@@ -7012,10 +6385,7 @@
           "ident": "by_ref",
           "type": {
             "option": {
-              "token": {
-                "repr": "ref",
-                "type": "Ref"
-              }
+              "token": "Ref"
             }
           }
         },
@@ -7023,10 +6393,7 @@
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
@@ -7042,10 +6409,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "@",
-                    "type": "At"
-                  }
+                  "token": "At"
                 },
                 {
                   "box": {
@@ -7169,20 +6533,14 @@
         {
           "ident": "and_token",
           "type": {
-            "token": {
-              "repr": "&",
-              "type": "And"
-            }
+            "token": "And"
           }
         },
         {
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
@@ -7219,10 +6577,7 @@
               "element": {
                 "item": "Pat"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -7240,10 +6595,7 @@
           "ident": "dot2_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "..",
-                "type": "Dot2"
-              }
+              "token": "Dot2"
             }
           }
         },
@@ -7251,10 +6603,7 @@
           "ident": "comma_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "token": "Comma"
             }
           }
         },
@@ -7265,10 +6614,7 @@
               "element": {
                 "item": "Pat"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -7303,10 +6649,7 @@
               "element": {
                 "item": "FieldPat"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -7314,10 +6657,7 @@
           "ident": "dot2_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "..",
-                "type": "Dot2"
-              }
+              "token": "Dot2"
             }
           }
         }
@@ -7346,10 +6686,7 @@
               "element": {
                 "item": "Pat"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -7357,10 +6694,7 @@
           "ident": "dot2_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "..",
-                "type": "Dot2"
-              }
+              "token": "Dot2"
             }
           }
         },
@@ -7368,10 +6702,7 @@
           "ident": "comma_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "token": "Comma"
             }
           }
         },
@@ -7382,10 +6713,7 @@
               "element": {
                 "item": "Pat"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -7446,10 +6774,7 @@
         {
           "ident": "underscore_token",
           "type": {
-            "token": {
-              "repr": "_",
-              "type": "Underscore"
-            }
+            "token": "Underscore"
           }
         }
       ],
@@ -7469,10 +6794,7 @@
           "ident": "leading_colon",
           "type": {
             "option": {
-              "token": {
-                "repr": "::",
-                "type": "Colon2"
-              }
+              "token": "Colon2"
             }
           }
         },
@@ -7483,10 +6805,7 @@
               "element": {
                 "item": "PathSegment"
               },
-              "punct": {
-                "repr": "::",
-                "type": "Colon2"
-              }
+              "punct": "Colon2"
             }
           }
         }
@@ -7569,10 +6888,7 @@
         {
           "ident": "eq_token",
           "type": {
-            "token": {
-              "repr": "=",
-              "type": "Eq"
-            }
+            "token": "Eq"
           }
         },
         {
@@ -7603,10 +6919,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -7616,10 +6929,7 @@
               "element": {
                 "item": "Lifetime"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         }
@@ -7653,10 +6963,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -7666,10 +6973,7 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         }
@@ -7689,10 +6993,7 @@
         {
           "ident": "lt_token",
           "type": {
-            "token": {
-              "repr": "<",
-              "type": "Lt"
-            }
+            "token": "Lt"
           }
         },
         {
@@ -7713,20 +7014,14 @@
           "ident": "as_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "as",
-                "type": "As"
-              }
+              "token": "As"
             }
           }
         },
         {
           "ident": "gt_token",
           "type": {
-            "token": {
-              "repr": ">",
-              "type": "Gt"
-            }
+            "token": "Gt"
           }
         }
       ],
@@ -7745,10 +7040,7 @@
           "ident": "HalfOpen",
           "fields": [
             {
-              "token": {
-                "repr": "..",
-                "type": "Dot2"
-              }
+              "token": "Dot2"
             }
           ]
         },
@@ -7756,10 +7048,7 @@
           "ident": "Closed",
           "fields": [
             {
-              "token": {
-                "repr": "..=",
-                "type": "DotDotEq"
-              }
+              "token": "DotDotEq"
             }
           ]
         }
@@ -7783,10 +7072,7 @@
           "ident": "Type",
           "fields": [
             {
-              "token": {
-                "repr": "->",
-                "type": "RArrow"
-              }
+              "token": "RArrow"
             },
             {
               "box": {
@@ -7846,10 +7132,7 @@
               "item": "Expr"
             },
             {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           ]
         }
@@ -7914,10 +7197,7 @@
           "ident": "Maybe",
           "fields": [
             {
-              "token": {
-                "repr": "?",
-                "type": "Question"
-              }
+              "token": "Question"
             }
           ]
         }
@@ -7994,10 +7274,7 @@
         {
           "ident": "const_token",
           "type": {
-            "token": {
-              "repr": "const",
-              "type": "Const"
-            }
+            "token": "Const"
           }
         },
         {
@@ -8009,10 +7286,7 @@
         {
           "ident": "colon_token",
           "type": {
-            "token": {
-              "repr": ":",
-              "type": "Colon"
-            }
+            "token": "Colon"
           }
         },
         {
@@ -8027,10 +7301,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "=",
-                    "type": "Eq"
-                  }
+                  "token": "Eq"
                 },
                 {
                   "item": "Expr"
@@ -8042,10 +7313,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -8078,10 +7346,7 @@
           "ident": "semi_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -8123,10 +7388,7 @@
           "ident": "semi_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ";",
-                "type": "Semi"
-              }
+              "token": "Semi"
             }
           }
         }
@@ -8153,10 +7415,7 @@
         {
           "ident": "type_token",
           "type": {
-            "token": {
-              "repr": "type",
-              "type": "Type"
-            }
+            "token": "Type"
           }
         },
         {
@@ -8175,10 +7434,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -8189,10 +7445,7 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         },
@@ -8202,10 +7455,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "=",
-                    "type": "Eq"
-                  }
+                  "token": "Eq"
                 },
                 {
                   "item": "Type"
@@ -8217,10 +7467,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         }
       ],
@@ -8403,10 +7650,7 @@
         {
           "ident": "semi_token",
           "type": {
-            "token": {
-              "repr": ";",
-              "type": "Semi"
-            }
+            "token": "Semi"
           }
         },
         {
@@ -8440,10 +7684,7 @@
           "ident": "unsafety",
           "type": {
             "option": {
-              "token": {
-                "repr": "unsafe",
-                "type": "Unsafe"
-              }
+              "token": "Unsafe"
             }
           }
         },
@@ -8458,10 +7699,7 @@
         {
           "ident": "fn_token",
           "type": {
-            "token": {
-              "repr": "fn",
-              "type": "Fn"
-            }
+            "token": "Fn"
           }
         },
         {
@@ -8477,10 +7715,7 @@
               "element": {
                 "item": "BareFnArg"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         },
@@ -8488,10 +7723,7 @@
           "ident": "variadic",
           "type": {
             "option": {
-              "token": {
-                "repr": "...",
-                "type": "Dot3"
-              }
+              "token": "Dot3"
             }
           }
         },
@@ -8544,10 +7776,7 @@
         {
           "ident": "impl_token",
           "type": {
-            "token": {
-              "repr": "impl",
-              "type": "Impl"
-            }
+            "token": "Impl"
           }
         },
         {
@@ -8557,10 +7786,7 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         }
@@ -8580,10 +7806,7 @@
         {
           "ident": "underscore_token",
           "type": {
-            "token": {
-              "repr": "_",
-              "type": "Underscore"
-            }
+            "token": "Underscore"
           }
         }
       ],
@@ -8621,10 +7844,7 @@
         {
           "ident": "bang_token",
           "type": {
-            "token": {
-              "repr": "!",
-              "type": "Bang"
-            }
+            "token": "Bang"
           }
         }
       ],
@@ -8658,10 +7878,7 @@
           "ident": "colon_token",
           "type": {
             "option": {
-              "token": {
-                "repr": ":",
-                "type": "Colon"
-              }
+              "token": "Colon"
             }
           }
         },
@@ -8672,10 +7889,7 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         },
@@ -8683,10 +7897,7 @@
           "ident": "eq_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "=",
-                "type": "Eq"
-              }
+              "token": "Eq"
             }
           }
         },
@@ -8796,20 +8007,14 @@
         {
           "ident": "star_token",
           "type": {
-            "token": {
-              "repr": "*",
-              "type": "Star"
-            }
+            "token": "Star"
           }
         },
         {
           "ident": "const_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "const",
-                "type": "Const"
-              }
+              "token": "Const"
             }
           }
         },
@@ -8817,10 +8022,7 @@
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
@@ -8848,10 +8050,7 @@
         {
           "ident": "and_token",
           "type": {
-            "token": {
-              "repr": "&",
-              "type": "And"
-            }
+            "token": "And"
           }
         },
         {
@@ -8866,10 +8065,7 @@
           "ident": "mutability",
           "type": {
             "option": {
-              "token": {
-                "repr": "mut",
-                "type": "Mut"
-              }
+              "token": "Mut"
             }
           }
         },
@@ -8925,10 +8121,7 @@
           "ident": "dyn_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "dyn",
-                "type": "Dyn"
-              }
+              "token": "Dyn"
             }
           }
         },
@@ -8939,10 +8132,7 @@
               "element": {
                 "item": "TypeParamBound"
               },
-              "punct": {
-                "repr": "+",
-                "type": "Add"
-              }
+              "punct": "Add"
             }
           }
         }
@@ -8972,10 +8162,7 @@
               "element": {
                 "item": "Type"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -9015,10 +8202,7 @@
           "ident": "Deref",
           "fields": [
             {
-              "token": {
-                "repr": "*",
-                "type": "Star"
-              }
+              "token": "Star"
             }
           ]
         },
@@ -9026,10 +8210,7 @@
           "ident": "Not",
           "fields": [
             {
-              "token": {
-                "repr": "!",
-                "type": "Bang"
-              }
+              "token": "Bang"
             }
           ]
         },
@@ -9037,10 +8218,7 @@
           "ident": "Neg",
           "fields": [
             {
-              "token": {
-                "repr": "-",
-                "type": "Sub"
-              }
+              "token": "Sub"
             }
           ]
         }
@@ -9058,10 +8236,7 @@
         {
           "ident": "star_token",
           "type": {
-            "token": {
-              "repr": "*",
-              "type": "Star"
-            }
+            "token": "Star"
           }
         }
       ],
@@ -9089,10 +8264,7 @@
               "element": {
                 "item": "UseTree"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }
@@ -9135,10 +8307,7 @@
         {
           "ident": "colon2_token",
           "type": {
-            "token": {
-              "repr": "::",
-              "type": "Colon2"
-            }
+            "token": "Colon2"
           }
         },
         {
@@ -9170,10 +8339,7 @@
         {
           "ident": "as_token",
           "type": {
-            "token": {
-              "repr": "as",
-              "type": "As"
-            }
+            "token": "As"
           }
         },
         {
@@ -9272,10 +8438,7 @@
             "option": {
               "tuple": [
                 {
-                  "token": {
-                    "repr": "=",
-                    "type": "Eq"
-                  }
+                  "token": "Eq"
                 },
                 {
                   "item": "Expr"
@@ -9300,10 +8463,7 @@
         {
           "ident": "crate_token",
           "type": {
-            "token": {
-              "repr": "crate",
-              "type": "Crate"
-            }
+            "token": "Crate"
           }
         }
       ],
@@ -9322,10 +8482,7 @@
         {
           "ident": "pub_token",
           "type": {
-            "token": {
-              "repr": "pub",
-              "type": "Pub"
-            }
+            "token": "Pub"
           }
         }
       ],
@@ -9344,10 +8501,7 @@
         {
           "ident": "pub_token",
           "type": {
-            "token": {
-              "repr": "pub",
-              "type": "Pub"
-            }
+            "token": "Pub"
           }
         },
         {
@@ -9360,10 +8514,7 @@
           "ident": "in_token",
           "type": {
             "option": {
-              "token": {
-                "repr": "in",
-                "type": "In"
-              }
+              "token": "In"
             }
           }
         },
@@ -9431,10 +8582,7 @@
         {
           "ident": "where_token",
           "type": {
-            "token": {
-              "repr": "where",
-              "type": "Where"
-            }
+            "token": "Where"
           }
         },
         {
@@ -9444,10 +8592,7 @@
               "element": {
                 "item": "WherePredicate"
               },
-              "punct": {
-                "repr": ",",
-                "type": "Comma"
-              }
+              "punct": "Comma"
             }
           }
         }