Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/resolver.rs')
-rw-r--r--crates/hir-def/src/resolver.rs28
1 files changed, 23 insertions, 5 deletions
diff --git a/crates/hir-def/src/resolver.rs b/crates/hir-def/src/resolver.rs
index ae185759a5..7e941854a2 100644
--- a/crates/hir-def/src/resolver.rs
+++ b/crates/hir-def/src/resolver.rs
@@ -105,9 +105,8 @@ pub enum TypeNs {
BuiltinType(BuiltinType),
TraitId(TraitId),
TraitAliasId(TraitAliasId),
- // Module belong to type ns, but the resolver is used when all module paths
- // are fully resolved.
- // ModuleId(ModuleId)
+
+ ModuleId(ModuleId),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -249,6 +248,24 @@ impl Resolver {
}
Scope::BlockScope(m) => {
if let Some(res) = m.resolve_path_in_type_ns(db, path) {
+ let res = match res.0 {
+ TypeNs::ModuleId(_) if res.1.is_none() => {
+ if let Some(ModuleDefId::BuiltinType(builtin)) = BUILTIN_SCOPE
+ .get(first_name)
+ .and_then(|builtin| builtin.take_types())
+ {
+ (
+ TypeNs::BuiltinType(builtin),
+ remaining_idx(),
+ None,
+ ResolvePathResultPrefixInfo::default(),
+ )
+ } else {
+ res
+ }
+ }
+ _ => res,
+ };
return Some(res);
}
}
@@ -1193,11 +1210,12 @@ fn to_type_ns(per_ns: PerNs) -> Option<(TypeNs, Option<ImportOrExternCrate>)> {
ModuleDefId::TraitId(it) => TypeNs::TraitId(it),
ModuleDefId::TraitAliasId(it) => TypeNs::TraitAliasId(it),
+ ModuleDefId::ModuleId(it) => TypeNs::ModuleId(it),
+
ModuleDefId::FunctionId(_)
| ModuleDefId::ConstId(_)
| ModuleDefId::MacroId(_)
- | ModuleDefId::StaticId(_)
- | ModuleDefId::ModuleId(_) => return None,
+ | ModuleDefId::StaticId(_) => return None,
};
Some((res, def.import))
}