Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/replace_let_with_if_let.rs')
-rw-r--r--crates/ide-assists/src/handlers/replace_let_with_if_let.rs35
1 files changed, 31 insertions, 4 deletions
diff --git a/crates/ide-assists/src/handlers/replace_let_with_if_let.rs b/crates/ide-assists/src/handlers/replace_let_with_if_let.rs
index b95e9b52b0..6ff5f0bbd3 100644
--- a/crates/ide-assists/src/handlers/replace_let_with_if_let.rs
+++ b/crates/ide-assists/src/handlers/replace_let_with_if_let.rs
@@ -1,7 +1,11 @@
use ide_db::ty_filter::TryEnum;
use syntax::{
AstNode, T,
- ast::{self, edit::IndentLevel, edit_in_place::Indent, syntax_factory::SyntaxFactory},
+ ast::{
+ self,
+ edit::{AstNodeEdit, IndentLevel},
+ syntax_factory::SyntaxFactory,
+ },
};
use crate::{AssistContext, AssistId, Assists};
@@ -64,7 +68,7 @@ pub(crate) fn replace_let_with_if_let(acc: &mut Assists, ctx: &AssistContext<'_>
if let_expr_needs_paren(&init) { make.expr_paren(init).into() } else { init };
let block = make.block_expr([], None);
- block.indent(IndentLevel::from_node(let_stmt.syntax()));
+ let block = block.indent(IndentLevel::from_node(let_stmt.syntax()));
let if_expr = make.expr_if(
make.expr_let(pat, init_expr).into(),
block,
@@ -82,8 +86,8 @@ pub(crate) fn replace_let_with_if_let(acc: &mut Assists, ctx: &AssistContext<'_>
}
fn let_expr_needs_paren(expr: &ast::Expr) -> bool {
- let fake_expr_let =
- ast::make::expr_let(ast::make::tuple_pat(None).into(), ast::make::ext::expr_unit());
+ let make = SyntaxFactory::without_mappings();
+ let fake_expr_let = make.expr_let(make.tuple_pat(None).into(), make.expr_unit());
let Some(fake_expr) = fake_expr_let.expr() else {
stdx::never!();
return false;
@@ -98,6 +102,29 @@ mod tests {
use super::*;
#[test]
+ fn replace_let_try_enum_ref() {
+ check_assist(
+ replace_let_with_if_let,
+ r"
+//- minicore: option
+fn main(action: Action) {
+ $0let x = compute();
+}
+
+fn compute() -> &'static Option<i32> { &None }
+ ",
+ r"
+fn main(action: Action) {
+ if let Some(x) = compute() {
+ }
+}
+
+fn compute() -> &'static Option<i32> { &None }
+ ",
+ )
+ }
+
+ #[test]
fn replace_let_unknown_enum() {
check_assist(
replace_let_with_if_let,