Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs')
| -rw-r--r-- | crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs | 33 |
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( |