Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/inline_call.rs31
-rw-r--r--crates/ide-assists/src/handlers/inline_local_variable.rs21
2 files changed, 49 insertions, 3 deletions
diff --git a/crates/ide-assists/src/handlers/inline_call.rs b/crates/ide-assists/src/handlers/inline_call.rs
index ffab58509b..a80c1e2394 100644
--- a/crates/ide-assists/src/handlers/inline_call.rs
+++ b/crates/ide-assists/src/handlers/inline_call.rs
@@ -481,8 +481,12 @@ fn inline(
};
body.reindent_to(original_indentation);
+ let no_stmts = body.statements().next().is_none();
match body.tail_expr() {
- Some(expr) if !is_async_fn && body.statements().next().is_none() => expr,
+ Some(expr) if matches!(expr, ast::Expr::ClosureExpr(_)) && no_stmts => {
+ make::expr_paren(expr).clone_for_update()
+ }
+ Some(expr) if !is_async_fn && no_stmts => expr,
_ => match node
.syntax()
.parent()
@@ -1474,4 +1478,29 @@ fn main() {
"#,
);
}
+
+ #[test]
+ fn inline_call_closure_body() {
+ check_assist(
+ inline_call,
+ r#"
+fn f() -> impl Fn() -> i32 {
+ || 2
+}
+
+fn main() {
+ let _ = $0f()();
+}
+"#,
+ r#"
+fn f() -> impl Fn() -> i32 {
+ || 2
+}
+
+fn main() {
+ let _ = (|| 2)();
+}
+"#,
+ );
+ }
}
diff --git a/crates/ide-assists/src/handlers/inline_local_variable.rs b/crates/ide-assists/src/handlers/inline_local_variable.rs
index e69d1a2967..49dcde75d2 100644
--- a/crates/ide-assists/src/handlers/inline_local_variable.rs
+++ b/crates/ide-assists/src/handlers/inline_local_variable.rs
@@ -96,8 +96,7 @@ pub(crate) fn inline_local_variable(acc: &mut Assists, ctx: &AssistContext<'_>)
);
let parent = matches!(
usage_parent,
- ast::Expr::CallExpr(_)
- | ast::Expr::TupleExpr(_)
+ ast::Expr::TupleExpr(_)
| ast::Expr::ArrayExpr(_)
| ast::Expr::ParenExpr(_)
| ast::Expr::ForExpr(_)
@@ -952,4 +951,22 @@ fn f() {
"#,
);
}
+
+ #[test]
+ fn test_inline_closure() {
+ check_assist(
+ inline_local_variable,
+ r#"
+fn main() {
+ let $0f = || 2;
+ let _ = f();
+}
+"#,
+ r#"
+fn main() {
+ let _ = (|| 2)();
+}
+"#,
+ );
+ }
}