diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2021-02-02 12:25:13 +0100 |
|---|---|---|
| committer | Jonas Schievink <jonasschievink@gmail.com> | 2021-02-02 12:36:38 +0100 |
| commit | cd9659ffcee35ade2148162a9b77f8d74656d43e (patch) | |
| tree | d5cbb565fbcdb5378ab4dbc4cf885933eb39eedd | |
| parent | 157156276b32c4edca337e6389dc70a203c7c681 (diff) | |
| download | rust-cd9659ffcee35ade2148162a9b77f8d74656d43e.tar.gz rust-cd9659ffcee35ade2148162a9b77f8d74656d43e.zip | |
Use the right `DefMap` when looking up modules
| -rw-r--r-- | crates/hir_def/src/nameres.rs | 4 | ||||
| -rw-r--r-- | crates/hir_def/src/nameres/collector.rs | 8 | ||||
| -rw-r--r-- | crates/hir_def/src/nameres/path_resolution.rs | 10 |
3 files changed, 20 insertions, 2 deletions
diff --git a/crates/hir_def/src/nameres.rs b/crates/hir_def/src/nameres.rs index 6169b3bbcbd..5efc2fe470a 100644 --- a/crates/hir_def/src/nameres.rs +++ b/crates/hir_def/src/nameres.rs @@ -258,6 +258,10 @@ impl DefMap { 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 } diff --git a/crates/hir_def/src/nameres/collector.rs b/crates/hir_def/src/nameres/collector.rs index fcc8e2607ea..6e86cc4a7ab 100644 --- a/crates/hir_def/src/nameres/collector.rs +++ b/crates/hir_def/src/nameres/collector.rs @@ -592,7 +592,13 @@ impl DefCollector<'_> { // 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 diff --git a/crates/hir_def/src/nameres/path_resolution.rs b/crates/hir_def/src/nameres/path_resolution.rs index 2a0f8ec2bc8..2d1477160e4 100644 --- a/crates/hir_def/src/nameres/path_resolution.rs +++ b/crates/hir_def/src/nameres/path_resolution.rs @@ -271,8 +271,16 @@ impl DefMap { ); } + 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 |
