about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJake Heinz <jh@discordapp.com>2023-04-04 06:57:02 +0000
committerJake Heinz <jh@discordapp.com>2023-04-04 06:57:02 +0000
commitf6b0c19c56e4e046fa3dfb29f22bfd49b98ca338 (patch)
tree2b55338d9e53ebaa1ad714b411a4fff295097df3
parent50b427c0d14aa20a4fb2e5422655bb8b790b4133 (diff)
downloadrust-f6b0c19c56e4e046fa3dfb29f22bfd49b98ca338.tar.gz
rust-f6b0c19c56e4e046fa3dfb29f22bfd49b98ca338.zip
dedupe by name
-rw-r--r--crates/ide-assists/src/handlers/generate_delegate_methods.rs8
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)
                 }
             }