Skip to content

Commit c486637

Browse files
committed
Migrate replace_is_method_with_if_let_method to mutable ast
1 parent 3162699 commit c486637

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

crates/ide-assists/src/handlers/replace_is_method_with_if_let_method.rs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use syntax::ast::{self, AstNode};
1+
use syntax::{
2+
ast::{self, make, AstNode},
3+
ted,
4+
};
25

36
use crate::{utils::suggest_name, AssistContext, AssistId, AssistKind, Assists};
47

@@ -42,19 +45,34 @@ pub(crate) fn replace_is_method_with_if_let_method(
4245
suggest_name::for_variable(&receiver, &ctx.sema)
4346
};
4447

45-
let target = call_expr.syntax().text_range();
46-
4748
let (assist_id, message, text) = if name_ref.text() == "is_some" {
4849
("replace_is_some_with_if_let_some", "Replace `is_some` with `if let Some`", "Some")
4950
} else {
5051
("replace_is_ok_with_if_let_ok", "Replace `is_ok` with `if let Ok`", "Ok")
5152
};
5253

53-
acc.add(AssistId(assist_id, AssistKind::RefactorRewrite), message, target, |edit| {
54-
let var_name = format!("${{0:{}}}", var_name);
55-
let replacement = format!("let {}({}) = {}", text, var_name, receiver);
56-
edit.replace(target, replacement);
57-
})
54+
acc.add(
55+
AssistId(assist_id, AssistKind::RefactorRewrite),
56+
message,
57+
call_expr.syntax().text_range(),
58+
|edit| {
59+
let call_expr = edit.make_mut(call_expr);
60+
61+
let var_pat = make::ident_pat(false, false, make::name(&var_name));
62+
let pat = make::tuple_struct_pat(make::ext::ident_path(text), [var_pat.into()]);
63+
let let_expr = make::expr_let(pat.into(), receiver).clone_for_update();
64+
65+
if let Some(cap) = ctx.config.snippet_cap {
66+
if let Some(ast::Pat::TupleStructPat(pat)) = let_expr.pat() {
67+
if let Some(first_var) = pat.fields().next() {
68+
edit.add_placeholder_snippet(cap, first_var);
69+
}
70+
}
71+
}
72+
73+
ted::replace(call_expr.syntax(), let_expr.syntax());
74+
},
75+
)
5876
}
5977
_ => return None,
6078
}

0 commit comments

Comments
 (0)