|
1 | 1 | use ide_db::syntax_helpers::suggest_name;
|
2 |
| -use syntax::{ |
3 |
| - ast::{self, AstNode, make}, |
4 |
| - ted, |
5 |
| -}; |
| 2 | +use syntax::ast::{self, AstNode, syntax_factory::SyntaxFactory}; |
6 | 3 |
|
7 | 4 | use crate::{AssistContext, AssistId, Assists};
|
8 | 5 |
|
@@ -60,21 +57,24 @@ pub(crate) fn replace_is_method_with_if_let_method(
|
60 | 57 | message,
|
61 | 58 | call_expr.syntax().text_range(),
|
62 | 59 | |edit| {
|
63 |
| - let call_expr = edit.make_mut(call_expr); |
64 |
| - |
65 |
| - let var_pat = make::ident_pat(false, false, make::name(&var_name)); |
66 |
| - let pat = make::tuple_struct_pat(make::ext::ident_path(text), [var_pat.into()]); |
67 |
| - let let_expr = make::expr_let(pat.into(), receiver).clone_for_update(); |
68 |
| - |
69 |
| - if let Some(cap) = ctx.config.snippet_cap { |
70 |
| - if let Some(ast::Pat::TupleStructPat(pat)) = let_expr.pat() { |
71 |
| - if let Some(first_var) = pat.fields().next() { |
72 |
| - edit.add_placeholder_snippet(cap, first_var); |
73 |
| - } |
74 |
| - } |
| 60 | + let make = SyntaxFactory::with_mappings(); |
| 61 | + let mut editor = edit.make_editor(call_expr.syntax()); |
| 62 | + |
| 63 | + let var_pat = make.ident_pat(false, false, make.name(&var_name)); |
| 64 | + let pat = make.tuple_struct_pat(make.ident_path(text), [var_pat.into()]); |
| 65 | + let let_expr = make.expr_let(pat.into(), receiver); |
| 66 | + |
| 67 | + if let Some(cap) = ctx.config.snippet_cap |
| 68 | + && let Some(ast::Pat::TupleStructPat(pat)) = let_expr.pat() |
| 69 | + && let Some(first_var) = pat.fields().next() |
| 70 | + { |
| 71 | + let placeholder = edit.make_placeholder_snippet(cap); |
| 72 | + editor.add_annotation(first_var.syntax(), placeholder); |
75 | 73 | }
|
76 | 74 |
|
77 |
| - ted::replace(call_expr.syntax(), let_expr.syntax()); |
| 75 | + editor.replace(call_expr.syntax(), let_expr.syntax()); |
| 76 | + editor.add_mappings(make.finish_with_mappings()); |
| 77 | + edit.add_file_edits(ctx.vfs_file_id(), editor); |
78 | 78 | },
|
79 | 79 | )
|
80 | 80 | }
|
|
0 commit comments