]> git.lizzy.rs Git - rust.git/commitdiff
simplified tail_expr
authorJeroen Vannevel <jer_vannevel@outlook.com>
Sat, 22 Jan 2022 11:18:17 +0000 (11:18 +0000)
committerJeroen Vannevel <jer_vannevel@outlook.com>
Sat, 22 Jan 2022 12:08:32 +0000 (12:08 +0000)
crates/ide_assists/src/handlers/extract_function.rs

index cfa4343f7c5553f9242ec449db6618d087e2c319..5452d09177927885b503173026da943576bb4eac 100644 (file)
@@ -1476,25 +1476,21 @@ fn make_body(
                 })
                 .collect();
 
-            let mut tail_expr = match elements.pop() {
+            let mut tail_expr = match &elements.last() {
                 Some(element) => match element {
-                    syntax::NodeOrToken::Node(node) => {
-                        ast::Expr::cast(node.clone()).or_else(|| {
-                            elements.push(syntax::NodeOrToken::Node(node));
-                            None
-                        })
-                    }
-                    syntax::NodeOrToken::Token(token) if token.kind() == COMMENT => {
-                        elements.push(syntax::NodeOrToken::Token(token));
-                        None
+                    syntax::NodeOrToken::Node(node) if ast::Expr::can_cast(node.kind()) => {
+                        ast::Expr::cast(node.clone())
                     }
                     _ => None,
                 },
                 None => None,
             };
 
-            if tail_expr.is_none() {
-                match fun.outliving_locals.as_slice() {
+            match tail_expr {
+                Some(_) => {
+                    elements.pop();
+                }
+                None => match fun.outliving_locals.as_slice() {
                     [] => {}
                     [var] => {
                         tail_expr = Some(path_expr_from_local(ctx, var.local));
@@ -1504,8 +1500,8 @@ fn make_body(
                         let expr = make::expr_tuple(exprs);
                         tail_expr = Some(expr);
                     }
-                }
-            }
+                },
+            };
 
             let body_indent = IndentLevel(1);
             let elements: Vec<SyntaxElement> = elements