Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_def/src/nameres/collector.rs')
-rw-r--r--crates/hir_def/src/nameres/collector.rs26
1 files changed, 13 insertions, 13 deletions
diff --git a/crates/hir_def/src/nameres/collector.rs b/crates/hir_def/src/nameres/collector.rs
index 8e6b5283f1..ea29f80437 100644
--- a/crates/hir_def/src/nameres/collector.rs
+++ b/crates/hir_def/src/nameres/collector.rs
@@ -70,7 +70,7 @@ pub(super) fn collect_defs(db: &dyn DefDatabase, mut def_map: DefMap, tree_id: T
deps.insert(dep.as_name(), dep_root.into());
if dep.is_prelude() && !tree_id.is_block() {
- def_map.extern_prelude.insert(dep.as_name(), dep_root.into());
+ def_map.extern_prelude.insert(dep.as_name(), dep_root);
}
}
@@ -234,7 +234,7 @@ enum MacroDirectiveKind {
struct DefCollector<'a> {
db: &'a dyn DefDatabase,
def_map: DefMap,
- deps: FxHashMap<Name, ModuleDefId>,
+ deps: FxHashMap<Name, ModuleId>,
glob_imports: FxHashMap<LocalModuleId, Vec<(LocalModuleId, Visibility)>>,
unresolved_imports: Vec<ImportDirective>,
resolved_imports: Vec<ImportDirective>,
@@ -687,9 +687,7 @@ impl DefCollector<'_> {
self.def_map.edition,
);
- let res = self.resolve_extern_crate(&extern_crate.name);
-
- if let Some(ModuleDefId::ModuleId(m)) = res.take_types() {
+ if let Some(m) = self.resolve_extern_crate(&extern_crate.name) {
if m == self.def_map.module_id(current_module_id) {
cov_mark::hit!(ignore_macro_use_extern_crate_self);
return;
@@ -757,10 +755,11 @@ impl DefCollector<'_> {
let res = self.resolve_extern_crate(name);
- if res.is_none() {
- PartialResolvedImport::Unresolved
- } else {
- PartialResolvedImport::Resolved(res)
+ match res {
+ Some(res) => {
+ PartialResolvedImport::Resolved(PerNs::types(res.into(), Visibility::Public))
+ }
+ None => PartialResolvedImport::Unresolved,
}
} else {
let res = self.def_map.resolve_path_fp_with_macro(
@@ -796,7 +795,7 @@ impl DefCollector<'_> {
}
}
- fn resolve_extern_crate(&self, name: &Name) -> PerNs {
+ fn resolve_extern_crate(&self, name: &Name) -> Option<ModuleId> {
if *name == name!(self) {
cov_mark::hit!(extern_crate_self_as);
let root = match self.def_map.block {
@@ -806,9 +805,9 @@ impl DefCollector<'_> {
}
None => self.def_map.module_id(self.def_map.root()),
};
- PerNs::types(root.into(), Visibility::Public)
+ Some(root)
} else {
- self.deps.get(name).map_or(PerNs::none(), |&it| PerNs::types(it, Visibility::Public))
+ self.deps.get(name).copied()
}
}
@@ -846,7 +845,8 @@ impl DefCollector<'_> {
// extern crates in the crate root are special-cased to insert entries into the extern prelude: rust-lang/rust#54658
if import.is_extern_crate && module_id == self.def_map.root {
- if let (Some(def), Some(name)) = (def.take_types(), name) {
+ if let (Some(ModuleDefId::ModuleId(def)), Some(name)) = (def.take_types(), name)
+ {
self.def_map.extern_prelude.insert(name.clone(), def);
}
}