Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/add_missing_impl_members.rs')
-rw-r--r--crates/ide-assists/src/handlers/add_missing_impl_members.rs23
1 files changed, 13 insertions, 10 deletions
diff --git a/crates/ide-assists/src/handlers/add_missing_impl_members.rs b/crates/ide-assists/src/handlers/add_missing_impl_members.rs
index afdced4215..d1f1f9f123 100644
--- a/crates/ide-assists/src/handlers/add_missing_impl_members.rs
+++ b/crates/ide-assists/src/handlers/add_missing_impl_members.rs
@@ -1,7 +1,7 @@
use hir::HasSource;
use syntax::{
Edition,
- ast::{self, AstNode, make},
+ ast::{self, AstNode, syntax_factory::SyntaxFactory},
syntax_editor::{Position, SyntaxEditor},
};
@@ -148,7 +148,10 @@ fn add_missing_impl_members_inner(
let target = impl_def.syntax().text_range();
acc.add(AssistId::quick_fix(assist_id), label, target, |edit| {
+ let editor = edit.make_editor(impl_def.syntax());
+ let make = editor.make();
let new_item = add_trait_assoc_items_to_impl(
+ make,
&ctx.sema,
ctx.config,
&missing_items,
@@ -164,6 +167,7 @@ fn add_missing_impl_members_inner(
let mut first_new_item = if let DefaultMethods::No = mode
&& let ast::AssocItem::Fn(func) = &first_new_item
&& let Some(body) = try_gen_trait_body(
+ make,
ctx,
func,
trait_ref,
@@ -172,7 +176,7 @@ fn add_missing_impl_members_inner(
)
&& let Some(func_body) = func.body()
{
- let mut func_editor = SyntaxEditor::new(first_new_item.syntax().clone_subtree());
+ let (func_editor, _) = SyntaxEditor::new(first_new_item.syntax().clone());
func_editor.replace(func_body.syntax(), body.syntax());
ast::AssocItem::cast(func_editor.finish().new_root().clone())
} else {
@@ -185,14 +189,13 @@ fn add_missing_impl_members_inner(
.chain(other_items.iter().cloned())
.collect::<Vec<_>>();
- let mut editor = edit.make_editor(impl_def.syntax());
if let Some(assoc_item_list) = impl_def.assoc_item_list() {
- assoc_item_list.add_items(&mut editor, new_assoc_items);
+ assoc_item_list.add_items(&editor, new_assoc_items);
} else {
- let assoc_item_list = make::assoc_item_list(Some(new_assoc_items)).clone_for_update();
+ let assoc_item_list = make.assoc_item_list(new_assoc_items);
editor.insert_all(
Position::after(impl_def.syntax()),
- vec![make::tokens::whitespace(" ").into(), assoc_item_list.syntax().clone().into()],
+ vec![make.whitespace(" ").into(), assoc_item_list.syntax().clone().into()],
);
first_new_item = assoc_item_list.assoc_items().next();
}
@@ -220,18 +223,18 @@ fn add_missing_impl_members_inner(
}
fn try_gen_trait_body(
+ make: &SyntaxFactory,
ctx: &AssistContext<'_>,
func: &ast::Fn,
trait_ref: hir::TraitRef<'_>,
impl_def: &ast::Impl,
edition: Edition,
) -> Option<ast::BlockExpr> {
- let trait_path = make::ext::ident_path(
- &trait_ref.trait_().name(ctx.db()).display(ctx.db(), edition).to_string(),
- );
+ let trait_path =
+ make.ident_path(&trait_ref.trait_().name(ctx.db()).display(ctx.db(), edition).to_string());
let hir_ty = ctx.sema.resolve_type(&impl_def.self_ty()?)?;
let adt = hir_ty.as_adt()?.source(ctx.db())?;
- gen_trait_fn_body(func, &trait_path, &adt.value, Some(trait_ref))
+ gen_trait_fn_body(make, func, &trait_path, &adt.value, Some(trait_ref))
}
#[cfg(test)]