Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_mut_trait_impl.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_mut_trait_impl.rs35
1 files changed, 18 insertions, 17 deletions
diff --git a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
index 31e49c8ce4..acf0819222 100644
--- a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
+++ b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
@@ -67,10 +67,9 @@ pub(crate) fn generate_mut_trait_impl(acc: &mut Assists, ctx: &AssistContext<'_>
format!("Generate `{trait_new}` impl from this `{trait_name}` trait"),
target,
|edit| {
- let (mut editor, impl_clone) = SyntaxEditor::with_ast_node(&impl_def.reset_indent());
- let factory = SyntaxFactory::without_mappings();
+ let (editor, impl_clone) = SyntaxEditor::with_ast_node(&impl_def.reset_indent());
- apply_generate_mut_impl(&mut editor, &factory, &impl_clone, trait_new);
+ apply_generate_mut_impl(&editor, &impl_clone, trait_new);
let new_root = editor.finish();
let new_root = new_root.new_root();
@@ -79,12 +78,13 @@ pub(crate) fn generate_mut_trait_impl(acc: &mut Assists, ctx: &AssistContext<'_>
let new_impl = new_impl.indent(indent);
- let mut editor = edit.make_editor(impl_def.syntax());
+ let editor = edit.make_editor(impl_def.syntax());
+ let make = editor.make();
editor.insert_all(
Position::before(impl_def.syntax()),
vec![
new_impl.syntax().syntax_element(),
- factory.whitespace(&format!("\n\n{indent}")).syntax_element(),
+ make.whitespace(&format!("\n\n{indent}")).syntax_element(),
],
);
@@ -98,7 +98,7 @@ pub(crate) fn generate_mut_trait_impl(acc: &mut Assists, ctx: &AssistContext<'_>
)
}
-fn delete_with_trivia(editor: &mut SyntaxEditor, node: &SyntaxNode) {
+fn delete_with_trivia(editor: &SyntaxEditor, node: &SyntaxNode) {
let mut end: SyntaxElement = node.clone().into();
if let Some(next) = node.next_sibling_or_token()
@@ -112,23 +112,23 @@ fn delete_with_trivia(editor: &mut SyntaxEditor, node: &SyntaxNode) {
}
fn apply_generate_mut_impl(
- editor: &mut SyntaxEditor,
- factory: &SyntaxFactory,
+ editor: &SyntaxEditor,
impl_def: &ast::Impl,
trait_new: &str,
) -> Option<()> {
+ let make = editor.make();
let path =
impl_def.trait_().and_then(|t| t.syntax().descendants().find_map(ast::Path::cast))?;
let seg = path.segment()?;
let name_ref = seg.name_ref()?;
- let new_name_ref = factory.name_ref(trait_new);
+ let new_name_ref = make.name_ref(trait_new);
editor.replace(name_ref.syntax(), new_name_ref.syntax());
if let Some((name, new_name)) =
impl_def.syntax().descendants().filter_map(ast::Name::cast).find_map(process_method_name)
{
- let new_name_node = factory.name(new_name);
+ let new_name_node = make.name(new_name);
editor.replace(name.syntax(), new_name_node.syntax());
}
@@ -137,14 +137,14 @@ fn apply_generate_mut_impl(
}
if let Some(self_param) = impl_def.syntax().descendants().find_map(ast::SelfParam::cast) {
- let mut_self = factory.mut_self_param();
+ let mut_self = make.mut_self_param();
editor.replace(self_param.syntax(), mut_self.syntax());
}
if let Some(ret_type) = impl_def.syntax().descendants().find_map(ast::RetType::cast)
- && let Some(new_ty) = process_ret_type(factory, &ret_type)
+ && let Some(new_ty) = process_ret_type(make, &ret_type)
{
- let new_ret = factory.ret_type(new_ty);
+ let new_ret = make.ret_type(new_ty);
editor.replace(ret_type.syntax(), new_ret.syntax())
}
@@ -154,13 +154,14 @@ fn apply_generate_mut_impl(
_ => None,
})
}) {
- process_ref_mut(editor, factory, &fn_);
+ process_ref_mut(editor, &fn_);
}
Some(())
}
-fn process_ref_mut(editor: &mut SyntaxEditor, factory: &SyntaxFactory, fn_: &ast::Fn) {
+fn process_ref_mut(editor: &SyntaxEditor, fn_: &ast::Fn) {
+ let make = editor.make();
let Some(expr) = fn_.body().and_then(|b| b.tail_expr()) else { return };
let ast::Expr::RefExpr(ref_expr) = expr else { return };
@@ -171,8 +172,8 @@ fn process_ref_mut(editor: &mut SyntaxEditor, factory: &SyntaxFactory, fn_: &ast
let Some(amp) = ref_expr.amp_token() else { return };
- let mut_kw = factory.token(T![mut]);
- let space = factory.whitespace(" ");
+ let mut_kw = make.token(T![mut]);
+ let space = make.whitespace(" ");
editor.insert(Position::after(amp.clone()), space.syntax_element());
editor.insert(Position::after(amp), mut_kw.syntax_element());