From 997bd97b77e0cacf7eb8e466071e416492cc24b3 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Fri, 5 Feb 2021 19:24:03 +0100 Subject: Fix resolution of `self` module within blocks --- crates/hir_def/src/nameres/path_resolution.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'crates/hir_def/src/nameres') diff --git a/crates/hir_def/src/nameres/path_resolution.rs b/crates/hir_def/src/nameres/path_resolution.rs index 036e389b0..fdcdc23ae 100644 --- a/crates/hir_def/src/nameres/path_resolution.rs +++ b/crates/hir_def/src/nameres/path_resolution.rs @@ -227,7 +227,15 @@ impl DefMap { } } - PerNs::types(self.module_id(module).into(), Visibility::Public) + // Resolve `self` to the containing crate-rooted module if we're a block + self.with_ancestor_maps(db, module, &mut |def_map, module| { + if def_map.block.is_some() { + None // keep ascending + } else { + Some(PerNs::types(def_map.module_id(module).into(), Visibility::Public)) + } + }) + .expect("block DefMap not rooted in crate DefMap") } PathKind::Abs => { // 2018-style absolute path -- only extern prelude -- cgit v1.2.3