Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/from_id.rs')
-rw-r--r--crates/hir/src/from_id.rs174
1 files changed, 64 insertions, 110 deletions
diff --git a/crates/hir/src/from_id.rs b/crates/hir/src/from_id.rs
index e94279bc45..9b07aa494e 100644
--- a/crates/hir/src/from_id.rs
+++ b/crates/hir/src/from_id.rs
@@ -7,8 +7,10 @@ use hir_def::{
AdtId, AssocItemId, BuiltinDeriveImplId, DefWithBodyId, EnumVariantId, ExpressionStoreOwnerId,
FieldId, FunctionId, GenericDefId, GenericParamId, ImplId, ModuleDefId, VariantId,
hir::{BindingId, LabelId},
+ item_scope::ItemInNs as ItemInNsId,
};
use hir_ty::next_solver::AnyImplId;
+use stdx::impl_from;
use crate::{
Adt, AnyFunctionId, AssocItem, BuiltinType, DefWithBody, EnumVariant, ExpressionStoreOwner,
@@ -51,54 +53,28 @@ from_id![
(hir_def::ExternBlockId, crate::ExternBlock),
];
-impl From<AdtId> for Adt {
- fn from(id: AdtId) -> Self {
- match id {
- AdtId::StructId(it) => Adt::Struct(it.into()),
- AdtId::UnionId(it) => Adt::Union(it.into()),
- AdtId::EnumId(it) => Adt::Enum(it.into()),
- }
- }
-}
-
-impl From<Adt> for AdtId {
- fn from(id: Adt) -> Self {
- match id {
- Adt::Struct(it) => AdtId::StructId(it.id),
- Adt::Union(it) => AdtId::UnionId(it.id),
- Adt::Enum(it) => AdtId::EnumId(it.id),
- }
- }
-}
-
-impl From<VariantId> for Variant {
- fn from(v: VariantId) -> Self {
- match v {
- VariantId::EnumVariantId(it) => Variant::EnumVariant(it.into()),
- VariantId::StructId(it) => Variant::Struct(it.into()),
- VariantId::UnionId(it) => Variant::Union(it.into()),
- }
+impl_from!(AdtId { StructId => Struct, UnionId => Union, EnumId => Enum } for Adt);
+impl_from!(Adt { Struct => StructId, Union => UnionId, Enum => EnumId } for AdtId);
+impl_from!(
+ VariantId { EnumVariantId => EnumVariant, StructId => Struct, UnionId => Union }
+ for Variant
+);
+impl_from!(
+ GenericParamId {
+ TypeParamId => TypeParam,
+ ConstParamId => ConstParam,
+ LifetimeParamId => LifetimeParam,
}
-}
-impl From<GenericParamId> for GenericParam {
- fn from(id: GenericParamId) -> Self {
- match id {
- GenericParamId::TypeParamId(it) => GenericParam::TypeParam(it.into()),
- GenericParamId::ConstParamId(it) => GenericParam::ConstParam(it.into()),
- GenericParamId::LifetimeParamId(it) => GenericParam::LifetimeParam(it.into()),
- }
+ for GenericParam
+);
+impl_from!(
+ GenericParam {
+ LifetimeParam => LifetimeParamId,
+ ConstParam => ConstParamId,
+ TypeParam => TypeParamId,
}
-}
-
-impl From<GenericParam> for GenericParamId {
- fn from(id: GenericParam) -> Self {
- match id {
- GenericParam::LifetimeParam(it) => GenericParamId::LifetimeParamId(it.id),
- GenericParam::ConstParam(it) => GenericParamId::ConstParamId(it.id),
- GenericParam::TypeParam(it) => GenericParamId::TypeParamId(it.id),
- }
- }
-}
+ for GenericParamId
+);
impl From<EnumVariantId> for EnumVariant {
fn from(id: EnumVariantId) -> Self {
@@ -112,22 +88,21 @@ impl From<EnumVariant> for EnumVariantId {
}
}
-impl From<ModuleDefId> for ModuleDef {
- fn from(id: ModuleDefId) -> Self {
- match id {
- ModuleDefId::ModuleId(it) => ModuleDef::Module(it.into()),
- ModuleDefId::FunctionId(it) => ModuleDef::Function(it.into()),
- ModuleDefId::AdtId(it) => ModuleDef::Adt(it.into()),
- ModuleDefId::EnumVariantId(it) => ModuleDef::EnumVariant(it.into()),
- ModuleDefId::ConstId(it) => ModuleDef::Const(it.into()),
- ModuleDefId::StaticId(it) => ModuleDef::Static(it.into()),
- ModuleDefId::TraitId(it) => ModuleDef::Trait(it.into()),
- ModuleDefId::TypeAliasId(it) => ModuleDef::TypeAlias(it.into()),
- ModuleDefId::BuiltinType(it) => ModuleDef::BuiltinType(it.into()),
- ModuleDefId::MacroId(it) => ModuleDef::Macro(it.into()),
- }
+impl_from!(
+ ModuleDefId {
+ ModuleId => Module,
+ FunctionId => Function,
+ AdtId => Adt,
+ EnumVariantId => EnumVariant,
+ ConstId => Const,
+ StaticId => Static,
+ TraitId => Trait,
+ TypeAliasId => TypeAlias,
+ BuiltinType => BuiltinType,
+ MacroId => Macro,
}
-}
+ for ModuleDef
+);
impl TryFrom<ModuleDef> for ModuleDefId {
type Error = ();
@@ -165,26 +140,19 @@ impl TryFrom<DefWithBody> for DefWithBodyId {
}
}
-impl From<DefWithBodyId> 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()),
- DefWithBodyId::VariantId(it) => DefWithBody::EnumVariant(it.into()),
- }
+impl_from!(
+ DefWithBodyId {
+ FunctionId => Function,
+ StaticId => Static,
+ ConstId => Const,
+ VariantId => EnumVariant,
}
-}
-
-impl From<AssocItemId> for AssocItem {
- fn from(def: AssocItemId) -> Self {
- match def {
- AssocItemId::FunctionId(it) => AssocItem::Function(it.into()),
- AssocItemId::TypeAliasId(it) => AssocItem::TypeAlias(it.into()),
- AssocItemId::ConstId(it) => AssocItem::Const(it.into()),
- }
- }
-}
+ for DefWithBody
+);
+impl_from!(
+ AssocItemId { FunctionId => Function, TypeAliasId => TypeAlias, ConstId => Const }
+ for AssocItem
+);
impl TryFrom<GenericDef> for GenericDefId {
type Error = ();
@@ -194,19 +162,18 @@ impl TryFrom<GenericDef> for GenericDefId {
}
}
-impl From<GenericDefId> for GenericDef {
- fn from(def: GenericDefId) -> Self {
- match def {
- GenericDefId::FunctionId(it) => GenericDef::Function(it.into()),
- GenericDefId::AdtId(it) => GenericDef::Adt(it.into()),
- GenericDefId::TraitId(it) => GenericDef::Trait(it.into()),
- GenericDefId::TypeAliasId(it) => GenericDef::TypeAlias(it.into()),
- GenericDefId::ImplId(it) => GenericDef::Impl(it.into()),
- GenericDefId::ConstId(it) => GenericDef::Const(it.into()),
- GenericDefId::StaticId(it) => GenericDef::Static(it.into()),
- }
+impl_from!(
+ GenericDefId {
+ FunctionId => Function,
+ AdtId => Adt,
+ TraitId => Trait,
+ TypeAliasId => TypeAlias,
+ ImplId => Impl,
+ ConstId => Const,
+ StaticId => Static,
}
-}
+ for GenericDef
+);
impl From<Adt> for GenericDefId {
fn from(id: Adt) -> Self {
@@ -218,15 +185,10 @@ impl From<Adt> for GenericDefId {
}
}
-impl From<Variant> for VariantId {
- fn from(def: Variant) -> Self {
- match def {
- Variant::Struct(it) => VariantId::StructId(it.id),
- Variant::EnumVariant(it) => VariantId::EnumVariantId(it.into()),
- Variant::Union(it) => VariantId::UnionId(it.id),
- }
- }
-}
+impl_from!(
+ Variant { Struct => StructId, EnumVariant => EnumVariantId, Union => UnionId }
+ for VariantId
+);
impl From<Field> for FieldId {
fn from(def: Field) -> Self {
@@ -266,15 +228,7 @@ impl From<(ExpressionStoreOwnerId, LabelId)> for Label {
}
}
-impl From<hir_def::item_scope::ItemInNs> for ItemInNs {
- fn from(it: hir_def::item_scope::ItemInNs) -> Self {
- match it {
- hir_def::item_scope::ItemInNs::Types(it) => ItemInNs::Types(it.into()),
- hir_def::item_scope::ItemInNs::Values(it) => ItemInNs::Values(it.into()),
- hir_def::item_scope::ItemInNs::Macros(it) => ItemInNs::Macros(it.into()),
- }
- }
-}
+impl_from!(ItemInNsId { Types => Types, Values => Values, Macros => Macros } for ItemInNs);
impl TryFrom<ItemInNs> for hir_def::item_scope::ItemInNs {
type Error = ();