diff options
author | Aleksey Kladov <[email protected]> | 2019-01-24 20:32:41 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-01-24 20:32:41 +0000 |
commit | 4c514a3e02b019cdd3a17c9bcd78d93c210ab267 (patch) | |
tree | acd4a571cec5c44d1ccbc705578f47a898da4139 /crates/ra_hir/src/ids.rs | |
parent | 11dda8a0fb905a1b41a64001d564632eb062b9aa (diff) |
move enum variant to the new API
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r-- | crates/ra_hir/src/ids.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index 6375c76c9..8cdc7ee56 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs | |||
@@ -5,7 +5,7 @@ use ra_syntax::{TreeArc, SyntaxNode, SourceFile, AstNode, ast}; | |||
5 | use ra_arena::{Arena, RawId, impl_arena_id}; | 5 | use ra_arena::{Arena, RawId, impl_arena_id}; |
6 | 6 | ||
7 | use crate::{ | 7 | use crate::{ |
8 | HirDatabase, Def, EnumVariant, Crate, | 8 | HirDatabase, Def, Crate, |
9 | Module, Trait, Type, Static, Const, | 9 | Module, Trait, Type, Static, Const, |
10 | }; | 10 | }; |
11 | 11 | ||
@@ -16,6 +16,7 @@ pub struct HirInterner { | |||
16 | pub(crate) fns: LocationIntener<ItemLoc<ast::FnDef>, FunctionId>, | 16 | pub(crate) fns: LocationIntener<ItemLoc<ast::FnDef>, FunctionId>, |
17 | pub(crate) structs: LocationIntener<ItemLoc<ast::StructDef>, StructId>, | 17 | pub(crate) structs: LocationIntener<ItemLoc<ast::StructDef>, StructId>, |
18 | pub(crate) enums: LocationIntener<ItemLoc<ast::EnumDef>, EnumId>, | 18 | pub(crate) enums: LocationIntener<ItemLoc<ast::EnumDef>, EnumId>, |
19 | pub(crate) enum_variants: LocationIntener<ItemLoc<ast::EnumVariant>, EnumVariantId>, | ||
19 | } | 20 | } |
20 | 21 | ||
21 | impl HirInterner { | 22 | impl HirInterner { |
@@ -208,6 +209,16 @@ impl EnumId { | |||
208 | } | 209 | } |
209 | } | 210 | } |
210 | 211 | ||
212 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
213 | pub struct EnumVariantId(RawId); | ||
214 | impl_arena_id!(EnumVariantId); | ||
215 | |||
216 | impl EnumVariantId { | ||
217 | pub(crate) fn loc(self, db: &impl AsRef<HirInterner>) -> ItemLoc<ast::EnumVariant> { | ||
218 | db.as_ref().enum_variants.id2loc(self) | ||
219 | } | ||
220 | } | ||
221 | |||
211 | /// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) | 222 | /// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) |
212 | /// in a specific module. | 223 | /// in a specific module. |
213 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 224 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
@@ -223,7 +234,6 @@ pub struct DefLoc { | |||
223 | 234 | ||
224 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | 235 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] |
225 | pub(crate) enum DefKind { | 236 | pub(crate) enum DefKind { |
226 | EnumVariant, | ||
227 | Const, | 237 | Const, |
228 | Static, | 238 | Static, |
229 | Trait, | 239 | Trait, |
@@ -249,7 +259,6 @@ impl DefId { | |||
249 | pub fn resolve(self, db: &impl HirDatabase) -> Def { | 259 | pub fn resolve(self, db: &impl HirDatabase) -> Def { |
250 | let loc = self.loc(db); | 260 | let loc = self.loc(db); |
251 | match loc.kind { | 261 | match loc.kind { |
252 | DefKind::EnumVariant => Def::EnumVariant(EnumVariant::new(self)), | ||
253 | DefKind::Const => { | 262 | DefKind::Const => { |
254 | let def = Const::new(self); | 263 | let def = Const::new(self); |
255 | Def::Const(def) | 264 | Def::Const(def) |