|
1 |
| -use std::iter::once; |
2 |
| - |
3 | 1 | use ide_db::ty_filter::TryEnum;
|
4 | 2 | use syntax::{
|
5 |
| - ast::{ |
6 |
| - self, |
7 |
| - edit::{AstNodeEdit, IndentLevel}, |
8 |
| - make, |
9 |
| - }, |
| 3 | + ast::{self, edit::IndentLevel, edit_in_place::Indent, syntax_factory::SyntaxFactory}, |
10 | 4 | AstNode, T,
|
11 | 5 | };
|
12 | 6 |
|
@@ -47,25 +41,28 @@ pub(crate) fn replace_let_with_if_let(acc: &mut Assists, ctx: &AssistContext<'_>
|
47 | 41 | AssistId("replace_let_with_if_let", AssistKind::RefactorRewrite),
|
48 | 42 | "Replace let with if let",
|
49 | 43 | target,
|
50 |
| - |edit| { |
| 44 | + |builder| { |
| 45 | + let mut editor = builder.make_editor(let_stmt.syntax()); |
| 46 | + let make = SyntaxFactory::new(); |
51 | 47 | let ty = ctx.sema.type_of_expr(&init);
|
52 | 48 | let happy_variant = ty
|
53 | 49 | .and_then(|ty| TryEnum::from_ty(&ctx.sema, &ty.adjusted()))
|
54 | 50 | .map(|it| it.happy_case());
|
55 | 51 | let pat = match happy_variant {
|
56 | 52 | None => original_pat,
|
57 | 53 | Some(var_name) => {
|
58 |
| - make::tuple_struct_pat(make::ext::ident_path(var_name), once(original_pat)) |
59 |
| - .into() |
| 54 | + make.tuple_struct_pat(make.ident_path(var_name), [original_pat]).into() |
60 | 55 | }
|
61 | 56 | };
|
62 | 57 |
|
63 |
| - let block = |
64 |
| - make::ext::empty_block_expr().indent(IndentLevel::from_node(let_stmt.syntax())); |
65 |
| - let if_ = make::expr_if(make::expr_let(pat, init).into(), block, None); |
66 |
| - let stmt = make::expr_stmt(if_.into()); |
| 58 | + let block = make.block_expr([], None); |
| 59 | + block.indent(IndentLevel::from_node(let_stmt.syntax())); |
| 60 | + let if_expr = make.expr_if(make.expr_let(pat, init).into(), block, None); |
| 61 | + let if_stmt = make.expr_stmt(if_expr.into()); |
67 | 62 |
|
68 |
| - edit.replace_ast(ast::Stmt::from(let_stmt), ast::Stmt::from(stmt)); |
| 63 | + editor.replace(let_stmt.syntax(), if_stmt.syntax()); |
| 64 | + editor.add_mappings(make.finish_with_mappings()); |
| 65 | + builder.add_file_edits(ctx.file_id(), editor); |
69 | 66 | },
|
70 | 67 | )
|
71 | 68 | }
|
|
0 commit comments