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) }),
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index 06697aa..8991a4a 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -184,6 +184,8 @@
 fn visit_generic_param(&mut self, i: &'ast GenericParam) { visit_generic_param(self, i) }
 
 fn visit_generics(&mut self, i: &'ast Generics) { visit_generics(self, i) }
+
+fn visit_ident(&mut self, i: &'ast Ident) { visit_ident(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_impl_item(&mut self, i: &'ast ImplItem) { visit_impl_item(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -302,6 +304,8 @@
 fn visit_range_limits(&mut self, i: &'ast RangeLimits) { visit_range_limits(self, i) }
 
 fn visit_return_type(&mut self, i: &'ast ReturnType) { visit_return_type(self, i) }
+
+fn visit_span(&mut self, i: &'ast Span) { visit_span(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_stmt(&mut self, i: &'ast Stmt) { visit_stmt(self, i) }
 
@@ -462,7 +466,7 @@
     use ::BareFnArgName::*;
     match *_i {
         Named(ref _binding_0, ) => {
-            // Skipped field * _binding_0;
+            _visitor.visit_ident(&* _binding_0);
         }
         Wild(ref _binding_0, ) => {
             // Skipped field * _binding_0;
@@ -633,7 +637,7 @@
 pub fn visit_const_param<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ConstParam) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type(&_i . ty);
     // Skipped field _i . eq_token;
@@ -661,7 +665,7 @@
 }
 
 pub fn visit_derive_input<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast DeriveInput) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_visibility(&_i . vis);
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_generics(&_i . generics);
@@ -750,7 +754,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_field<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprField) {
     _visitor.visit_expr(&_i . expr);
-    // Skipped field _i . field;
+    _visitor.visit_ident(&_i . field);
     // Skipped field _i . dot_token;
 }
 # [ cfg ( feature = "full" ) ]
@@ -942,7 +946,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_method_call<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprMethodCall) {
     _visitor.visit_expr(&_i . expr);
-    // Skipped field _i . method;
+    _visitor.visit_ident(&_i . method);
     for el in (_i . typarams).iter() { let it = el.item(); _visitor.visit_type(&it) };
     for el in (_i . args).iter() { let it = el.item(); _visitor.visit_expr(&it) };
     // Skipped field _i . paren_token;
@@ -1046,7 +1050,7 @@
 }
 
 pub fn visit_field<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Field) {
-    // Skipped field _i . ident;
+    if let Some(ref it) = _i . ident { _visitor.visit_ident(&* it) };
     _visitor.visit_visibility(&_i . vis);
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_type(&_i . ty);
@@ -1054,7 +1058,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_field_pat<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FieldPat) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_pat(&_i . pat);
     // Skipped field _i . is_shorthand;
     // Skipped field _i . colon_token;
@@ -1062,7 +1066,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_field_value<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast FieldValue) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_expr(&_i . expr);
     // Skipped field _i . is_shorthand;
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
@@ -1121,7 +1125,7 @@
 pub fn visit_foreign_item_fn<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ForeignItemFn) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_fn_decl(&_i . decl);
     // Skipped field _i . semi_token;
 }
@@ -1131,7 +1135,7 @@
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . static_token;
     _visitor.visit_mutability(&_i . mutbl);
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type(&_i . ty);
     // Skipped field _i . semi_token;
@@ -1141,7 +1145,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . semi_token;
 }
 
@@ -1184,6 +1188,9 @@
     // Skipped field _i . gt_token;
     _visitor.visit_where_clause(&_i . where_clause);
 }
+
+pub fn visit_ident<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Ident) {
+}
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ImplItem) {
     use ::ImplItem::*;
@@ -1208,7 +1215,7 @@
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_defaultness(&_i . defaultness);
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type(&_i . ty);
     // Skipped field _i . eq_token;
@@ -1234,7 +1241,7 @@
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_defaultness(&_i . defaultness);
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_generics(&_i . generics);
     // Skipped field _i . eq_token;
     _visitor.visit_type(&_i . ty);
@@ -1321,7 +1328,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type(&_i . ty);
     // Skipped field _i . eq_token;
@@ -1343,7 +1350,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . enum_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_generics(&_i . generics);
     // Skipped field _i . brace_token;
     for el in (_i . variants).iter() { let it = el.item(); _visitor.visit_variant(&it) };
@@ -1354,7 +1361,7 @@
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . extern_token;
     // Skipped field _i . crate_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . rename;
     // Skipped field _i . semi_token;
 }
