From 728d72fbe17abd9e839e9b484078beef99ca0e82 Mon Sep 17 00:00:00 2001 From: Prajwal S N Date: Fri, 11 Apr 2025 02:42:19 +0530 Subject: [PATCH] fix: `make::expr_closure() -> ClosureExpr` Signed-off-by: Prajwal S N --- .../ide-assists/src/handlers/replace_method_eager_lazy.rs | 2 +- crates/syntax/src/ast/make.rs | 5 ++++- crates/syntax/src/ast/syntax_factory/constructors.rs | 6 +----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs b/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs index afac6cd724..07dae634ad 100644 --- a/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs +++ b/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs @@ -79,7 +79,7 @@ fn into_closure(param: &Expr) -> Expr { None } })() - .unwrap_or_else(|| make::expr_closure(None, param.clone())) + .unwrap_or_else(|| make::expr_closure(None, param.clone()).into()) } // Assist: replace_with_eager_method diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs index 0cd503931b..8f37ebce6a 100644 --- a/crates/syntax/src/ast/make.rs +++ b/crates/syntax/src/ast/make.rs @@ -652,7 +652,10 @@ pub fn expr_ref(expr: ast::Expr, exclusive: bool) -> ast::Expr { pub fn expr_reborrow(expr: ast::Expr) -> ast::Expr { expr_from_text(&format!("&mut *{expr}")) } -pub fn expr_closure(pats: impl IntoIterator, expr: ast::Expr) -> ast::Expr { +pub fn expr_closure( + pats: impl IntoIterator, + expr: ast::Expr, +) -> ast::ClosureExpr { let params = pats.into_iter().join(", "); expr_from_text(&format!("|{params}| {expr}")) } diff --git a/crates/syntax/src/ast/syntax_factory/constructors.rs b/crates/syntax/src/ast/syntax_factory/constructors.rs index 7d46a3598d..4c4c3f0d49 100644 --- a/crates/syntax/src/ast/syntax_factory/constructors.rs +++ b/crates/syntax/src/ast/syntax_factory/constructors.rs @@ -476,11 +476,7 @@ impl SyntaxFactory { expr: ast::Expr, ) -> ast::ClosureExpr { let (args, input) = iterator_input(pats); - // FIXME: `make::expr_paren` should return a `ClosureExpr`, not just an `Expr` - let ast::Expr::ClosureExpr(ast) = make::expr_closure(args, expr.clone()).clone_for_update() - else { - unreachable!() - }; + let ast = make::expr_closure(args, expr.clone()).clone_for_update(); if let Some(mut mapping) = self.mappings() { let mut builder = SyntaxMappingBuilder::new(ast.syntax.clone());