diff options
Diffstat (limited to 'crates/ra_hir/src/from_id.rs')
-rw-r--r-- | crates/ra_hir/src/from_id.rs | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs index f2203e995..b7692d407 100644 --- a/crates/ra_hir/src/from_id.rs +++ b/crates/ra_hir/src/from_id.rs | |||
@@ -3,9 +3,9 @@ | |||
3 | //! It's unclear if we need this long-term, but it's definitelly useful while we | 3 | //! It's unclear if we need this long-term, but it's definitelly useful while we |
4 | //! are splitting the hir. | 4 | //! are splitting the hir. |
5 | 5 | ||
6 | use hir_def::{AdtId, AssocItemId, DefWithBodyId, EnumVariantId, ModuleDefId}; | 6 | use hir_def::{AdtId, AssocItemId, DefWithBodyId, EnumVariantId, GenericDefId, ModuleDefId}; |
7 | 7 | ||
8 | use crate::{Adt, AssocItem, DefWithBody, EnumVariant, ModuleDef}; | 8 | use crate::{Adt, AssocItem, DefWithBody, EnumVariant, GenericDef, ModuleDef}; |
9 | 9 | ||
10 | macro_rules! from_id { | 10 | macro_rules! from_id { |
11 | ($(($id:path, $ty:path)),*) => {$( | 11 | ($(($id:path, $ty:path)),*) => {$( |
@@ -41,6 +41,16 @@ impl From<AdtId> for Adt { | |||
41 | } | 41 | } |
42 | } | 42 | } |
43 | 43 | ||
44 | impl From<Adt> for AdtId { | ||
45 | fn from(id: Adt) -> Self { | ||
46 | match id { | ||
47 | Adt::Struct(it) => AdtId::StructId(it.id), | ||
48 | Adt::Union(it) => AdtId::UnionId(it.id), | ||
49 | Adt::Enum(it) => AdtId::EnumId(it.id), | ||
50 | } | ||
51 | } | ||
52 | } | ||
53 | |||
44 | impl From<EnumVariantId> for EnumVariant { | 54 | impl From<EnumVariantId> for EnumVariant { |
45 | fn from(id: EnumVariantId) -> Self { | 55 | fn from(id: EnumVariantId) -> Self { |
46 | EnumVariant { parent: id.parent.into(), id: id.local_id } | 56 | EnumVariant { parent: id.parent.into(), id: id.local_id } |
@@ -82,3 +92,33 @@ impl From<AssocItemId> for AssocItem { | |||
82 | } | 92 | } |
83 | } | 93 | } |
84 | } | 94 | } |
95 | |||
96 | impl From<GenericDef> for GenericDefId { | ||
97 | fn from(def: GenericDef) -> Self { | ||
98 | match def { | ||
99 | GenericDef::Function(it) => GenericDefId::FunctionId(it.id), | ||
100 | GenericDef::Adt(it) => GenericDefId::AdtId(it.into()), | ||
101 | GenericDef::Trait(it) => GenericDefId::TraitId(it.id), | ||
102 | GenericDef::TypeAlias(it) => GenericDefId::TypeAliasId(it.id), | ||
103 | GenericDef::ImplBlock(it) => GenericDefId::ImplId(it.id), | ||
104 | GenericDef::EnumVariant(it) => { | ||
105 | GenericDefId::EnumVariantId(EnumVariantId { parent: it.parent.id, local_id: it.id }) | ||
106 | } | ||
107 | GenericDef::Const(it) => GenericDefId::ConstId(it.id), | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | |||
112 | impl From<GenericDefId> for GenericDef { | ||
113 | fn from(def: GenericDefId) -> Self { | ||
114 | match def { | ||
115 | GenericDefId::FunctionId(it) => GenericDef::Function(it.into()), | ||
116 | GenericDefId::AdtId(it) => GenericDef::Adt(it.into()), | ||
117 | GenericDefId::TraitId(it) => GenericDef::Trait(it.into()), | ||
118 | GenericDefId::TypeAliasId(it) => GenericDef::TypeAlias(it.into()), | ||
119 | GenericDefId::ImplId(it) => GenericDef::ImplBlock(it.into()), | ||
120 | GenericDefId::EnumVariantId(it) => GenericDef::EnumVariant(it.into()), | ||
121 | GenericDefId::ConstId(it) => GenericDef::Const(it.into()), | ||
122 | } | ||
123 | } | ||
124 | } | ||