From 9c74a5b2c02a14a2e2683962fe667f30211ddda0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 2 Oct 2021 15:24:32 +0300 Subject: [PATCH 1/3] minor: reduce duplication --- .../ide_assists/src/handlers/replace_if_let_with_match.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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..019e8b61607f 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, From d5c5b7cd12e6149eb3d9e269a6b7c77fb8d66eaa Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 2 Oct 2021 15:26:02 +0300 Subject: [PATCH 2/3] internal: remove deprecated method --- crates/ide_assists/src/handlers/replace_if_let_with_match.rs | 5 ++++- crates/syntax/src/ast/node_ext.rs | 3 --- 2 files changed, 4 insertions(+), 4 deletions(-) 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 019e8b61607f..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 @@ -253,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..c0352f9b134f 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs @@ -58,9 +58,6 @@ impl ast::BlockExpr { 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()) } From 7dbf24fc7a8f77479780a0da72f9a9bd7668773f Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 2 Oct 2021 15:32:23 +0300 Subject: [PATCH 3/3] minor: dead code --- crates/syntax/src/ast/node_ext.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index c0352f9b134f..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,10 +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 statements(&self) -> impl Iterator { self.stmt_list().into_iter().flat_map(|it| it.statements()) }