diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index b7165ef..c32ae4e 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -265,7 +265,11 @@
 # [ cfg ( feature = "full" ) ]
 fn fold_item_use(&mut self, i: ItemUse) -> ItemUse { fold_item_use(self, i) }
 
+fn fold_lifetime(&mut self, i: Lifetime) -> Lifetime { fold_lifetime(self, i) }
+
 fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef { fold_lifetime_def(self, i) }
+
+fn fold_lit(&mut self, i: Lit) -> Lit { fold_lit(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_local(&mut self, i: Local) -> Local { fold_local(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -430,7 +434,7 @@
     match _i {
         Named(_binding_0, ) => {
             Named (
-                _binding_0,
+                _visitor.fold_lit(_binding_0),
             )
         }
         Default => { Default }
@@ -465,7 +469,7 @@
     ArgSelfRef {
         and_token: _i . and_token,
         self_token: _i . self_token,
-        lifetime: _i . lifetime,
+        lifetime: (_i . lifetime).map(|it| { _visitor.fold_lifetime(it) }),
         mutbl: _visitor.fold_mutability(_i . mutbl),
     }
 }
@@ -871,7 +875,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_break<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprBreak) -> ExprBreak {
     ExprBreak {
-        label: _i . label,
+        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
         break_token: _i . break_token,
     }
@@ -914,7 +918,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn fold_expr_continue<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprContinue) -> ExprContinue {
     ExprContinue {
-        label: _i . label,
+        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
         continue_token: _i . continue_token,
     }
 }
@@ -932,7 +936,7 @@
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         body: _visitor.fold_block(_i . body),
-        label: _i . label,
+        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
         for_token: _i . for_token,
         colon_token: _i . colon_token,
         in_token: _i . in_token,
@@ -1030,7 +1034,7 @@
         }
         Lit(_binding_0, ) => {
             Lit (
-                _binding_0,
+                _visitor.fold_lit(_binding_0),
             )
         }
         Cast(_binding_0, ) => {
@@ -1189,7 +1193,7 @@
 pub fn fold_expr_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprLoop) -> ExprLoop {
     ExprLoop {
         body: _visitor.fold_block(_i . body),
-        label: _i . label,
+        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
         loop_token: _i . loop_token,
         colon_token: _i . colon_token,
     }
@@ -1306,7 +1310,7 @@
     ExprWhile {
         cond: Box::new(_visitor.fold_expr(* _i . cond)),
         body: _visitor.fold_block(_i . body),
-        label: _i . label,
+        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
         colon_token: _i . colon_token,
         while_token: _i . while_token,
     }
@@ -1317,7 +1321,7 @@
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
         body: _visitor.fold_block(_i . body),
-        label: _i . label,
+        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
         colon_token: _i . colon_token,
         while_token: _i . while_token,
         let_token: _i . let_token,
@@ -1471,7 +1475,7 @@
     match _i {
         Lifetime(_binding_0, ) => {
             Lifetime (
-                _binding_0,
+                _visitor.fold_lifetime(_binding_0),
             )
         }
         Type(_binding_0, ) => {
@@ -1523,7 +1527,10 @@
 }
 
 pub fn fold_ident<V: Folder + ?Sized>(_visitor: &mut V, _i: Ident) -> Ident {
-    _i
+    Ident {
+        sym: _i . sym,
+        span: _visitor.fold_span(_i . span),
+    }
 }
 # [ cfg ( feature = "full" ) ]
 pub fn fold_impl_item<V: Folder + ?Sized>(_visitor: &mut V, _i: ImplItem) -> ImplItem {
@@ -1916,12 +1923,26 @@
     }
 }
 
+pub fn fold_lifetime<V: Folder + ?Sized>(_visitor: &mut V, _i: Lifetime) -> Lifetime {
+    Lifetime {
+        sym: _i . sym,
+        span: _visitor.fold_span(_i . span),
+    }
+}
+
 pub fn fold_lifetime_def<V: Folder + ?Sized>(_visitor: &mut V, _i: LifetimeDef) -> LifetimeDef {
     LifetimeDef {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        lifetime: _i . lifetime,
+        lifetime: _visitor.fold_lifetime(_i . lifetime),
         colon_token: _i . colon_token,
-        bounds: _i . bounds,
+        bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
+    }
+}
+
+pub fn fold_lit<V: Folder + ?Sized>(_visitor: &mut V, _i: Lit) -> Lit {
+    Lit {
+        value: _i . value,
+        span: _visitor.fold_span(_i . span),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2008,7 +2029,7 @@
     MetaNameValue {
         ident: _visitor.fold_ident(_i . ident),
         eq_token: _i . eq_token,
-        lit: _i . lit,
+        lit: _visitor.fold_lit(_i . lit),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2051,7 +2072,7 @@
         }
         Literal(_binding_0, ) => {
             Literal (
-                _binding_0,
+                _visitor.fold_lit(_binding_0),
             )
         }
     }
@@ -2559,7 +2580,7 @@
         }
         Region(_binding_0, ) => {
             Region (
-                _binding_0,
+                _visitor.fold_lifetime(_binding_0),
             )
         }
     }
@@ -2590,7 +2611,7 @@
 pub fn fold_type_reference<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeReference) -> TypeReference {
     TypeReference {
         and_token: _i . and_token,
-        lifetime: _i . lifetime,
+        lifetime: (_i . lifetime).map(|it| { _visitor.fold_lifetime(it) }),
         ty: Box::new(_visitor.fold_mut_type(* _i . ty)),
     }
 }
@@ -2820,9 +2841,9 @@
 
 pub fn fold_where_region_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereRegionPredicate) -> WhereRegionPredicate {
     WhereRegionPredicate {
-        lifetime: _i . lifetime,
+        lifetime: _visitor.fold_lifetime(_i . lifetime),
         colon_token: _i . colon_token,
-        bounds: _i . bounds,
+        bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
     }
 }
 
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index ca2b407..a0a0aab 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -239,7 +239,11 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_item_use(&mut self, i: &'ast ItemUse) { visit_item_use(self, i) }
 
+fn visit_lifetime(&mut self, i: &'ast Lifetime) { visit_lifetime(self, i) }
+
 fn visit_lifetime_def(&mut self, i: &'ast LifetimeDef) { visit_lifetime_def(self, i) }
+
+fn visit_lit(&mut self, i: &'ast Lit) { visit_lit(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_local(&mut self, i: &'ast Local) { visit_local(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -401,7 +405,7 @@
     use ::AbiKind::*;
     match *_i {
         Named(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lit(_binding_0);
         }
         Default => { }
     }
@@ -428,7 +432,7 @@
 pub fn visit_arg_self_ref<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ArgSelfRef) {
     // Skipped field _i . and_token;
     // Skipped field _i . self_token;
-    // Skipped field _i . lifetime;
+    if let Some(ref it) = _i . lifetime { _visitor.visit_lifetime(it) };
     _visitor.visit_mutability(& _i . mutbl);
 }
 # [ cfg ( feature = "full" ) ]
@@ -720,7 +724,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_break<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprBreak) {
-    // Skipped field _i . label;
+    if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     if let Some(ref it) = _i . expr { _visitor.visit_expr(it) };
     // Skipped field _i . break_token;
 }
@@ -753,7 +757,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_continue<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprContinue) {
-    // Skipped field _i . label;
+    if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     // Skipped field _i . continue_token;
 }
 # [ cfg ( feature = "full" ) ]
@@ -767,7 +771,7 @@
     _visitor.visit_pat(& _i . pat);
     _visitor.visit_expr(& _i . expr);
     _visitor.visit_block(& _i . body);
-    // Skipped field _i . label;
+    if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     // Skipped field _i . for_token;
     // Skipped field _i . colon_token;
     // Skipped field _i . in_token;
@@ -837,7 +841,7 @@
             _visitor.visit_expr_unary(_binding_0);
         }
         Lit(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lit(_binding_0);
         }
         Cast(ref _binding_0, ) => {
             _visitor.visit_expr_cast(_binding_0);
@@ -934,7 +938,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_loop<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprLoop) {
     _visitor.visit_block(& _i . body);
-    // Skipped field _i . label;
+    if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     // Skipped field _i . loop_token;
     // Skipped field _i . colon_token;
 }
@@ -1023,7 +1027,7 @@
 pub fn visit_expr_while<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprWhile) {
     _visitor.visit_expr(& _i . cond);
     _visitor.visit_block(& _i . body);
-    // Skipped field _i . label;
+    if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     // Skipped field _i . colon_token;
     // Skipped field _i . while_token;
 }
