Skip to content

Commit 54c9998

Browse files
bors[bot]Veykril
andauthored
Merge #11232
11232: Filter out macro calls by file id in when building DynMap r=Veykril a=Veykril Co-authored-by: Lukas Wirth <[email protected]>
2 parents 41a0e95 + 6cf0cad commit 54c9998

File tree

1 file changed

+45
-50
lines changed

1 file changed

+45
-50
lines changed

crates/hir_def/src/child_by_source.rs

Lines changed: 45 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,8 @@ impl ChildBySource for TraitId {
3131
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) {
3232
let data = db.trait_data(*self);
3333
// FIXME attribute macros
34-
for (_name, item) in data.items.iter() {
35-
match *item {
36-
AssocItemId::FunctionId(func) => {
37-
let loc = func.lookup(db);
38-
if loc.id.file_id() == file_id {
39-
let src = loc.source(db);
40-
res[keys::FUNCTION].insert(src, func)
41-
}
42-
}
43-
AssocItemId::ConstId(konst) => {
44-
let loc = konst.lookup(db);
45-
if loc.id.file_id() == file_id {
46-
let src = loc.source(db);
47-
res[keys::CONST].insert(src, konst)
48-
}
49-
}
50-
AssocItemId::TypeAliasId(ty) => {
51-
let loc = ty.lookup(db);
52-
if loc.id.file_id() == file_id {
53-
let src = loc.source(db);
54-
res[keys::TYPE_ALIAS].insert(src, ty)
55-
}
56-
}
57-
}
34+
for &(_, item) in data.items.iter() {
35+
child_by_source_assoc_items(db, res, file_id, item);
5836
}
5937
}
6038
}
@@ -64,28 +42,37 @@ impl ChildBySource for ImplId {
6442
let data = db.impl_data(*self);
6543
// FIXME attribute macros
6644
for &item in data.items.iter() {
67-
match item {
68-
AssocItemId::FunctionId(func) => {
69-
let loc = func.lookup(db);
70-
if loc.id.file_id() == file_id {
71-
let src = loc.source(db);
72-
res[keys::FUNCTION].insert(src, func)
73-
}
74-
}
75-
AssocItemId::ConstId(konst) => {
76-
let loc = konst.lookup(db);
77-
if loc.id.file_id() == file_id {
78-
let src = loc.source(db);
79-
res[keys::CONST].insert(src, konst)
80-
}
81-
}
82-
AssocItemId::TypeAliasId(ty) => {
83-
let loc = ty.lookup(db);
84-
if loc.id.file_id() == file_id {
85-
let src = loc.source(db);
86-
res[keys::TYPE_ALIAS].insert(src, ty)
87-
}
88-
}
45+
child_by_source_assoc_items(db, res, file_id, item);
46+
}
47+
}
48+
}
49+
50+
fn child_by_source_assoc_items(
51+
db: &dyn DefDatabase,
52+
res: &mut DynMap,
53+
file_id: HirFileId,
54+
item: AssocItemId,
55+
) {
56+
match item {
57+
AssocItemId::FunctionId(func) => {
58+
let loc = func.lookup(db);
59+
if loc.id.file_id() == file_id {
60+
let src = loc.source(db);
61+
res[keys::FUNCTION].insert(src, func)
62+
}
63+
}
64+
AssocItemId::ConstId(konst) => {
65+
let loc = konst.lookup(db);
66+
if loc.id.file_id() == file_id {
67+
let src = loc.source(db);
68+
res[keys::CONST].insert(src, konst)
69+
}
70+
}
71+
AssocItemId::TypeAliasId(ty) => {
72+
let loc = ty.lookup(db);
73+
if loc.id.file_id() == file_id {
74+
let src = loc.source(db);
75+
res[keys::TYPE_ALIAS].insert(src, ty)
8976
}
9077
}
9178
}
@@ -114,15 +101,23 @@ impl ChildBySource for ItemScope {
114101
}
115102
});
116103
self.unnamed_consts().for_each(|konst| {
117-
let src = konst.lookup(db).source(db);
118-
res[keys::CONST].insert(src, konst);
104+
let loc = konst.lookup(db);
105+
if loc.id.file_id() == file_id {
106+
let src = loc.source(db);
107+
res[keys::CONST].insert(src, konst);
108+
}
119109
});
120110
self.impls().for_each(|imp| add_impl(db, file_id, res, imp));
121111
self.attr_macro_invocs().for_each(|(ast_id, call_id)| {
122-
let item = ast_id.with_value(ast_id.to_node(db.upcast()));
123-
res[keys::ATTR_MACRO_CALL].insert(item, call_id);
112+
if ast_id.file_id == file_id {
113+
let item = ast_id.with_value(ast_id.to_node(db.upcast()));
114+
res[keys::ATTR_MACRO_CALL].insert(item, call_id);
115+
}
124116
});
125117
self.derive_macro_invocs().for_each(|(ast_id, calls)| {
118+
if ast_id.file_id != file_id {
119+
return;
120+
}
126121
let adt = ast_id.to_node(db.upcast());
127122
for (attr_id, calls) in calls {
128123
if let Some(Either::Right(attr)) =

0 commit comments

Comments
 (0)