Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_def/src/child_by_source.rs')
-rw-r--r--crates/hir_def/src/child_by_source.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/crates/hir_def/src/child_by_source.rs b/crates/hir_def/src/child_by_source.rs
index feb6a88060..e4580a0ca3 100644
--- a/crates/hir_def/src/child_by_source.rs
+++ b/crates/hir_def/src/child_by_source.rs
@@ -6,6 +6,7 @@
use either::Either;
use hir_expand::HirFileId;
+use itertools::Itertools;
use syntax::ast::AttrsOwner;
use crate::{
@@ -109,10 +110,13 @@ impl ChildBySource for ItemScope {
let item = ast_id.with_value(ast_id.to_node(db.upcast()));
res[keys::ATTR_MACRO].insert(item, call_id);
});
- self.derive_macro_invocs().for_each(|(ast_id, (attr_id, call_id))| {
+ self.derive_macro_invocs().for_each(|(ast_id, calls)| {
let item = ast_id.to_node(db.upcast());
- if let Some(attr) = item.attrs().nth(attr_id.ast_index as usize) {
- res[keys::DERIVE_MACRO].insert(ast_id.with_value(attr), call_id);
+ let grouped = calls.iter().copied().into_group_map();
+ for (attr_id, calls) in grouped {
+ if let Some(attr) = item.attrs().nth(attr_id.ast_index as usize) {
+ res[keys::DERIVE_MACRO].insert(ast_id.with_value(attr), calls.into());
+ }
}
});