Support Expr::Paren and Expr::Group with full feature only
diff --git a/src/expr.rs b/src/expr.rs
index 165b692..9424dee 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -334,7 +334,7 @@
         }),
 
         /// No-op: used solely so we can pretty-print faithfully
-        pub Paren(ExprParen {
+        pub Paren(ExprParen #full {
             pub attrs: Vec<Attribute>,
             pub paren_token: token::Paren,
             pub expr: Box<Expr>,
@@ -345,7 +345,7 @@
         /// A `group` represents a `None`-delimited span in the input
         /// `TokenStream` which affects the precidence of the resulting
         /// expression. They are used for macro hygiene.
-        pub Group(ExprGroup {
+        pub Group(ExprGroup #full {
             pub attrs: Vec<Attribute>,
             pub group_token: token::Group,
             pub expr: Box<Expr>,
@@ -1283,11 +1283,7 @@
 
     #[cfg(not(feature = "full"))]
     named!(atom_expr(_allow_struct: bool, _allow_block: bool) -> Expr, alt!(
-        syn!(ExprGroup) => { Expr::Group } // must be placed first
-        |
-        syn!(ExprLit) => { Expr::Lit } // must be before expr_struct
-        |
-        syn!(ExprParen) => { Expr::Paren } // must be before expr_tup
+        syn!(ExprLit) => { Expr::Lit }
         |
         syn!(ExprPath) => { Expr::Path }
     ));
@@ -1338,6 +1334,7 @@
         ));
     }
 
+    #[cfg(feature = "full")]
     impl Synom for ExprGroup {
         named!(parse -> Self, do_parse!(
             e: grouped!(syn!(Expr)) >>
@@ -1349,6 +1346,7 @@
         ));
     }
 
+    #[cfg(feature = "full")]
     impl Synom for ExprParen {
         named!(parse -> Self, do_parse!(
             e: parens!(syn!(Expr)) >>
@@ -2893,6 +2891,7 @@
         }
     }
 
+    #[cfg(feature = "full")]
     impl ToTokens for ExprGroup {
         fn to_tokens(&self, tokens: &mut Tokens) {
             attrs_to_tokens(&self.attrs, tokens);
@@ -2902,6 +2901,7 @@
         }
     }
 
+    #[cfg(feature = "full")]
     impl ToTokens for ExprParen {
         fn to_tokens(&self, tokens: &mut Tokens) {
             attrs_to_tokens(&self.attrs, tokens);
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index c6d863f..7359457 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -119,7 +119,7 @@
 fn fold_expr_field(&mut self, i: ExprField) -> ExprField { fold_expr_field(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_expr_for_loop(&mut self, i: ExprForLoop) -> ExprForLoop { fold_expr_for_loop(self, i) }
-
+# [ cfg ( feature = "full" ) ]
 fn fold_expr_group(&mut self, i: ExprGroup) -> ExprGroup { fold_expr_group(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_expr_if(&mut self, i: ExprIf) -> ExprIf { fold_expr_if(self, i) }
@@ -139,7 +139,7 @@
 fn fold_expr_match(&mut self, i: ExprMatch) -> ExprMatch { fold_expr_match(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_expr_method_call(&mut self, i: ExprMethodCall) -> ExprMethodCall { fold_expr_method_call(self, i) }
-
+# [ cfg ( feature = "full" ) ]
 fn fold_expr_paren(&mut self, i: ExprParen) -> ExprParen { fold_expr_paren(self, i) }
 
 fn fold_expr_path(&mut self, i: ExprPath) -> ExprPath { fold_expr_path(self, i) }
@@ -969,12 +969,12 @@
         }
         Paren(_binding_0, ) => {
             Paren (
-                _visitor.fold_expr_paren(_binding_0),
+                full!(_visitor.fold_expr_paren(_binding_0)),
             )
         }
         Group(_binding_0, ) => {
             Group (
-                _visitor.fold_expr_group(_binding_0),
+                full!(_visitor.fold_expr_group(_binding_0)),
             )
         }
         Try(_binding_0, ) => {
@@ -1131,7 +1131,7 @@
         body: _visitor.fold_block(_i . body),
     }
 }
-
+# [ cfg ( feature = "full" ) ]
 pub fn fold_expr_group<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprGroup) -> ExprGroup {
     ExprGroup {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
@@ -1231,7 +1231,7 @@
         args: FoldHelper::lift(_i . args, |it| { _visitor.fold_expr(it) }),
     }
 }
-
+# [ cfg ( feature = "full" ) ]
 pub fn fold_expr_paren<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprParen) -> ExprParen {
     ExprParen {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index 8e67de8..b5307dc 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -115,7 +115,7 @@
 fn visit_expr_field(&mut self, i: &'ast ExprField) { visit_expr_field(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_for_loop(&mut self, i: &'ast ExprForLoop) { visit_expr_for_loop(self, i) }
-
+# [ cfg ( feature = "full" ) ]
 fn visit_expr_group(&mut self, i: &'ast ExprGroup) { visit_expr_group(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_if(&mut self, i: &'ast ExprIf) { visit_expr_if(self, i) }
@@ -135,7 +135,7 @@
 fn visit_expr_match(&mut self, i: &'ast ExprMatch) { visit_expr_match(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_method_call(&mut self, i: &'ast ExprMethodCall) { visit_expr_method_call(self, i) }
-
+# [ cfg ( feature = "full" ) ]
 fn visit_expr_paren(&mut self, i: &'ast ExprParen) { visit_expr_paren(self, i) }
 
 fn visit_expr_path(&mut self, i: &'ast ExprPath) { visit_expr_path(self, i) }
@@ -788,10 +788,10 @@
             full!(_visitor.visit_expr_repeat(_binding_0));
         }
         Paren(ref _binding_0, ) => {
-            _visitor.visit_expr_paren(_binding_0);
+            full!(_visitor.visit_expr_paren(_binding_0));
         }
         Group(ref _binding_0, ) => {
-            _visitor.visit_expr_group(_binding_0);
+            full!(_visitor.visit_expr_group(_binding_0));
         }
         Try(ref _binding_0, ) => {
             full!(_visitor.visit_expr_try(_binding_0));
@@ -911,7 +911,7 @@
     _visitor.visit_expr(& * _i . expr);
     _visitor.visit_block(& _i . body);
 }
-
+# [ cfg ( feature = "full" ) ]
 pub fn visit_expr_group<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprGroup) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . group_token).0);
@@ -991,7 +991,7 @@
     tokens_helper(_visitor, &(& _i . paren_token).0);
     for el in & _i . args { let it = el.item(); _visitor.visit_expr(it) };
 }
-
+# [ cfg ( feature = "full" ) ]
 pub fn visit_expr_paren<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprParen) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . paren_token).0);
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index ddab207..9590f2b 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -115,7 +115,7 @@
 fn visit_expr_field_mut(&mut self, i: &mut ExprField) { visit_expr_field_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_for_loop_mut(&mut self, i: &mut ExprForLoop) { visit_expr_for_loop_mut(self, i) }
-
+# [ cfg ( feature = "full" ) ]
 fn visit_expr_group_mut(&mut self, i: &mut ExprGroup) { visit_expr_group_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_if_mut(&mut self, i: &mut ExprIf) { visit_expr_if_mut(self, i) }
@@ -135,7 +135,7 @@
 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) { visit_expr_match_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_method_call_mut(&mut self, i: &mut ExprMethodCall) { visit_expr_method_call_mut(self, i) }
-
+# [ cfg ( feature = "full" ) ]
 fn visit_expr_paren_mut(&mut self, i: &mut ExprParen) { visit_expr_paren_mut(self, i) }
 
 fn visit_expr_path_mut(&mut self, i: &mut ExprPath) { visit_expr_path_mut(self, i) }
@@ -788,10 +788,10 @@
             full!(_visitor.visit_expr_repeat_mut(_binding_0));
         }
         Paren(ref mut _binding_0, ) => {
-            _visitor.visit_expr_paren_mut(_binding_0);
+            full!(_visitor.visit_expr_paren_mut(_binding_0));
         }
         Group(ref mut _binding_0, ) => {
-            _visitor.visit_expr_group_mut(_binding_0);
+            full!(_visitor.visit_expr_group_mut(_binding_0));
         }
         Try(ref mut _binding_0, ) => {
             full!(_visitor.visit_expr_try_mut(_binding_0));
@@ -911,7 +911,7 @@
     _visitor.visit_expr_mut(& mut * _i . expr);
     _visitor.visit_block_mut(& mut _i . body);
 }
-
+# [ cfg ( feature = "full" ) ]
 pub fn visit_expr_group_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprGroup) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . group_token).0);
@@ -991,7 +991,7 @@
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
     for mut el in & mut _i . args { let it = el.item_mut(); _visitor.visit_expr_mut(it) };
 }
-
+# [ cfg ( feature = "full" ) ]
 pub fn visit_expr_paren_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprParen) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . paren_token).0);