From 0102fb41337ac0442e689d410bb424d215e9a7bd Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 21 Nov 2019 12:21:46 +0300 Subject: Decouple Resolver --- crates/ra_hir/src/from_id.rs | 65 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) (limited to 'crates/ra_hir/src/from_id.rs') diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs index b7692d407..7042422cc 100644 --- a/crates/ra_hir/src/from_id.rs +++ b/crates/ra_hir/src/from_id.rs @@ -3,9 +3,14 @@ //! It's unclear if we need this long-term, but it's definitelly useful while we //! are splitting the hir. -use hir_def::{AdtId, AssocItemId, DefWithBodyId, EnumVariantId, GenericDefId, ModuleDefId}; +use hir_def::{ + AdtId, AssocItemId, DefWithBodyId, EnumId, EnumVariantId, GenericDefId, ModuleDefId, StructId, + TypeAliasId, UnionId, +}; -use crate::{Adt, AssocItem, DefWithBody, EnumVariant, GenericDef, ModuleDef}; +use crate::{ + ty::TypableDef, Adt, AssocItem, DefWithBody, EnumVariant, GenericDef, ModuleDef, TypeAlias, +}; macro_rules! from_id { ($(($id:path, $ty:path)),*) => {$( @@ -83,6 +88,16 @@ impl From for DefWithBodyId { } } +impl From for DefWithBody { + fn from(def: DefWithBodyId) -> Self { + match def { + DefWithBodyId::FunctionId(it) => DefWithBody::Function(it.into()), + DefWithBodyId::StaticId(it) => DefWithBody::Static(it.into()), + DefWithBodyId::ConstId(it) => DefWithBody::Const(it.into()), + } + } +} + impl From for AssocItem { fn from(def: AssocItemId) -> Self { match def { @@ -122,3 +137,49 @@ impl From for GenericDef { } } } + +impl From for TypableDef { + fn from(id: AdtId) -> Self { + Adt::from(id).into() + } +} + +impl From for TypableDef { + fn from(id: StructId) -> Self { + AdtId::StructId(id).into() + } +} + +impl From for TypableDef { + fn from(id: UnionId) -> Self { + AdtId::UnionId(id).into() + } +} + +impl From for TypableDef { + fn from(id: EnumId) -> Self { + AdtId::EnumId(id).into() + } +} + +impl From for TypableDef { + fn from(id: EnumVariantId) -> Self { + EnumVariant::from(id).into() + } +} + +impl From for TypableDef { + fn from(id: TypeAliasId) -> Self { + TypeAlias::from(id).into() + } +} + +impl From for GenericDefId { + fn from(id: Adt) -> Self { + match id { + Adt::Struct(it) => it.id.into(), + Adt::Union(it) => it.id.into(), + Adt::Enum(it) => it.id.into(), + } + } +} -- cgit v1.2.3 From 621cf06156975f8bd75e35af46da034f72e11fad Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 21 Nov 2019 13:32:03 +0300 Subject: Decouple --- crates/ra_hir/src/from_id.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'crates/ra_hir/src/from_id.rs') diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs index 7042422cc..e294e957b 100644 --- a/crates/ra_hir/src/from_id.rs +++ b/crates/ra_hir/src/from_id.rs @@ -4,12 +4,13 @@ //! are splitting the hir. use hir_def::{ - AdtId, AssocItemId, DefWithBodyId, EnumId, EnumVariantId, GenericDefId, ModuleDefId, StructId, - TypeAliasId, UnionId, + AdtId, AssocItemId, ConstId, DefWithBodyId, EnumId, EnumVariantId, FunctionId, GenericDefId, + ModuleDefId, StaticId, StructId, TypeAliasId, UnionId, }; use crate::{ - ty::TypableDef, Adt, AssocItem, DefWithBody, EnumVariant, GenericDef, ModuleDef, TypeAlias, + ty::TypableDef, Adt, AssocItem, Const, DefWithBody, EnumVariant, Function, GenericDef, + ModuleDef, Static, TypeAlias, }; macro_rules! from_id { @@ -174,6 +175,22 @@ impl From for TypableDef { } } +impl From for TypableDef { + fn from(id: FunctionId) -> Self { + Function::from(id).into() + } +} +impl From for TypableDef { + fn from(id: ConstId) -> Self { + Const::from(id).into() + } +} +impl From for TypableDef { + fn from(id: StaticId) -> Self { + Static::from(id).into() + } +} + impl From for GenericDefId { fn from(id: Adt) -> Self { match id { -- cgit v1.2.3 From 00684d708b64fe81a0264795f27594d450a8d08d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 21 Nov 2019 15:24:51 +0300 Subject: Decouple --- crates/ra_hir/src/from_id.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/from_id.rs') diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs index e294e957b..a3e9d8525 100644 --- a/crates/ra_hir/src/from_id.rs +++ b/crates/ra_hir/src/from_id.rs @@ -9,10 +9,16 @@ use hir_def::{ }; use crate::{ - ty::TypableDef, Adt, AssocItem, Const, DefWithBody, EnumVariant, Function, GenericDef, + ty::TypableDef, Adt, AssocItem, Const, Crate, DefWithBody, EnumVariant, Function, GenericDef, ModuleDef, Static, TypeAlias, }; +impl From for Crate { + fn from(crate_id: ra_db::CrateId) -> Self { + Crate { crate_id } + } +} + macro_rules! from_id { ($(($id:path, $ty:path)),*) => {$( impl From<$id> for $ty { -- cgit v1.2.3 From 4daf931111029cee9bb43691f88c32f0aa47a802 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 21 Nov 2019 16:23:02 +0300 Subject: Remove old hir::generics module --- crates/ra_hir/src/from_id.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'crates/ra_hir/src/from_id.rs') diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs index a3e9d8525..e8ed04056 100644 --- a/crates/ra_hir/src/from_id.rs +++ b/crates/ra_hir/src/from_id.rs @@ -9,8 +9,9 @@ use hir_def::{ }; use crate::{ - ty::TypableDef, Adt, AssocItem, Const, Crate, DefWithBody, EnumVariant, Function, GenericDef, - ModuleDef, Static, TypeAlias, + ty::{CallableDef, TypableDef}, + Adt, AssocItem, Const, Crate, DefWithBody, EnumVariant, Function, GenericDef, ModuleDef, + Static, TypeAlias, }; impl From for Crate { @@ -206,3 +207,15 @@ impl From for GenericDefId { } } } + +impl From for GenericDefId { + fn from(def: CallableDef) -> Self { + match def { + CallableDef::Function(it) => it.id.into(), + CallableDef::Struct(it) => it.id.into(), + CallableDef::EnumVariant(it) => { + EnumVariantId { parent: it.parent.id, local_id: it.id }.into() + } + } + } +} -- cgit v1.2.3