Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs33
1 files changed, 18 insertions, 15 deletions
diff --git a/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs b/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs
index e99dd81066..3902ee170e 100644
--- a/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs
+++ b/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs
@@ -91,6 +91,23 @@ pub(crate) fn generate_blanket_trait_impl(
let trait_gen_args =
traitd.generic_param_list().map(|param_list| param_list.to_generic_args());
+ let body = traitd.assoc_item_list().and_then(|trait_assoc_list| {
+ let items = trait_assoc_list
+ .assoc_items()
+ .filter_map(|item| {
+ let item = match item {
+ ast::AssocItem::Fn(method) if method.body().is_none() => {
+ todo_fn(make, &method, ctx.config).into()
+ }
+ ast::AssocItem::Const(_) | ast::AssocItem::TypeAlias(_) => item,
+ _ => return None,
+ };
+ Some(item.reset_indent().indent(1.into()))
+ })
+ .collect::<Vec<_>>();
+ (!items.is_empty()).then(|| make.assoc_item_list(items))
+ });
+
let impl_ = make.impl_trait(
cfg_attrs(&traitd),
is_unsafe,
@@ -103,23 +120,9 @@ pub(crate) fn generate_blanket_trait_impl(
thisty.into(),
trait_where_clause,
None,
- None,
+ body,
);
- if let Some(trait_assoc_list) = traitd.assoc_item_list() {
- let assoc_item_list = impl_.get_or_create_assoc_item_list_with_editor(&editor);
- for item in trait_assoc_list.assoc_items() {
- let item = match item {
- ast::AssocItem::Fn(method) if method.body().is_none() => {
- todo_fn(make, &method, ctx.config).into()
- }
- ast::AssocItem::Const(_) | ast::AssocItem::TypeAlias(_) => item,
- _ => continue,
- };
- assoc_item_list.add_item(item.reset_indent().indent(1.into()));
- }
- }
-
let impl_ = impl_.indent(indent);
editor.insert_all(