@@ -1366,7 +1373,7 @@
     _visitor.visit_unsafety(&_i . unsafety);
     if let Some(ref it) = _i . abi { _visitor.visit_abi(&* it) };
     _visitor.visit_fn_decl(&_i . decl);
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_block(&_i . block);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1391,7 +1398,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_macro<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ItemMacro) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
-    // Skipped field _i . ident;
+    if let Some(ref it) = _i . ident { _visitor.visit_ident(&* it) };
     _visitor.visit_macro(&_i . mac);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1399,7 +1406,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . macro_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . args;
     // Skipped field _i . body;
 }
@@ -1408,7 +1415,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . mod_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . content;
     // Skipped field _i . semi;
 }
@@ -1418,7 +1425,7 @@
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . static_token;
     _visitor.visit_mutability(&_i . mutbl);
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type(&_i . ty);
     // Skipped field _i . eq_token;
@@ -1430,7 +1437,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . struct_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_generics(&_i . generics);
     _visitor.visit_variant_data(&_i . data);
     // Skipped field _i . semi_token;
@@ -1442,7 +1449,7 @@
     _visitor.visit_unsafety(&_i . unsafety);
     // Skipped field _i . auto_token;
     // Skipped field _i . trait_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_generics(&_i . generics);
     // Skipped field _i . colon_token;
     for el in (_i . supertraits).iter() { let it = el.item(); _visitor.visit_type_param_bound(&it) };
@@ -1454,7 +1461,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_generics(&_i . generics);
     // Skipped field _i . eq_token;
     _visitor.visit_type(&_i . ty);
@@ -1465,7 +1472,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     // Skipped field _i . union_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_generics(&_i . generics);
     _visitor.visit_variant_data(&_i . data);
 }
@@ -1517,7 +1524,7 @@
     use ::MetaItem::*;
     match *_i {
         Term(ref _binding_0, ) => {
-            // Skipped field * _binding_0;
+            _visitor.visit_ident(&* _binding_0);
         }
         List(ref _binding_0, ) => {
             _visitor.visit_meta_item_list(&* _binding_0);
@@ -1529,13 +1536,13 @@
 }
 
 pub fn visit_meta_item_list<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaItemList) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . paren_token;
     for el in (_i . nested).iter() { let it = el.item(); _visitor.visit_nested_meta_item(&it) };
 }
 
 pub fn visit_meta_name_value<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaNameValue) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . eq_token;
     // Skipped field _i . lit;
 }
@@ -1544,7 +1551,7 @@
     _visitor.visit_constness(&_i . constness);
     _visitor.visit_unsafety(&_i . unsafety);
     if let Some(ref it) = _i . abi { _visitor.visit_abi(&* it) };
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_fn_decl(&_i . decl);
 }
 
@@ -1630,7 +1637,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ident<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PatIdent) {
     _visitor.visit_binding_mode(&_i . mode);
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     if let Some(ref it) = _i . subpat { _visitor.visit_pat(&* it) };
     // Skipped field _i . at_token;
 }
@@ -1721,20 +1728,20 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_path_list_item<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PathListItem) {
-    // Skipped field _i . name;
-    // Skipped field _i . rename;
+    _visitor.visit_ident(&_i . name);
+    if let Some(ref it) = _i . rename { _visitor.visit_ident(&* it) };
     // Skipped field _i . as_token;
 }
 
 pub fn visit_path_segment<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PathSegment) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_path_arguments(&_i . arguments);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_path_simple<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PathSimple) {
     _visitor.visit_path(&_i . path);
     // Skipped field _i . as_token;
-    // Skipped field _i . rename;
+    if let Some(ref it) = _i . rename { _visitor.visit_ident(&* it) };
 }
 
 pub fn visit_poly_trait_ref<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PolyTraitRef) {
@@ -1772,6 +1779,9 @@
         }
     }
 }
+
+pub fn visit_span<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Span) {
+}
 # [ cfg ( feature = "full" ) ]
 pub fn visit_stmt<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Stmt) {
     use ::Stmt::*;
@@ -1826,7 +1836,7 @@
 pub fn visit_trait_item_const<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitItemConst) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type(&_i . ty);
     // Skipped field _i . default;
@@ -1848,7 +1858,7 @@
 pub fn visit_trait_item_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TraitItemType) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     _visitor.visit_generics(&_i . generics);
     // Skipped field _i . colon_token;
     for el in (_i . bounds).iter() { let it = el.item(); _visitor.visit_type_param_bound(&it) };
