diff --git a/crates/ide_assists/src/handlers/replace_if_let_with_match.rs b/crates/ide_assists/src/handlers/replace_if_let_with_match.rs index 3a89c2b996c8..22675fbee0f2 100644 --- a/crates/ide_assists/src/handlers/replace_if_let_with_match.rs +++ b/crates/ide_assists/src/handlers/replace_if_let_with_match.rs @@ -210,11 +210,7 @@ pub(crate) fn replace_match_with_if_let(acc: &mut Assists, ctx: &AssistContext) ast::Expr::BlockExpr(block) => block, expr => make::block_expr(iter::empty(), Some(expr)), }; - let else_expr = match else_expr { - ast::Expr::BlockExpr(block) if block.is_empty() => None, - ast::Expr::TupleExpr(tuple) if tuple.fields().next().is_none() => None, - expr => Some(expr), - }; + let else_expr = if is_empty_expr(&else_expr) { None } else { Some(else_expr) }; let if_let_expr = make::expr_if( condition, then_block, @@ -257,7 +253,10 @@ fn pick_pattern_and_expr_order( fn is_empty_expr(expr: &ast::Expr) -> bool { match expr { - ast::Expr::BlockExpr(expr) => expr.is_empty(), + ast::Expr::BlockExpr(expr) => match expr.stmt_list() { + Some(it) => it.statements().next().is_none() && it.tail_expr().is_none(), + None => true, + }, ast::Expr::TupleExpr(expr) => expr.fields().next().is_none(), _ => false, } diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index a07f02e4451c..800befb04bd8 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs @@ -10,10 +10,7 @@ use parser::SyntaxKind; use rowan::{GreenNodeData, GreenTokenData}; use crate::{ - ast::{ - self, support, AstNode, AstToken, HasAttrs, HasGenericParams, HasModuleItem, HasName, - SyntaxNode, - }, + ast::{self, support, AstNode, AstToken, HasAttrs, HasGenericParams, HasName, SyntaxNode}, NodeOrToken, SmolStr, SyntaxElement, SyntaxToken, TokenText, T, }; @@ -54,13 +51,6 @@ impl ast::HasModuleItem for ast::StmtList {} impl ast::BlockExpr { // FIXME: remove all these methods, they belong to ast::StmtList - pub fn items(&self) -> impl Iterator { - self.stmt_list().into_iter().flat_map(|it| it.items()) - } - - pub fn is_empty(&self) -> bool { - self.statements().next().is_none() && self.tail_expr().is_none() - } pub fn statements(&self) -> impl Iterator { self.stmt_list().into_iter().flat_map(|it| it.statements()) }