diff --git a/src/expr.rs b/src/expr.rs
index 780d090..165b692 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -296,7 +296,7 @@
         }),
 
         /// A `return`, with an optional value to be returned
-        pub Ret(ExprRet #full {
+        pub Return(ExprReturn #full {
             pub attrs: Vec<Attribute>,
             pub return_token: Token![return],
             pub expr: Option<Box<Expr>>,
@@ -414,7 +414,7 @@
             Expr::AddrOf(ExprAddrOf { ref mut attrs, .. }) |
             Expr::Break(ExprBreak { ref mut attrs, .. }) |
             Expr::Continue(ExprContinue { ref mut attrs, .. }) |
-            Expr::Ret(ExprRet { ref mut attrs, .. }) |
+            Expr::Return(ExprReturn { ref mut attrs, .. }) |
             Expr::Macro(ExprMacro { ref mut attrs, .. }) |
             Expr::Struct(ExprStruct { ref mut attrs, .. }) |
             Expr::Repeat(ExprRepeat { ref mut attrs, .. }) |
@@ -1759,7 +1759,7 @@
         //
         // if return { println!("A") } {} // Prints "A"
         ret_value: option!(ambiguous_expr!(allow_struct)) >>
-        (ExprRet {
+        (ExprReturn {
             attrs: Vec::new(),
             expr: ret_value.map(Box::new),
             return_token: return_,
@@ -2850,7 +2850,7 @@
     }
 
     #[cfg(feature = "full")]
-    impl ToTokens for ExprRet {
+    impl ToTokens for ExprReturn {
         fn to_tokens(&self, tokens: &mut Tokens) {
             tokens.append_all(self.attrs.outer());
             self.return_token.to_tokens(tokens);
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index cdc1a47..c6d863f 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -148,7 +148,7 @@
 # [ cfg ( feature = "full" ) ]
 fn fold_expr_repeat(&mut self, i: ExprRepeat) -> ExprRepeat { fold_expr_repeat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_expr_ret(&mut self, i: ExprRet) -> ExprRet { fold_expr_ret(self, i) }
+fn fold_expr_return(&mut self, i: ExprReturn) -> ExprReturn { fold_expr_return(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_expr_struct(&mut self, i: ExprStruct) -> ExprStruct { fold_expr_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -947,9 +947,9 @@
                 full!(_visitor.fold_expr_continue(_binding_0)),
             )
         }
-        Ret(_binding_0, ) => {
-            Ret (
-                full!(_visitor.fold_expr_ret(_binding_0)),
+        Return(_binding_0, ) => {
+            Return (
+                full!(_visitor.fold_expr_return(_binding_0)),
             )
         }
         Macro(_binding_0, ) => {
@@ -1267,8 +1267,8 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn fold_expr_ret<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprRet) -> ExprRet {
-    ExprRet {
+pub fn fold_expr_return<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprReturn) -> ExprReturn {
+    ExprReturn {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         return_token: Token ! [ return ](tokens_helper(_visitor, &(_i . return_token).0)),
         expr: (_i . expr).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index c9d7649..8e67de8 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -144,7 +144,7 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_repeat(&mut self, i: &'ast ExprRepeat) { visit_expr_repeat(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_ret(&mut self, i: &'ast ExprRet) { visit_expr_ret(self, i) }
+fn visit_expr_return(&mut self, i: &'ast ExprReturn) { visit_expr_return(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_struct(&mut self, i: &'ast ExprStruct) { visit_expr_struct(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -775,8 +775,8 @@
         Continue(ref _binding_0, ) => {
             full!(_visitor.visit_expr_continue(_binding_0));
         }
-        Ret(ref _binding_0, ) => {
-            full!(_visitor.visit_expr_ret(_binding_0));
+        Return(ref _binding_0, ) => {
+            full!(_visitor.visit_expr_return(_binding_0));
         }
         Macro(ref _binding_0, ) => {
             full!(_visitor.visit_expr_macro(_binding_0));
@@ -1019,7 +1019,7 @@
     _visitor.visit_expr(& * _i . amt);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn visit_expr_ret<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprRet) {
+pub fn visit_expr_return<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprReturn) {
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . return_token).0);
     if let Some(ref it) = _i . expr { _visitor.visit_expr(& * * it) };
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index c732b4c..ddab207 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -144,7 +144,7 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_repeat_mut(&mut self, i: &mut ExprRepeat) { visit_expr_repeat_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_expr_ret_mut(&mut self, i: &mut ExprRet) { visit_expr_ret_mut(self, i) }
+fn visit_expr_return_mut(&mut self, i: &mut ExprReturn) { visit_expr_return_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_expr_struct_mut(&mut self, i: &mut ExprStruct) { visit_expr_struct_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
@@ -775,8 +775,8 @@
         Continue(ref mut _binding_0, ) => {
             full!(_visitor.visit_expr_continue_mut(_binding_0));
         }
-        Ret(ref mut _binding_0, ) => {
-            full!(_visitor.visit_expr_ret_mut(_binding_0));
+        Return(ref mut _binding_0, ) => {
+            full!(_visitor.visit_expr_return_mut(_binding_0));
         }
         Macro(ref mut _binding_0, ) => {
             full!(_visitor.visit_expr_macro_mut(_binding_0));
@@ -1019,7 +1019,7 @@
     _visitor.visit_expr_mut(& mut * _i . amt);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn visit_expr_ret_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprRet) {
+pub fn visit_expr_return_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprReturn) {
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . return_token).0);
     if let Some(ref mut it) = _i . expr { _visitor.visit_expr_mut(& mut * * it) };
diff --git a/src/lib.rs b/src/lib.rs
index ef57cf5..dbb51c9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -37,7 +37,7 @@
                ExprBox, ExprBreak, ExprCall, ExprCast, ExprCatch, ExprClosure, ExprContinue,
                ExprField, ExprForLoop, ExprGroup, ExprIf, ExprIfLet, ExprInPlace, ExprIndex,
                ExprLit, ExprLoop, ExprMacro, ExprMatch, ExprMethodCall, ExprParen, ExprPath, ExprRange,
-               ExprRepeat, ExprRet, ExprStruct, ExprTry, ExprTuple, ExprType,
+               ExprRepeat, ExprReturn, ExprStruct, ExprTry, ExprTuple, ExprType,
                ExprUnary, ExprUnsafe, ExprWhile, ExprWhileLet, ExprYield};
 
 #[cfg(feature = "full")]