@@ -1032,7 +1036,7 @@
     _visitor.visit_pat(& _i . pat);
     _visitor.visit_expr(& _i . expr);
     _visitor.visit_block(& _i . body);
-    // Skipped field _i . label;
+    if let Some(ref it) = _i . label { _visitor.visit_lifetime(it) };
     // Skipped field _i . colon_token;
     // Skipped field _i . while_token;
     // Skipped field _i . let_token;
@@ -1150,7 +1154,7 @@
     use ::GenericArgument::*;
     match *_i {
         Lifetime(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lifetime(_binding_0);
         }
         Type(ref _binding_0, ) => {
             _visitor.visit_type(_binding_0);
@@ -1187,6 +1191,8 @@
 }
 
 pub fn visit_ident<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Ident) {
+    // Skipped field _i . sym;
+    _visitor.visit_span(& _i . span);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ImplItem) {
@@ -1491,11 +1497,21 @@
     // Skipped field _i . semi_token;
 }
 
+pub fn visit_lifetime<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Lifetime) {
+    // Skipped field _i . sym;
+    _visitor.visit_span(& _i . span);
+}
+
 pub fn visit_lifetime_def<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast LifetimeDef) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
-    // Skipped field _i . lifetime;
+    _visitor.visit_lifetime(& _i . lifetime);
     // Skipped field _i . colon_token;