@@ -1916,7 +1926,7 @@
 }
 
 pub fn visit_type_binding<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeBinding) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . eq_token;
     _visitor.visit_type(&_i . ty);
 }
@@ -1941,7 +1951,7 @@
 
 pub fn visit_type_param<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeParam) {
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     // Skipped field _i . colon_token;
     for el in (_i . bounds).iter() { let it = el.item(); _visitor.visit_type_param_bound(&it) };
     // Skipped field _i . eq_token;
@@ -2024,7 +2034,7 @@
 }
 
 pub fn visit_variant<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Variant) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident(&_i . ident);
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_variant_data(&_i . data);
     if let Some(ref it) = _i . discriminant { _visitor.visit_expr(&* it) };
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 3a91cd4..f22f656 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -184,6 +184,8 @@
 fn visit_generic_param_mut(&mut self, i: &mut GenericParam) { visit_generic_param_mut(self, i) }
 
 fn visit_generics_mut(&mut self, i: &mut Generics) { visit_generics_mut(self, i) }
+
+fn visit_ident_mut(&mut self, i: &mut Ident) { visit_ident_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_impl_item_mut(&mut self, i: &mut ImplItem) { visit_impl_item_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -302,6 +304,8 @@
 fn visit_range_limits_mut(&mut self, i: &mut RangeLimits) { visit_range_limits_mut(self, i) }
 
 fn visit_return_type_mut(&mut self, i: &mut ReturnType) { visit_return_type_mut(self, i) }
+
+fn visit_span_mut(&mut self, i: &mut Span) { visit_span_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_stmt_mut(&mut self, i: &mut Stmt) { visit_stmt_mut(self, i) }
 
@@ -462,7 +466,7 @@
     use ::BareFnArgName::*;
     match *_i {
         Named(ref mut _binding_0, ) => {
-            // Skipped field * _binding_0;
+            _visitor.visit_ident_mut(&mut * _binding_0);
         }
         Wild(ref mut _binding_0, ) => {
             // Skipped field * _binding_0;
@@ -633,7 +637,7 @@
 pub fn visit_const_param_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ConstParam) {
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type_mut(&mut _i . ty);
     // Skipped field _i . eq_token;
@@ -661,7 +665,7 @@
 }
 
 pub fn visit_derive_input_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut DeriveInput) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_visibility_mut(&mut _i . vis);
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_generics_mut(&mut _i . generics);
@@ -750,7 +754,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprField) {
     _visitor.visit_expr_mut(&mut _i . expr);
-    // Skipped field _i . field;
+    _visitor.visit_ident_mut(&mut _i . field);
     // Skipped field _i . dot_token;
 }
 # [ cfg ( feature = "full" ) ]
@@ -942,7 +946,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_method_call_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprMethodCall) {
     _visitor.visit_expr_mut(&mut _i . expr);
-    // Skipped field _i . method;
+    _visitor.visit_ident_mut(&mut _i . method);
     for mut el in (_i . typarams).iter_mut() { let mut it = el.item_mut(); _visitor.visit_type_mut(&mut it) };
     for mut el in (_i . args).iter_mut() { let mut it = el.item_mut(); _visitor.visit_expr_mut(&mut it) };
     // Skipped field _i . paren_token;
@@ -1046,7 +1050,7 @@
 }
 
 pub fn visit_field_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Field) {
-    // Skipped field _i . ident;
+    if let Some(ref mut it) = _i . ident { _visitor.visit_ident_mut(&mut * it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_type_mut(&mut _i . ty);
@@ -1054,7 +1058,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_field_pat_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldPat) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_pat_mut(&mut _i . pat);
     // Skipped field _i . is_shorthand;
     // Skipped field _i . colon_token;
@@ -1062,7 +1066,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_field_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut FieldValue) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_expr_mut(&mut _i . expr);
     // Skipped field _i . is_shorthand;
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
@@ -1121,7 +1125,7 @@
 pub fn visit_foreign_item_fn_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ForeignItemFn) {
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_fn_decl_mut(&mut _i . decl);
     // Skipped field _i . semi_token;
 }
@@ -1131,7 +1135,7 @@
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . static_token;
     _visitor.visit_mutability_mut(&mut _i . mutbl);
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type_mut(&mut _i . ty);
     // Skipped field _i . semi_token;
@@ -1141,7 +1145,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . semi_token;
 }
 
