]> git.lizzy.rs Git - rust.git/commitdiff
Remove ty from code_model
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 8 Dec 2019 11:44:14 +0000 (12:44 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 8 Dec 2019 11:44:14 +0000 (12:44 +0100)
Cargo.lock
crates/ra_cli/Cargo.toml
crates/ra_cli/src/analysis_stats.rs
crates/ra_hir/src/code_model.rs
crates/ra_hir/src/from_id.rs
crates/ra_hir/src/lib.rs
crates/ra_hir/src/source_binder.rs
crates/ra_hir/src/ty.rs [deleted file]
crates/ra_ide/src/parent_module.rs

index a95f9139f12bce756672cabc63cfdaa613263c8d..d80e5854824bf8dc2da60e5ede150c57fd99a2b1 100644 (file)
@@ -919,6 +919,8 @@ dependencies = [
  "ra_batch 0.1.0",
  "ra_db 0.1.0",
  "ra_hir 0.1.0",
+ "ra_hir_def 0.1.0",
+ "ra_hir_ty 0.1.0",
  "ra_ide 0.1.0",
  "ra_prof 0.1.0",
  "ra_syntax 0.1.0",
index 21a37c7bf4395b375cd7c8499d36242251fe7e91..12af075f7df06219f9d045bb5d5a30724bb2dca0 100644 (file)
@@ -12,7 +12,9 @@ env_logger = { version = "0.7.1", default-features = false, features = ["humanti
 ra_syntax = { path = "../ra_syntax" }
 ra_ide = { path = "../ra_ide" }
 ra_batch = { path = "../ra_batch" }
-ra_hir = { path = "../ra_hir" }
+hir = { path = "../ra_hir", package = "ra_hir" }
+hir_ty = { path = "../ra_hir_ty", package = "ra_hir_ty" }
+hir_def = { path = "../ra_hir_def", package = "ra_hir_def" }
 ra_db = { path = "../ra_db" }
 
 [dependencies.ra_prof]
index 9b1802a5fc8b337092cfc8a35732740788b2bd19..ac65415a5e7ed207166b7bec497812a3933d6377 100644 (file)
@@ -2,8 +2,13 @@
 
 use std::{collections::HashSet, fmt::Write, path::Path, time::Instant};
 
+use hir::{
+    db::{DefDatabase, HirDatabase},
+    AssocItem, Crate, HasSource, HirDisplay, ModuleDef,
+};
+use hir_def::FunctionId;
+use hir_ty::{Ty, TypeWalk};
 use ra_db::SourceDatabaseExt;
-use ra_hir::{AssocItem, Crate, HasSource, HirDisplay, ModuleDef, Ty, TypeWalk};
 use ra_syntax::AstNode;
 
 use crate::{progress_report::ProgressReport, Result, Verbosity};
@@ -101,8 +106,9 @@ pub fn run(
                 continue;
             }
         }
-        let body = f.body(db);
-        let inference_result = f.infer(db);
+        let f_id = FunctionId::from(f);
+        let body = db.body(f_id.into());
+        let inference_result = db.infer(f_id.into());
         for (expr_id, _) in body.exprs.iter() {
             let ty = &inference_result[expr_id];
             num_exprs += 1;
@@ -122,7 +128,8 @@ pub fn run(
             if let Some(mismatch) = inference_result.type_mismatch_for_expr(expr_id) {
                 num_type_mismatches += 1;
                 if verbosity.is_verbose() {
-                    let src = f.body_source_map(db).expr_syntax(expr_id);
+                    let (_, sm) = db.body_with_source_map(f_id.into());
+                    let src = sm.expr_syntax(expr_id);
                     if let Some(src) = src {
                         // FIXME: it might be nice to have a function (on Analysis?) that goes from Source<T> -> (LineCol, LineCol) directly
                         let original_file = src.file_id.original_file(db);
index 906716dfce20988964702d3ac14a693075d56160..3d956afa742494bc6f05cb5d04734a9bac3c9ebf 100644 (file)
     name::{self, AsName},
     MacroDefId,
 };
-use hir_ty::expr::ExprValidator;
+use hir_ty::{
+    autoderef, display::HirFormatter, expr::ExprValidator, ApplicationTy, Canonical, InEnvironment,
+    TraitEnvironment, Ty, TyDefId, TypeCtor, TypeWalk,
+};
 use ra_db::{CrateId, Edition, FileId};
 use ra_syntax::ast;
 
 use crate::{
     db::{DefDatabase, HirDatabase},
-    ty::display::HirFormatter,
-    ty::{self, InEnvironment, TraitEnvironment, Ty, TyDefId, TypeCtor, TypeWalk},
     CallableDef, HirDisplay, InFile, Name,
 };
 
@@ -87,10 +88,6 @@ pub fn edition(self, db: &impl DefDatabase) -> Edition {
     pub fn all(db: &impl DefDatabase) -> Vec<Crate> {
         db.crate_graph().iter().map(|id| Crate { id }).collect()
     }
-
-    pub fn crate_id(self) -> CrateId {
-        self.id
-    }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
@@ -937,7 +934,7 @@ fn go(ty: &Ty) -> bool {
     pub fn fields(&self, db: &impl HirDatabase) -> Vec<(StructField, Type)> {
         if let Ty::Apply(a_ty) = &self.ty.value {
             match a_ty.ctor {
-                ty::TypeCtor::Adt(AdtId::StructId(s)) => {
+                TypeCtor::Adt(AdtId::StructId(s)) => {
                     let var_def = s.into();
                     return db
                         .field_types(var_def)
@@ -959,7 +956,7 @@ pub fn tuple_fields(&self, _db: &impl HirDatabase) -> Vec<Type> {
         let mut res = Vec::new();
         if let Ty::Apply(a_ty) = &self.ty.value {
             match a_ty.ctor {
-                ty::TypeCtor::Tuple { .. } => {
+                TypeCtor::Tuple { .. } => {
                     for ty in a_ty.parameters.iter() {
                         let ty = ty.clone().subst(&a_ty.parameters);
                         res.push(self.derived(ty));
@@ -995,10 +992,10 @@ pub fn variant_fields(
     pub fn autoderef<'a>(&'a self, db: &'a impl HirDatabase) -> impl Iterator<Item = Type> + 'a {
         // There should be no inference vars in types passed here
         // FIXME check that?
-        let canonical = crate::ty::Canonical { value: self.ty.value.clone(), num_vars: 0 };
+        let canonical = Canonical { value: self.ty.value.clone(), num_vars: 0 };
         let environment = self.ty.environment.clone();
         let ty = InEnvironment { value: canonical, environment: environment.clone() };
-        ty::autoderef(db, Some(self.krate), ty)
+        autoderef(db, Some(self.krate), ty)
             .map(|canonical| canonical.value)
             .map(move |ty| self.derived(ty))
     }
@@ -1038,15 +1035,14 @@ pub fn as_adt(&self) -> Option<Adt> {
     // FIXME: provide required accessors such that it becomes implementable from outside.
     pub fn is_equal_for_find_impls(&self, other: &Type) -> bool {
         match (&self.ty.value, &other.ty.value) {
-            (Ty::Apply(a_original_ty), Ty::Apply(ty::ApplicationTy { ctor, parameters })) => {
-                match ctor {
-                    TypeCtor::Ref(..) => match parameters.as_single() {
-                        Ty::Apply(a_ty) => a_original_ty.ctor == a_ty.ctor,
-                        _ => false,
-                    },
-                    _ => a_original_ty.ctor == *ctor,
-                }
-            }
+            (Ty::Apply(a_original_ty), Ty::Apply(ApplicationTy { ctor, parameters })) => match ctor
+            {
+                TypeCtor::Ref(..) => match parameters.as_single() {
+                    Ty::Apply(a_ty) => a_original_ty.ctor == a_ty.ctor,
+                    _ => false,
+                },
+                _ => a_original_ty.ctor == *ctor,
+            },
             _ => false,
         }
     }
index 0398d0ee6b67a65b6df5dc149db634f1aae2077e..75a1a77722102e94893af81f4f4f33adc1e35882 100644 (file)
@@ -9,16 +9,10 @@
 };
 
 use crate::{
-    Adt, AssocItem, AttrDef, Crate, DefWithBody, EnumVariant, GenericDef, ModuleDef, StructField,
+    Adt, AssocItem, AttrDef, DefWithBody, EnumVariant, GenericDef, ModuleDef, StructField,
     VariantDef,
 };
 
-impl From<ra_db::CrateId> for Crate {
-    fn from(id: ra_db::CrateId) -> Self {
-        Crate { id }
-    }
-}
-
 macro_rules! from_id {
     ($(($id:path, $ty:path)),*) => {$(
         impl From<$id> for $ty {
@@ -26,10 +20,16 @@ fn from(id: $id) -> $ty {
                 $ty { id }
             }
         }
+        impl From<$ty> for $id {
+            fn from(ty: $ty) -> $id {
+                ty.id
+            }
+        }
     )*}
 }
 
 from_id![
+    (ra_db::CrateId, crate::Crate),
     (hir_def::ModuleId, crate::Module),
     (hir_def::StructId, crate::Struct),
     (hir_def::UnionId, crate::Union),
index 9eb34b5dcdd9543cc539f2dc4e4c61547f4f8173..bb22882b139d41ddb13532856c5e4a356a99f42c 100644 (file)
@@ -31,7 +31,6 @@ fn from(it: $sv) -> $e {
 pub mod db;
 pub mod source_binder;
 
-mod ty;
 pub mod diagnostics;
 
 mod from_id;
@@ -48,11 +47,6 @@ fn from(it: $sv) -> $e {
     },
     from_source::FromSource,
     source_binder::{PathResolution, ScopeEntryWithSyntax, SourceAnalyzer},
-    ty::{
-        display::HirDisplay,
-        primitive::{FloatBitness, FloatTy, IntBitness, IntTy, Signedness, Uncertain},
-        ApplicationTy, CallableDef, Substs, TraitRef, Ty, TypeCtor, TypeWalk,
-    },
 };
 
 pub use hir_def::{
@@ -66,3 +60,4 @@ fn from(it: $sv) -> $e {
 pub use hir_expand::{
     name::Name, HirFileId, InFile, MacroCallId, MacroCallLoc, MacroDefId, MacroFile,
 };
+pub use hir_ty::{display::HirDisplay, CallableDef};
index c5a920688fd0abeea97a5d5af016ec1aa979d40a..9efd0477c1be5b2cee0b67c650e454c6693061cc 100644 (file)
 use hir_expand::{
     hygiene::Hygiene, name::AsName, AstId, HirFileId, InFile, MacroCallId, MacroCallKind,
 };
+use hir_ty::{
+    method_resolution::{self, implements_trait},
+    Canonical, InEnvironment, InferenceResult, TraitEnvironment, Ty,
+};
 use ra_syntax::{
     ast::{self, AstNode},
     match_ast, AstPtr,
 };
 
 use crate::{
-    db::HirDatabase,
-    ty::{
-        method_resolution::{self, implements_trait},
-        InEnvironment, TraitEnvironment, Ty,
-    },
-    Adt, AssocItem, Const, DefWithBody, Enum, EnumVariant, FromSource, Function, ImplBlock, Local,
-    MacroDef, Name, Path, ScopeDef, Static, Struct, Trait, Type, TypeAlias, TypeParam,
+    db::HirDatabase, Adt, AssocItem, Const, DefWithBody, Enum, EnumVariant, FromSource, Function,
+    ImplBlock, Local, MacroDef, Name, Path, ScopeDef, Static, Struct, Trait, Type, TypeAlias,
+    TypeParam,
 };
 
 fn try_get_resolver_for_node(db: &impl HirDatabase, node: InFile<&SyntaxNode>) -> Option<Resolver> {
@@ -100,7 +100,7 @@ pub struct SourceAnalyzer {
     resolver: Resolver,
     body_owner: Option<DefWithBody>,
     body_source_map: Option<Arc<BodySourceMap>>,
-    infer: Option<Arc<crate::ty::InferenceResult>>,
+    infer: Option<Arc<InferenceResult>>,
     scopes: Option<Arc<ExprScopes>>,
 }
 
@@ -376,7 +376,7 @@ pub fn iterate_method_candidates<T>(
         // There should be no inference vars in types passed here
         // FIXME check that?
         // FIXME replace Unknown by bound vars here
-        let canonical = crate::ty::Canonical { value: ty.ty.value.clone(), num_vars: 0 };
+        let canonical = Canonical { value: ty.ty.value.clone(), num_vars: 0 };
         method_resolution::iterate_method_candidates(
             &canonical,
             db,
@@ -400,7 +400,7 @@ pub fn iterate_path_candidates<T>(
         // There should be no inference vars in types passed here
         // FIXME check that?
         // FIXME replace Unknown by bound vars here
-        let canonical = crate::ty::Canonical { value: ty.ty.value.clone(), num_vars: 0 };
+        let canonical = Canonical { value: ty.ty.value.clone(), num_vars: 0 };
         method_resolution::iterate_method_candidates(
             &canonical,
             db,
@@ -418,7 +418,7 @@ pub fn iterate_path_candidates<T>(
     // ) -> impl Iterator<Item = Ty> + 'a {
     //     // There should be no inference vars in types passed here
     //     // FIXME check that?
-    //     let canonical = crate::ty::Canonical { value: ty, num_vars: 0 };
+    //     let canonical = Canonical { value: ty, num_vars: 0 };
     //     let krate = self.resolver.krate();
     //     let environment = TraitEnvironment::lower(db, &self.resolver);
     //     let ty = crate::ty::InEnvironment { value: canonical, environment };
@@ -440,7 +440,7 @@ pub fn impls_future(&self, db: &impl HirDatabase, ty: Ty) -> bool {
             _ => return false,
         };
 
-        let canonical_ty = crate::ty::Canonical { value: ty, num_vars: 0 };
+        let canonical_ty = Canonical { value: ty, num_vars: 0 };
         implements_trait(&canonical_ty, db, &self.resolver, krate.into(), std_future_trait)
     }
 
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs
deleted file mode 100644 (file)
index 4ed69c0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-//! The type system. We currently use this to infer types for completion, hover
-//! information and various assists.
-
-pub use hir_ty::*;
index aef3fa3df01fcb417a598dc2c3bfbb8df202cd2e..f5a788c07cff07b6f3a1032ff5458e6c1a56b599 100644 (file)
@@ -30,7 +30,7 @@ pub(crate) fn crate_for(db: &RootDatabase, file_id: FileId) -> Vec<CrateId> {
             None => return Vec::new(),
         };
     let krate = module.krate();
-    vec![krate.crate_id()]
+    vec![krate.into()]
 }
 
 #[cfg(test)]