-    // Skipped field _i . bounds;
+    for el in & _i . bounds { let it = el.item(); _visitor.visit_lifetime(it) };
+}
+
+pub fn visit_lit<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Lit) {
+    // Skipped field _i . value;
+    _visitor.visit_span(& _i . span);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_local<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast Local) {
@@ -1562,7 +1578,7 @@
 pub fn visit_meta_name_value<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MetaNameValue) {
     _visitor.visit_ident(& _i . ident);
     // Skipped field _i . eq_token;
-    // Skipped field _i . lit;
+    _visitor.visit_lit(& _i . lit);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_method_sig<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MethodSig) {
@@ -1595,7 +1611,7 @@
             _visitor.visit_meta_item(_binding_0);
         }
         Literal(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lit(_binding_0);
         }
     }
 }
@@ -1960,7 +1976,7 @@
             _visitor.visit_trait_bound_modifier(_binding_1);
         }
         Region(ref _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lifetime(_binding_0);
         }
     }
 }
@@ -1983,7 +1999,7 @@
 
 pub fn visit_type_reference<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeReference) {
     // Skipped field _i . and_token;
-    // Skipped field _i . lifetime;
+    if let Some(ref it) = _i . lifetime { _visitor.visit_lifetime(it) };
     _visitor.visit_mut_type(& _i . ty);
 }
 
@@ -2151,8 +2167,8 @@
 }
 
 pub fn visit_where_region_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereRegionPredicate) {
-    // Skipped field _i . lifetime;
+    _visitor.visit_lifetime(& _i . lifetime);
     // Skipped field _i . colon_token;
-    // Skipped field _i . bounds;
+    for el in & _i . bounds { let it = el.item(); _visitor.visit_lifetime(it) };
 }
 
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 2dae4a7..73ecd16 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -239,7 +239,11 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_item_use_mut(&mut self, i: &mut ItemUse) { visit_item_use_mut(self, i) }
 
+fn visit_lifetime_mut(&mut self, i: &mut Lifetime) { visit_lifetime_mut(self, i) }
+
 fn visit_lifetime_def_mut(&mut self, i: &mut LifetimeDef) { visit_lifetime_def_mut(self, i) }
