From 3ab1519cb27b927074ed7fbbb18a856e6e7fabb8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 23 Jan 2019 23:14:13 +0300 Subject: Change ids strategy this is a part of larghish hir refactoring which aims to * replace per-source-root module trees with per crate trees * switch from a monotyped DedId to type-specific ids --- crates/ra_hir/src/ty.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'crates/ra_hir/src/ty.rs') diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index e690ae158..4c96579ee 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs @@ -32,7 +32,7 @@ use rustc_hash::FxHashMap; use crate::{ Def, DefId, Module, Function, Struct, StructField, Enum, EnumVariant, Path, Name, ImplBlock, - FnSignature, FnScopes, + FnSignature, FnScopes, ModuleDef, db::HirDatabase, type_ref::{TypeRef, Mutability}, name::KnownName, @@ -382,8 +382,8 @@ impl Ty { // Resolve in module (in type namespace) let resolved = match module.resolve_path(db, path).take_types() { - Some(r) => r, - None => return Ty::Unknown, + Some(ModuleDef::Def(r)) => r, + None | Some(ModuleDef::Module(_)) => return Ty::Unknown, }; let ty = db.type_for_def(resolved); let substs = Ty::substs_from_path(db, module, impl_block, generics, path, resolved); @@ -663,10 +663,6 @@ pub(crate) fn type_for_enum_variant(db: &impl HirDatabase, ev: EnumVariant) -> T pub(super) fn type_for_def(db: &impl HirDatabase, def_id: DefId) -> Ty { let def = def_id.resolve(db); match def { - Def::Module(..) => { - log::debug!("trying to get type for module {:?}", def_id); - Ty::Unknown - } Def::Function(f) => type_for_fn(db, f), Def::Struct(s) => type_for_struct(db, s), Def::Enum(e) => type_for_enum(db, e), @@ -1063,7 +1059,10 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { }; // resolve in module - let resolved = self.module.resolve_path(self.db, &path).take_values()?; + let resolved = match self.module.resolve_path(self.db, &path).take_values()? { + ModuleDef::Def(it) => it, + ModuleDef::Module(_) => return None, + }; let ty = self.db.type_for_def(resolved); let ty = self.insert_type_vars(ty); Some(ty) @@ -1075,7 +1074,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { None => return (Ty::Unknown, None), }; let def_id = match self.module.resolve_path(self.db, &path).take_types() { - Some(def_id) => def_id, + Some(ModuleDef::Def(def_id)) => def_id, _ => return (Ty::Unknown, None), }; // TODO remove the duplication between here and `Ty::from_path`? @@ -1216,6 +1215,10 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { .module .resolve_path(self.db, &path) .take_values() + .and_then(|module_def| match module_def { + ModuleDef::Def(it) => Some(it), + ModuleDef::Module(_) => None, + }) .map_or(Ty::Unknown, |resolved| self.db.type_for_def(resolved)), Pat::Bind { mode, -- cgit v1.2.3