mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Migrate replace_is_method_with_if_let_method
Assist to use SyntaxFactory
Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>
This commit is contained in:
parent
eaf37e2c98
commit
f6a247dc57
@ -1,8 +1,5 @@
|
|||||||
use ide_db::syntax_helpers::suggest_name;
|
use ide_db::syntax_helpers::suggest_name;
|
||||||
use syntax::{
|
use syntax::ast::{self, AstNode, syntax_factory::SyntaxFactory};
|
||||||
ast::{self, AstNode, make},
|
|
||||||
ted,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{AssistContext, AssistId, Assists};
|
use crate::{AssistContext, AssistId, Assists};
|
||||||
|
|
||||||
@ -60,21 +57,24 @@ pub(crate) fn replace_is_method_with_if_let_method(
|
|||||||
message,
|
message,
|
||||||
call_expr.syntax().text_range(),
|
call_expr.syntax().text_range(),
|
||||||
|edit| {
|
|edit| {
|
||||||
let call_expr = edit.make_mut(call_expr);
|
let make = SyntaxFactory::with_mappings();
|
||||||
|
let mut editor = edit.make_editor(call_expr.syntax());
|
||||||
|
|
||||||
let var_pat = make::ident_pat(false, false, make::name(&var_name));
|
let var_pat = make.ident_pat(false, false, make.name(&var_name));
|
||||||
let pat = make::tuple_struct_pat(make::ext::ident_path(text), [var_pat.into()]);
|
let pat = make.tuple_struct_pat(make.ident_path(text), [var_pat.into()]);
|
||||||
let let_expr = make::expr_let(pat.into(), receiver).clone_for_update();
|
let let_expr = make.expr_let(pat.into(), receiver);
|
||||||
|
|
||||||
if let Some(cap) = ctx.config.snippet_cap {
|
if let Some(cap) = ctx.config.snippet_cap
|
||||||
if let Some(ast::Pat::TupleStructPat(pat)) = let_expr.pat() {
|
&& let Some(ast::Pat::TupleStructPat(pat)) = let_expr.pat()
|
||||||
if let Some(first_var) = pat.fields().next() {
|
&& let Some(first_var) = pat.fields().next()
|
||||||
edit.add_placeholder_snippet(cap, first_var);
|
{
|
||||||
}
|
let placeholder = edit.make_placeholder_snippet(cap);
|
||||||
}
|
editor.add_annotation(first_var.syntax(), placeholder);
|
||||||
}
|
}
|
||||||
|
|
||||||
ted::replace(call_expr.syntax(), let_expr.syntax());
|
editor.replace(call_expr.syntax(), let_expr.syntax());
|
||||||
|
editor.add_mappings(make.finish_with_mappings());
|
||||||
|
edit.add_file_edits(ctx.vfs_file_id(), editor);
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user