@@ -1184,6 +1188,9 @@
     // Skipped field _i . gt_token;
     _visitor.visit_where_clause_mut(&mut _i . where_clause);
 }
+
+pub fn visit_ident_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Ident) {
+}
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItem) {
     use ::ImplItem::*;
@@ -1208,7 +1215,7 @@
     _visitor.visit_visibility_mut(&mut _i . vis);
     _visitor.visit_defaultness_mut(&mut _i . defaultness);
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type_mut(&mut _i . ty);
     // Skipped field _i . eq_token;
@@ -1234,7 +1241,7 @@
     _visitor.visit_visibility_mut(&mut _i . vis);
     _visitor.visit_defaultness_mut(&mut _i . defaultness);
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . eq_token;
     _visitor.visit_type_mut(&mut _i . ty);
@@ -1321,7 +1328,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type_mut(&mut _i . ty);
     // Skipped field _i . eq_token;
@@ -1343,7 +1350,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . enum_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . brace_token;
     for mut el in (_i . variants).iter_mut() { let mut it = el.item_mut(); _visitor.visit_variant_mut(&mut it) };
@@ -1354,7 +1361,7 @@
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . extern_token;
     // Skipped field _i . crate_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . rename;
     // Skipped field _i . semi_token;
 }
@@ -1366,7 +1373,7 @@
     _visitor.visit_unsafety_mut(&mut _i . unsafety);
     if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(&mut * it) };
     _visitor.visit_fn_decl_mut(&mut _i . decl);
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_block_mut(&mut _i . block);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1391,7 +1398,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_item_macro_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ItemMacro) {
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
-    // Skipped field _i . ident;
+    if let Some(ref mut it) = _i . ident { _visitor.visit_ident_mut(&mut * it) };
     _visitor.visit_macro_mut(&mut _i . mac);
 }
 # [ cfg ( feature = "full" ) ]
@@ -1399,7 +1406,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . macro_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . args;
     // Skipped field _i . body;
 }
@@ -1408,7 +1415,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . mod_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . content;
     // Skipped field _i . semi;
 }
@@ -1418,7 +1425,7 @@
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . static_token;
     _visitor.visit_mutability_mut(&mut _i . mutbl);
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type_mut(&mut _i . ty);
     // Skipped field _i . eq_token;
@@ -1430,7 +1437,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . struct_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_generics_mut(&mut _i . generics);
     _visitor.visit_variant_data_mut(&mut _i . data);
     // Skipped field _i . semi_token;
@@ -1442,7 +1449,7 @@
     _visitor.visit_unsafety_mut(&mut _i . unsafety);
     // Skipped field _i . auto_token;
     // Skipped field _i . trait_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . colon_token;
     for mut el in (_i . supertraits).iter_mut() { let mut it = el.item_mut(); _visitor.visit_type_param_bound_mut(&mut it) };
@@ -1454,7 +1461,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . eq_token;
     _visitor.visit_type_mut(&mut _i . ty);
@@ -1465,7 +1472,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     // Skipped field _i . union_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_generics_mut(&mut _i . generics);
     _visitor.visit_variant_data_mut(&mut _i . data);
 }
@@ -1517,7 +1524,7 @@
     use ::MetaItem::*;
     match *_i {
         Term(ref mut _binding_0, ) => {
-            // Skipped field * _binding_0;
+            _visitor.visit_ident_mut(&mut * _binding_0);
         }
         List(ref mut _binding_0, ) => {
             _visitor.visit_meta_item_list_mut(&mut * _binding_0);
@@ -1529,13 +1536,13 @@
 }
 
 pub fn visit_meta_item_list_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaItemList) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . paren_token;
     for mut el in (_i . nested).iter_mut() { let mut it = el.item_mut(); _visitor.visit_nested_meta_item_mut(&mut it) };
 }
 
 pub fn visit_meta_name_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaNameValue) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . eq_token;
     // Skipped field _i . lit;
 }
@@ -1544,7 +1551,7 @@
     _visitor.visit_constness_mut(&mut _i . constness);
     _visitor.visit_unsafety_mut(&mut _i . unsafety);
     if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(&mut * it) };
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_fn_decl_mut(&mut _i . decl);
 }
 
@@ -1630,7 +1637,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_pat_ident_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PatIdent) {
     _visitor.visit_binding_mode_mut(&mut _i . mode);
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     if let Some(ref mut it) = _i . subpat { _visitor.visit_pat_mut(&mut * it) };
     // Skipped field _i . at_token;
 }
