Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_def/src/nameres/path_resolution.rs')
-rw-r--r--crates/hir_def/src/nameres/path_resolution.rs30
1 files changed, 12 insertions, 18 deletions
diff --git a/crates/hir_def/src/nameres/path_resolution.rs b/crates/hir_def/src/nameres/path_resolution.rs
index 809c6e0289..cc5fc0a52a 100644
--- a/crates/hir_def/src/nameres/path_resolution.rs
+++ b/crates/hir_def/src/nameres/path_resolution.rs
@@ -20,7 +20,7 @@ use crate::{
path::{ModPath, PathKind},
per_ns::PerNs,
visibility::{RawVisibility, Visibility},
- AdtId, CrateId, EnumVariantId, LocalModuleId, ModuleDefId,
+ AdtId, CrateId, EnumVariantId, LocalModuleId, ModuleDefId, ModuleId,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -63,19 +63,11 @@ impl DefMap {
&self,
db: &dyn DefDatabase,
name: &Name,
- ) -> PerNs {
- let arc;
- let root = match self.block {
- Some(_) => {
- arc = self.crate_root(db).def_map(db);
- &*arc
- }
- None => self,
- };
-
- root.extern_prelude
- .get(name)
- .map_or(PerNs::none(), |&it| PerNs::types(it, Visibility::Public))
+ ) -> Option<ModuleId> {
+ match self.block {
+ Some(_) => self.crate_root(db).def_map(db).extern_prelude.get(name).copied(),
+ None => self.extern_prelude.get(name).copied(),
+ }
}
pub(crate) fn resolve_visibility(
@@ -273,9 +265,9 @@ impl DefMap {
Some((_, segment)) => segment,
None => return ResolvePathResult::empty(ReachedFixedPoint::Yes),
};
- if let Some(def) = self.extern_prelude.get(segment) {
+ if let Some(&def) = self.extern_prelude.get(segment) {
tracing::debug!("absolute path {:?} resolved to crate {:?}", path, def);
- PerNs::types(*def, Visibility::Public)
+ PerNs::types(def.into(), Visibility::Public)
} else {
return ResolvePathResult::empty(ReachedFixedPoint::No); // extern crate declarations can add to the extern prelude
}
@@ -408,7 +400,7 @@ impl DefMap {
let from_extern_prelude = self
.extern_prelude
.get(name)
- .map_or(PerNs::none(), |&it| PerNs::types(it, Visibility::Public));
+ .map_or(PerNs::none(), |&it| PerNs::types(it.into(), Visibility::Public));
let from_prelude = self.resolve_in_prelude(db, name);
@@ -429,7 +421,9 @@ impl DefMap {
None => self,
};
let from_crate_root = crate_def_map[crate_def_map.root].scope.get(name);
- let from_extern_prelude = self.resolve_name_in_extern_prelude(db, name);
+ let from_extern_prelude = self
+ .resolve_name_in_extern_prelude(db, name)
+ .map_or(PerNs::none(), |it| PerNs::types(it.into(), Visibility::Public));
from_crate_root.or(from_extern_prelude)
}