Support folding/visiting over Ident and Span tokens
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 722c1a1..586a8d7 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -211,6 +211,8 @@
 fn fold_generic_param(&mut self, i: GenericParam) -> GenericParam { fold_generic_param(self, i) }
 
 fn fold_generics(&mut self, i: Generics) -> Generics { fold_generics(self, i) }
+
+fn fold_ident(&mut self, i: Ident) -> Ident { fold_ident(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_impl_item(&mut self, i: ImplItem) -> ImplItem { fold_impl_item(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -329,6 +331,8 @@
 fn fold_range_limits(&mut self, i: RangeLimits) -> RangeLimits { fold_range_limits(self, i) }
 
 fn fold_return_type(&mut self, i: ReturnType) -> ReturnType { fold_return_type(self, i) }
+
+fn fold_span(&mut self, i: Span) -> Span { fold_span(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_stmt(&mut self, i: Stmt) -> Stmt { fold_stmt(self, i) }
 
@@ -510,7 +514,7 @@
     match _i {
         Named(_binding_0, ) => {
             Named (
-                _binding_0,
+                _visitor.fold_ident(_binding_0),
             )
         }
         Wild(_binding_0, ) => {
@@ -761,7 +765,7 @@
     ConstParam {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         const_token: _i . const_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         colon_token: _i . colon_token,
         ty: _visitor.fold_type(_i . ty),
         eq_token: _i . eq_token,
@@ -795,7 +799,7 @@
 
 pub fn fold_derive_input<V: Folder + ?Sized>(_visitor: &mut V, _i: DeriveInput) -> DeriveInput {
     DeriveInput {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         vis: _visitor.fold_visibility(_i . vis),
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         generics: _visitor.fold_generics(_i . generics),
@@ -914,7 +918,7 @@
 pub fn fold_expr_field<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprField) -> ExprField {
     ExprField {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        field: _i . field,
+        field: _visitor.fold_ident(_i . field),
         dot_token: _i . dot_token,
     }
 }
@@ -1204,7 +1208,7 @@
 pub fn fold_expr_method_call<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprMethodCall) -> ExprMethodCall {
     ExprMethodCall {
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        method: _i . method,
+        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,
@@ -1340,7 +1344,7 @@
 
 pub fn fold_field<V: Folder + ?Sized>(_visitor: &mut V, _i: Field) -> Field {
     Field {
-        ident: _i . ident,
+        ident: (_i . ident).map(|it| { _visitor.fold_ident(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         ty: _visitor.fold_type(_i . ty),
@@ -1350,7 +1354,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_field_pat<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldPat) -> FieldPat {
     FieldPat {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         is_shorthand: _i . is_shorthand,
         colon_token: _i . colon_token,
@@ -1360,7 +1364,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_field_value<V: Folder + ?Sized>(_visitor: &mut V, _i: FieldValue) -> FieldValue {
     FieldValue {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         expr: _visitor.fold_expr(_i . expr),
         is_shorthand: _i . is_shorthand,
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1439,7 +1443,7 @@
     ForeignItemFn {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         decl: Box::new(_visitor.fold_fn_decl(* _i . decl)),
         semi_token: _i . semi_token,
     }
@@ -1451,7 +1455,7 @@
         vis: _visitor.fold_visibility(_i . vis),
         static_token: _i . static_token,
         mutbl: _visitor.fold_mutability(_i . mutbl),
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         colon_token: _i . colon_token,
         ty: Box::new(_visitor.fold_type(* _i . ty)),
         semi_token: _i . semi_token,
@@ -1463,7 +1467,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         type_token: _i . type_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         semi_token: _i . semi_token,
     }
 }
@@ -1523,6 +1527,10 @@
         where_clause: _visitor.fold_where_clause(_i . where_clause),
     }
 }
+
+pub fn fold_ident<V: Folder + ?Sized>(_visitor: &mut V, _i: Ident) -> Ident {
+    _i
+}
 # [ cfg ( feature = "full" ) ]
 pub fn fold_impl_item<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItem) -> ImplItem {
     use ::ImplItem::*;
@@ -1556,7 +1564,7 @@
         vis: _visitor.fold_visibility(_i . vis),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
         const_token: _i . const_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         colon_token: _i . colon_token,
         ty: _visitor.fold_type(_i . ty),
         eq_token: _i . eq_token,
@@ -1588,7 +1596,7 @@
         vis: _visitor.fold_visibility(_i . vis),
         defaultness: _visitor.fold_defaultness(_i . defaultness),
         type_token: _i . type_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         eq_token: _i . eq_token,
         ty: _visitor.fold_type(_i . ty),
@@ -1715,7 +1723,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         const_token: _i . const_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         colon_token: _i . colon_token,
         ty: Box::new(_visitor.fold_type(* _i . ty)),
         eq_token: _i . eq_token,
@@ -1741,7 +1749,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         enum_token: _i . enum_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         brace_token: _i . brace_token,
         variants: FoldHelper::lift(_i . variants, |it| { _visitor.fold_variant(it) }),
@@ -1754,7 +1762,7 @@
         vis: _visitor.fold_visibility(_i . vis),
         extern_token: _i . extern_token,
         crate_token: _i . crate_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         rename: _i . rename,
         semi_token: _i . semi_token,
     }
@@ -1768,7 +1776,7 @@
         unsafety: _visitor.fold_unsafety(_i . unsafety),
         abi: (_i . abi).map(|it| { _visitor.fold_abi(it) }),
         decl: Box::new(_visitor.fold_fn_decl(* _i . decl)),
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         block: Box::new(_visitor.fold_block(* _i . block)),
     }
 }
@@ -1799,7 +1807,7 @@
 pub fn fold_item_macro<V: Folder + ?Sized>(_visitor: &mut V, _i: ItemMacro) -> ItemMacro {
     ItemMacro {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        ident: _i . ident,
+        ident: (_i . ident).map(|it| { _visitor.fold_ident(it) }),
         mac: _visitor.fold_macro(_i . mac),
     }
 }
@@ -1809,7 +1817,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         macro_token: _i . macro_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         args: _i . args,
         body: _i . body,
     }
@@ -1820,7 +1828,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         mod_token: _i . mod_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         content: _i . content,
         semi: _i . semi,
     }
@@ -1832,7 +1840,7 @@
         vis: _visitor.fold_visibility(_i . vis),
         static_token: _i . static_token,
         mutbl: _visitor.fold_mutability(_i . mutbl),
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         colon_token: _i . colon_token,
         ty: Box::new(_visitor.fold_type(* _i . ty)),
         eq_token: _i . eq_token,
@@ -1846,7 +1854,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         struct_token: _i . struct_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         data: _visitor.fold_variant_data(_i . data),
         semi_token: _i . semi_token,
@@ -1860,7 +1868,7 @@
         unsafety: _visitor.fold_unsafety(_i . unsafety),
         auto_token: _i . auto_token,
         trait_token: _i . trait_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         colon_token: _i . colon_token,
         supertraits: FoldHelper::lift(_i . supertraits, |it| { _visitor.fold_type_param_bound(it) }),
@@ -1874,7 +1882,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         type_token: _i . type_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         eq_token: _i . eq_token,
         ty: Box::new(_visitor.fold_type(* _i . ty)),
@@ -1887,7 +1895,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         union_token: _i . union_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         data: _visitor.fold_variant_data(_i . data),
     }
@@ -1951,7 +1959,7 @@
     match _i {
         Term(_binding_0, ) => {
             Term (
-                _binding_0,
+                _visitor.fold_ident(_binding_0),
             )
         }
         List(_binding_0, ) => {
@@ -1969,7 +1977,7 @@
 
 pub fn fold_meta_item_list<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaItemList) -> MetaItemList {
     MetaItemList {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         paren_token: _i . paren_token,
         nested: FoldHelper::lift(_i . nested, |it| { _visitor.fold_nested_meta_item(it) }),
     }
@@ -1977,7 +1985,7 @@
 
 pub fn fold_meta_name_value<V: Folder + ?Sized>(_visitor: &mut V, _i: MetaNameValue) -> MetaNameValue {
     MetaNameValue {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         eq_token: _i . eq_token,
         lit: _i . lit,
     }
@@ -1988,7 +1996,7 @@
         constness: _visitor.fold_constness(_i . constness),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
         abi: (_i . abi).map(|it| { _visitor.fold_abi(it) }),
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         decl: _visitor.fold_fn_decl(_i . decl),
     }
 }
@@ -2112,7 +2120,7 @@
 pub fn fold_pat_ident<V: Folder + ?Sized>(_visitor: &mut V, _i: PatIdent) -> PatIdent {
     PatIdent {
         mode: _visitor.fold_binding_mode(_i . mode),
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         subpat: (_i . subpat).map(|it| { Box::new(_visitor.fold_pat(* it)) }),
         at_token: _i . at_token,
     }
@@ -2233,15 +2241,15 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_path_list_item<V: Folder + ?Sized>(_visitor: &mut V, _i: PathListItem) -> PathListItem {
     PathListItem {
-        name: _i . name,
-        rename: _i . rename,
+        name: _visitor.fold_ident(_i . name),
+        rename: (_i . rename).map(|it| { _visitor.fold_ident(it) }),
         as_token: _i . as_token,
     }
 }
 
 pub fn fold_path_segment<V: Folder + ?Sized>(_visitor: &mut V, _i: PathSegment) -> PathSegment {
     PathSegment {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         arguments: _visitor.fold_path_arguments(_i . arguments),
     }
 }
@@ -2250,7 +2258,7 @@
     PathSimple {
         path: _visitor.fold_path(_i . path),
         as_token: _i . as_token,
-        rename: _i . rename,
+        rename: (_i . rename).map(|it| { _visitor.fold_ident(it) }),
     }
 }
 
@@ -2299,6 +2307,10 @@
         }
     }
 }
+
+pub fn fold_span<V: Folder + ?Sized>(_visitor: &mut V, _i: Span) -> Span {
+    _i
+}
 # [ cfg ( feature = "full" ) ]
 pub fn fold_stmt<V: Folder + ?Sized>(_visitor: &mut V, _i: Stmt) -> Stmt {
     use ::Stmt::*;
@@ -2374,7 +2386,7 @@
     TraitItemConst {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         const_token: _i . const_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         colon_token: _i . colon_token,
         ty: _visitor.fold_type(_i . ty),
         default: _i . default,
@@ -2402,7 +2414,7 @@
     TraitItemType {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         type_token: _i . type_token,
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         generics: _visitor.fold_generics(_i . generics),
         colon_token: _i . colon_token,
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
@@ -2504,7 +2516,7 @@
 
 pub fn fold_type_binding<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeBinding) -> TypeBinding {
     TypeBinding {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         eq_token: _i . eq_token,
         ty: _visitor.fold_type(_i . ty),
     }
@@ -2539,7 +2551,7 @@
 pub fn fold_type_param<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeParam) -> TypeParam {
     TypeParam {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         colon_token: _i . colon_token,
         bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
         eq_token: _i . eq_token,
@@ -2650,7 +2662,7 @@
 
 pub fn fold_variant<V: Folder + ?Sized>(_visitor: &mut V, _i: Variant) -> Variant {
     Variant {
-        ident: _i . ident,
+        ident: _visitor.fold_ident(_i . ident),
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         data: _visitor.fold_variant_data(_i . data),
         discriminant: (_i . discriminant).map(|it| { _visitor.fold_expr(it) }),