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/code_model_api.rs | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'crates/ra_hir/src/code_model_api.rs') diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 4b79358e4..5e927e41d 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -16,7 +16,7 @@ use crate::{ code_model_impl::def_id_to_ast, docs::{Documentation, Docs, docs_from_ast}, module_tree::ModuleId, - ids::{FunctionId, StructId, EnumId}, + ids::{FunctionId, StructId, EnumId, EnumVariantId}, }; /// hir::Crate describes a single crate. It's the main interface with which @@ -68,9 +68,11 @@ pub enum ModuleDef { Function(Function), Struct(Struct), Enum(Enum), + // Can't be directly declared, but can be imported. + EnumVariant(EnumVariant), Def(DefId), } -impl_froms!(ModuleDef: Module, Function, Struct, Enum); +impl_froms!(ModuleDef: Module, Function, Struct, Enum, EnumVariant); impl From for ModuleDef { fn from(it: DefId) -> ModuleDef { @@ -264,30 +266,25 @@ impl Docs for Enum { } } -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct EnumVariant { - pub(crate) def_id: DefId, + pub(crate) id: EnumVariantId, } impl EnumVariant { - pub(crate) fn new(def_id: DefId) -> Self { - EnumVariant { def_id } - } - - pub fn def_id(&self) -> DefId { - self.def_id + pub fn module(&self, db: &impl HirDatabase) -> Module { + self.id.loc(db).module } - pub fn parent_enum(&self, db: &impl HirDatabase) -> Enum { - db.enum_variant_data(self.def_id).parent_enum.clone() + db.enum_variant_data(*self).parent_enum.clone() } pub fn name(&self, db: &impl HirDatabase) -> Option { - db.enum_variant_data(self.def_id).name.clone() + db.enum_variant_data(*self).name.clone() } pub fn variant_data(&self, db: &impl HirDatabase) -> Arc { - db.enum_variant_data(self.def_id).variant_data.clone() + db.enum_variant_data(*self).variant_data.clone() } pub fn fields(&self, db: &impl HirDatabase) -> Vec { @@ -295,14 +292,14 @@ impl EnumVariant { .fields() .iter() .map(|it| StructField { - parent: self.def_id.into(), + parent: (*self).into(), name: it.name.clone(), }) .collect() } pub fn source(&self, db: &impl HirDatabase) -> (HirFileId, TreeArc) { - def_id_to_ast(db, self.def_id) + self.id.loc(db).source(db) } } -- cgit v1.2.3