Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/semantics/child_by_source.rs')
-rw-r--r--crates/hir/src/semantics/child_by_source.rs13
1 files changed, 7 insertions, 6 deletions
diff --git a/crates/hir/src/semantics/child_by_source.rs b/crates/hir/src/semantics/child_by_source.rs
index 165ac7e4a0..5019a5987e 100644
--- a/crates/hir/src/semantics/child_by_source.rs
+++ b/crates/hir/src/semantics/child_by_source.rs
@@ -5,7 +5,7 @@
//! node for a *child*, and get its hir.
use either::Either;
-use hir_expand::HirFileId;
+use hir_expand::{HirFileId, attrs::collect_attrs};
use span::AstIdNode;
use syntax::{AstPtr, ast};
@@ -94,7 +94,6 @@ impl ChildBySource for ModuleId {
impl ChildBySource for ItemScope {
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) {
- let krate = file_id.krate(db);
self.declarations().for_each(|item| add_module_def(db, res, file_id, item));
self.impls().for_each(|imp| insert_item_loc(db, res, file_id, imp, keys::IMPL));
self.extern_blocks().for_each(|extern_block| {
@@ -124,10 +123,12 @@ impl ChildBySource for ItemScope {
|(ast_id, calls)| {
let adt = ast_id.to_node(db);
calls.for_each(|(attr_id, call_id, calls)| {
- // FIXME: Fix cfg_attr handling.
- let (attr, _, _, _) = attr_id.find_attr_range_with_source(db, krate, &adt);
- res[keys::DERIVE_MACRO_CALL]
- .insert(AstPtr::new(&attr), (attr_id, call_id, calls.into()));
+ if let Some((_, Either::Left(attr))) =
+ collect_attrs(&adt).nth(attr_id.ast_index())
+ {
+ res[keys::DERIVE_MACRO_CALL]
+ .insert(AstPtr::new(&attr), (attr_id, call_id, calls.into()));
+ }
});
},
);