+
+fn visit_lit_mut(&mut self, i: &mut Lit) { visit_lit_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_local_mut(&mut self, i: &mut Local) { visit_local_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -401,7 +405,7 @@
     use ::AbiKind::*;
     match *_i {
         Named(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lit_mut(_binding_0);
         }
         Default => { }
     }
@@ -428,7 +432,7 @@
 pub fn visit_arg_self_ref_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ArgSelfRef) {
     // Skipped field _i . and_token;
     // Skipped field _i . self_token;
-    // Skipped field _i . lifetime;
+    if let Some(ref mut it) = _i . lifetime { _visitor.visit_lifetime_mut(it) };
     _visitor.visit_mutability_mut(& mut _i . mutbl);
 }
 # [ cfg ( feature = "full" ) ]
@@ -720,7 +724,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_break_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprBreak) {
-    // Skipped field _i . label;
+    if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
     if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(it) };
     // Skipped field _i . break_token;
 }
@@ -753,7 +757,7 @@
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_continue_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprContinue) {
-    // Skipped field _i . label;
+    if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
     // Skipped field _i . continue_token;
 }
 # [ cfg ( feature = "full" ) ]
@@ -767,7 +771,7 @@
     _visitor.visit_pat_mut(& mut _i . pat);
     _visitor.visit_expr_mut(& mut _i . expr);
     _visitor.visit_block_mut(& mut _i . body);
-    // Skipped field _i . label;
+    if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
     // Skipped field _i . for_token;
     // Skipped field _i . colon_token;
     // Skipped field _i . in_token;
@@ -837,7 +841,7 @@
             _visitor.visit_expr_unary_mut(_binding_0);
         }
         Lit(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lit_mut(_binding_0);
         }
         Cast(ref mut _binding_0, ) => {
             _visitor.visit_expr_cast_mut(_binding_0);
@@ -934,7 +938,7 @@
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_loop_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprLoop) {
     _visitor.visit_block_mut(& mut _i . body);
-    // Skipped field _i . label;
+    if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
     // Skipped field _i . loop_token;
     // Skipped field _i . colon_token;
 }
@@ -1023,7 +1027,7 @@
 pub fn visit_expr_while_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprWhile) {
     _visitor.visit_expr_mut(& mut _i . cond);
     _visitor.visit_block_mut(& mut _i . body);
-    // Skipped field _i . label;
+    if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
     // Skipped field _i . colon_token;
     // Skipped field _i . while_token;
 }
@@ -1032,7 +1036,7 @@
     _visitor.visit_pat_mut(& mut _i . pat);
     _visitor.visit_expr_mut(& mut _i . expr);
     _visitor.visit_block_mut(& mut _i . body);
-    // Skipped field _i . label;
+    if let Some(ref mut it) = _i . label { _visitor.visit_lifetime_mut(it) };
     // Skipped field _i . colon_token;
     // Skipped field _i . while_token;
     // Skipped field _i . let_token;
@@ -1150,7 +1154,7 @@
     use ::GenericArgument::*;
     match *_i {
         Lifetime(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lifetime_mut(_binding_0);
         }
         Type(ref mut _binding_0, ) => {
             _visitor.visit_type_mut(_binding_0);
@@ -1187,6 +1191,8 @@
 }
 
 pub fn visit_ident_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Ident) {
+    // Skipped field _i . sym;
+    _visitor.visit_span_mut(& mut _i . span);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_impl_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ImplItem) {
@@ -1491,11 +1497,21 @@
     // Skipped field _i . semi_token;
 }
 
+pub fn visit_lifetime_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Lifetime) {
+    // Skipped field _i . sym;
+    _visitor.visit_span_mut(& mut _i . span);
+}
+
 pub fn visit_lifetime_def_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut LifetimeDef) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
-    // Skipped field _i . lifetime;
+    _visitor.visit_lifetime_mut(& mut _i . lifetime);
     // Skipped field _i . colon_token;
-    // Skipped field _i . bounds;
+    for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
+}
+
+pub fn visit_lit_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Lit) {
+    // Skipped field _i . value;
+    _visitor.visit_span_mut(& mut _i . span);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_local_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut Local) {
@@ -1562,7 +1578,7 @@
 pub fn visit_meta_name_value_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MetaNameValue) {
     _visitor.visit_ident_mut(& mut _i . ident);
     // Skipped field _i . eq_token;
-    // Skipped field _i . lit;
+    _visitor.visit_lit_mut(& mut _i . lit);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_method_sig_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MethodSig) {
@@ -1595,7 +1611,7 @@
             _visitor.visit_meta_item_mut(_binding_0);
         }
         Literal(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lit_mut(_binding_0);
         }
     }
 }
