diff options
| author | Jake Heinz <jh@discordapp.com> | 2023-04-04 06:57:02 +0000 |
|---|---|---|
| committer | Jake Heinz <jh@discordapp.com> | 2023-04-04 06:57:02 +0000 |
| commit | f6b0c19c56e4e046fa3dfb29f22bfd49b98ca338 (patch) | |
| tree | 2b55338d9e53ebaa1ad714b411a4fff295097df3 | |
| parent | 50b427c0d14aa20a4fb2e5422655bb8b790b4133 (diff) | |
| download | rust-f6b0c19c56e4e046fa3dfb29f22bfd49b98ca338.tar.gz rust-f6b0c19c56e4e046fa3dfb29f22bfd49b98ca338.zip | |
dedupe by name
| -rw-r--r-- | crates/ide-assists/src/handlers/generate_delegate_methods.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/generate_delegate_methods.rs b/crates/ide-assists/src/handlers/generate_delegate_methods.rs index fde75e8d7df..aecb3826e47 100644 --- a/crates/ide-assists/src/handlers/generate_delegate_methods.rs +++ b/crates/ide-assists/src/handlers/generate_delegate_methods.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use hir::{self, HasCrate, HasSource, HasVisibility}; use syntax::ast::{self, make, AstNode, HasGenericParams, HasName, HasVisibility as _}; @@ -64,12 +66,16 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<' let sema_field_ty = ctx.sema.resolve_type(&field_ty)?; let mut methods = vec![]; + let mut seen_names = HashSet::new(); for ty in sema_field_ty.autoderef(ctx.db()) { let krate = ty.krate(ctx.db()); ty.iterate_assoc_items(ctx.db(), krate, |item| { if let hir::AssocItem::Function(f) = item { - if f.self_param(ctx.db()).is_some() && f.is_visible_from(ctx.db(), current_module) { + if f.self_param(ctx.db()).is_some() + && f.is_visible_from(ctx.db(), current_module) + && seen_names.insert(f.name(ctx.db())) + { methods.push(f) } } |