@@ -1721,20 +1728,20 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_path_list_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathListItem) {
-    // Skipped field _i . name;
-    // Skipped field _i . rename;
+    _visitor.visit_ident_mut(&mut _i . name);
+    if let Some(ref mut it) = _i . rename { _visitor.visit_ident_mut(&mut * it) };
     // Skipped field _i . as_token;
 }
 
 pub fn visit_path_segment_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathSegment) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_path_arguments_mut(&mut _i . arguments);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_path_simple_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PathSimple) {
     _visitor.visit_path_mut(&mut _i . path);
     // Skipped field _i . as_token;
-    // Skipped field _i . rename;
+    if let Some(ref mut it) = _i . rename { _visitor.visit_ident_mut(&mut * it) };
 }
 
 pub fn visit_poly_trait_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PolyTraitRef) {
@@ -1772,6 +1779,9 @@
         }
     }
 }
+
+pub fn visit_span_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Span) {
+}
 # [ cfg ( feature = "full" ) ]
 pub fn visit_stmt_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Stmt) {
     use ::Stmt::*;
@@ -1826,7 +1836,7 @@
 pub fn visit_trait_item_const_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemConst) {
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     // Skipped field _i . const_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . colon_token;
     _visitor.visit_type_mut(&mut _i . ty);
     // Skipped field _i . default;
@@ -1848,7 +1858,7 @@
 pub fn visit_trait_item_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TraitItemType) {
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     // Skipped field _i . type_token;
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     _visitor.visit_generics_mut(&mut _i . generics);
     // Skipped field _i . colon_token;
     for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_type_param_bound_mut(&mut it) };
@@ -1916,7 +1926,7 @@
 }
 
 pub fn visit_type_binding_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeBinding) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . eq_token;
     _visitor.visit_type_mut(&mut _i . ty);
 }
@@ -1941,7 +1951,7 @@
 
 pub fn visit_type_param_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeParam) {
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     // Skipped field _i . colon_token;
     for mut el in (_i . bounds).iter_mut() { let mut it = el.item_mut(); _visitor.visit_type_param_bound_mut(&mut it) };
     // Skipped field _i . eq_token;
@@ -2024,7 +2034,7 @@
 }
 
 pub fn visit_variant_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Variant) {
-    // Skipped field _i . ident;
+    _visitor.visit_ident_mut(&mut _i . ident);
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_variant_data_mut(&mut _i . data);
     if let Some(ref mut it) = _i . discriminant { _visitor.visit_expr_mut(&mut * it) };
diff --git a/syn_codegen/src/main.rs b/syn_codegen/src/main.rs
index 2a60844..50f47ab 100644
--- a/syn_codegen/src/main.rs
+++ b/syn_codegen/src/main.rs
@@ -35,6 +35,11 @@
     "visit_mut",
 ];
 
+const TERMINAL_TYPES: &[&str] = &[
+    "Ident",
+    "Span",
+];
+
 fn path_eq(a: &syn::Path, b: &syn::Path) -> bool {
     if a.global() != b.global() || a.segments.len() != b.segments.len() {
         return false;
@@ -685,7 +690,10 @@
                             (*el.item(), quote!(_i.#id))
                         }).collect()
                     }
-                    VariantData::Unit => vec![]
+                    VariantData::Unit => {
+                        state.fold_impl.push_str("    _i\n");
+                        vec![]
+                    }
                 };
 
                 for (field, ref_toks) in fields {
@@ -722,6 +730,28 @@
     let mut lookup = BTreeMap::new();
     load_file(SYN_CRATE_ROOT, quote!(), &mut lookup).unwrap();
 
+    // Load in any terminal types
+    for &tt in TERMINAL_TYPES {
+        use syn::*;
+        lookup.insert(Ident::from(tt), AstItem {
+            item: DeriveInput {
+                ident: Ident::from(tt),
+                vis: Visibility::Public(VisPublic {
+                    pub_token: Default::default(),
+                }),
+                attrs: vec![],
+                generics: Default::default(),
+                body: Body::Struct(BodyStruct {
+                    data: VariantData::Unit,
+                    struct_token: Default::default(),
+                    semi_token: None,
+                }),
+            },
+            features: Default::default(),
+            eos_full: false,
+        });
+    }
+
     let mut state = Default::default();
     for s in lookup.values() {
         codegen::generate(&mut state, &lookup, s);
