Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/source_analyzer.rs')
-rw-r--r--crates/hir/src/source_analyzer.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index d57a73ade3..1eb51b20c3 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -35,6 +35,7 @@ use hir_ty::{
method_resolution, Adjust, Adjustment, AutoBorrow, InferenceResult, Interner, Substitution,
TyExt, TyKind, TyLoweringContext,
};
+use itertools::Itertools;
use smallvec::SmallVec;
use syntax::{
ast::{self, AstNode},
@@ -487,10 +488,16 @@ impl SourceAnalyzer {
{
// FIXME: Multiple derives can have the same helper
let name_ref = name_ref.as_name();
- if let Some(&(_, derive, _)) =
- helpers.iter().find(|(name, ..)| *name == name_ref)
+ for (macro_id, mut helpers) in
+ helpers.iter().group_by(|(_, macro_id, ..)| macro_id).into_iter()
{
- return Some(PathResolution::DeriveHelper(DeriveHelper { derive }));
+ if let Some(idx) = helpers.position(|(name, ..)| *name == name_ref)
+ {
+ return Some(PathResolution::DeriveHelper(DeriveHelper {
+ derive: *macro_id,
+ idx,
+ }));
+ }
}
}
}