diff --git a/crates/ide_assists/src/handlers/extract_function.rs b/crates/ide_assists/src/handlers/extract_function.rs index cfa4343f7c5..5452d091779 100644 --- a/crates/ide_assists/src/handlers/extract_function.rs +++ b/crates/ide_assists/src/handlers/extract_function.rs @@ -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