self.krate
}
+ pub(crate) fn block_id(&self) -> Option<BlockId> {
+ self.block.as_ref().map(|block| block.block)
+ }
+
pub(crate) fn prelude(&self) -> Option<ModuleId> {
self.prelude
}
// glob import from same crate => we do an initial
// import, and then need to propagate any further
// additions
- let scope = &self.def_map[m.local_id].scope;
+ let def_map;
+ let scope = if m.block == self.def_map.block_id() {
+ &self.def_map[m.local_id].scope
+ } else {
+ def_map = m.def_map(self.db);
+ &def_map[m.local_id].scope
+ };
// Module scoped macros is included
let items = scope
);
}
+ let def_map;
+ let module_data = if module.block == self.block_id() {
+ &self[module.local_id]
+ } else {
+ def_map = module.def_map(db);
+ &def_map[module.local_id]
+ };
+
// Since it is a qualified path here, it should not contains legacy macros
- self[module.local_id].scope.get(&segment)
+ module_data.scope.get(&segment)
}
ModuleDefId::AdtId(AdtId::EnumId(e)) => {
// enum variant