From 4c514a3e02b019cdd3a17c9bcd78d93c210ab267 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 24 Jan 2019 23:32:41 +0300 Subject: move enum variant to the new API --- crates/ra_hir/src/ids.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'crates/ra_hir/src/ids.rs') 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}; use ra_arena::{Arena, RawId, impl_arena_id}; use crate::{ - HirDatabase, Def, EnumVariant, Crate, + HirDatabase, Def, Crate, Module, Trait, Type, Static, Const, }; @@ -16,6 +16,7 @@ pub struct HirInterner { pub(crate) fns: LocationIntener, FunctionId>, pub(crate) structs: LocationIntener, StructId>, pub(crate) enums: LocationIntener, EnumId>, + pub(crate) enum_variants: LocationIntener, EnumVariantId>, } impl HirInterner { @@ -208,6 +209,16 @@ impl EnumId { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct EnumVariantId(RawId); +impl_arena_id!(EnumVariantId); + +impl EnumVariantId { + pub(crate) fn loc(self, db: &impl AsRef) -> ItemLoc { + db.as_ref().enum_variants.id2loc(self) + } +} + /// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) /// in a specific module. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -223,7 +234,6 @@ pub struct DefLoc { #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub(crate) enum DefKind { - EnumVariant, Const, Static, Trait, @@ -249,7 +259,6 @@ impl DefId { pub fn resolve(self, db: &impl HirDatabase) -> Def { let loc = self.loc(db); match loc.kind { - DefKind::EnumVariant => Def::EnumVariant(EnumVariant::new(self)), DefKind::Const => { let def = Const::new(self); Def::Const(def) -- cgit v1.2.3