@@ -1960,7 +1976,7 @@
             _visitor.visit_trait_bound_modifier_mut(_binding_1);
         }
         Region(ref mut _binding_0, ) => {
-            // Skipped field _binding_0;
+            _visitor.visit_lifetime_mut(_binding_0);
         }
     }
 }
@@ -1983,7 +1999,7 @@
 
 pub fn visit_type_reference_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeReference) {
     // Skipped field _i . and_token;
-    // Skipped field _i . lifetime;
+    if let Some(ref mut it) = _i . lifetime { _visitor.visit_lifetime_mut(it) };
     _visitor.visit_mut_type_mut(& mut _i . ty);
 }
 
@@ -2151,8 +2167,8 @@
 }
 
 pub fn visit_where_region_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereRegionPredicate) {
-    // Skipped field _i . lifetime;
+    _visitor.visit_lifetime_mut(& mut _i . lifetime);
     // Skipped field _i . colon_token;
-    // Skipped field _i . bounds;
+    for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
 }
 
diff --git a/syn_codegen/src/main.rs b/syn_codegen/src/main.rs
index eb23678..4533595 100644
--- a/syn_codegen/src/main.rs
+++ b/syn_codegen/src/main.rs
@@ -21,7 +21,7 @@
 extern crate syn;
 
 use quote::{ToTokens, Tokens};
-use syn::{Attribute, DeriveInput, Ident, Item};
+use syn::{Attribute, Body, BodyStruct, DeriveInput, Ident, Item};
 use failure::{err_msg, Error};
 
 use std::io::{Read, Write};
@@ -38,7 +38,9 @@
 
 const IGNORED_MODS: &[&str] = &["fold", "visit", "visit_mut"];
 
-const TERMINAL_TYPES: &[&str] = &["Ident", "Span"];
+const EXTRA_TYPES: &[&str] = &["Ident", "Lifetime", "Lit"];
+
+const TERMINAL_TYPES: &[&str] = &["Span"];
 
 fn path_eq(a: &syn::Path, b: &syn::Path) -> bool {
     if a.global() != b.global() || a.segments.len() != b.segments.len() {
@@ -92,9 +94,9 @@
         syn::parse_file(&src).map_err(|_| format_err!("failed to parse {}", name.display()))?;
 
     // Collect all of the interesting AstItems declared in this file or submodules.
-    'items: for item in &file.items {
-        match *item {
-            Item::Mod(ref item) => {
+    'items: for item in file.items {
+        match item {
+            Item::Mod(item) => {
                 // Don't inspect inline modules.
                 if item.content.is_some() {
                     continue;
@@ -117,7 +119,7 @@
                 let path = parent.join(&format!("{}.rs", item.ident.as_ref()));
                 load_file(path, &features, lookup)?;
             }
-            Item::Macro(ref item) => {
+            Item::Macro(item) => {
                 // Lookip any #[cfg()] attributes directly on the macro
                 // invocation, and add them to the feature set.
                 let features = get_features(&item.attrs, features.clone());
@@ -146,6 +148,26 @@
                     lookup.insert(item.item.ident, item);
                 }
             }
+            Item::Struct(item) => {
+                let ident = item.ident;
+                if EXTRA_TYPES.contains(&ident.as_ref()) {
+                    lookup.insert(ident, AstItem {
+                        item: DeriveInput {
+                            ident: ident,
+                            vis: item.vis,
+                            attrs: item.attrs,
+                            generics: item.generics,
+                            body: Body::Struct(BodyStruct {
+                                data: item.data,
+                                struct_token: item.struct_token,
+                                semi_token: item.semi_token,
+                            }),
+                        },
+                        features: features.clone(),
+                        eos_full: false,
+                    });
+                }
+            }
             _ => {}
         }
     }
