aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ids.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-24 20:32:41 +0000
committerAleksey Kladov <[email protected]>2019-01-24 20:32:41 +0000
commit4c514a3e02b019cdd3a17c9bcd78d93c210ab267 (patch)
treeacd4a571cec5c44d1ccbc705578f47a898da4139 /crates/ra_hir/src/ids.rs
parent11dda8a0fb905a1b41a64001d564632eb062b9aa (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.rs15
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};
5use ra_arena::{Arena, RawId, impl_arena_id}; 5use ra_arena::{Arena, RawId, impl_arena_id};
6 6
7use crate::{ 7use 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
21impl HirInterner { 22impl HirInterner {
@@ -208,6 +209,16 @@ impl EnumId {
208 } 209 }
209} 210}
210 211
212#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
213pub struct EnumVariantId(RawId);
214impl_arena_id!(EnumVariantId);
215
216impl 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)]
225pub(crate) enum DefKind { 236pub(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)