From e52589e3a72ed57d47956d16d90f4b15fc7408f0 Mon Sep 17 00:00:00 2001 From: kazatsuyu Date: Fri, 22 Jan 2021 22:28:45 +0900 Subject: Fix error when using "extern crate self as" --- crates/hir_def/src/nameres/path_resolution.rs | 6 ++++++ crates/hir_def/src/nameres/tests/diagnostics.rs | 15 +++++++++++++++ 2 files changed, 21 insertions(+) (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 ec90f4e65..a6e0f64fc 100644 --- a/crates/hir_def/src/nameres/path_resolution.rs +++ b/crates/hir_def/src/nameres/path_resolution.rs @@ -14,6 +14,7 @@ use std::iter::successors; use base_db::Edition; use hir_expand::name::Name; +use hir_expand::name; use test_utils::mark; use crate::{ @@ -63,6 +64,11 @@ impl ResolvePathResult { impl DefMap { pub(super) fn resolve_name_in_extern_prelude(&self, name: &Name) -> PerNs { + if name == &name!(self) { + return PerNs::types(ModuleId { krate: self.krate, local_id: self.root }.into(), + Visibility::Public, + ); + } self.extern_prelude .get(name) .map_or(PerNs::none(), |&it| PerNs::types(it, Visibility::Public)) diff --git a/crates/hir_def/src/nameres/tests/diagnostics.rs b/crates/hir_def/src/nameres/tests/diagnostics.rs index 58d69d3c6..679a505dc 100644 --- a/crates/hir_def/src/nameres/tests/diagnostics.rs +++ b/crates/hir_def/src/nameres/tests/diagnostics.rs @@ -61,6 +61,21 @@ fn unresolved_extern_crate() { ); } +#[test] +fn extern_crate_self_as() { + check_diagnostics( + r" + //- /lib.rs + extern crate doesnotexist; + //^^^^^^^^^^^^^^^^^^^^^^^^^^ unresolved extern crate + // Should not error. + extern crate self as foo; + struct Foo; + use foo::Foo as Bar; + ", + ); +} + #[test] fn dedup_unresolved_import_from_unresolved_crate() { check_diagnostics( -- cgit v1.2.3