7518: Use the right `DefMap` when looking up modules r=jonas-schievink a=jonas-schievink

Fixes the bugs encountered in https://github.com/rust-analyzer/rust-analyzer/pull/7506#issuecomment-771417467

bors r+

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
This commit is contained in:
bors[bot] 2021-02-02 11:37:45 +00:00 committed by GitHub
commit 8720f7f146
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 2 deletions

View File

@ -258,6 +258,10 @@ pub(crate) fn krate(&self) -> CrateId {
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
}

View File

@ -592,7 +592,13 @@ fn record_resolved_import(&mut self, directive: &ImportDirective) {
// 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

View File

@ -271,8 +271,16 @@ pub(super) fn resolve_path_fp_with_macro_single(
);
}
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