From 978de5cf8bfd2ff82696fc8d5369b41e147431c3 Mon Sep 17 00:00:00 2001 From: Marcus Klaas de Vries Date: Tue, 8 Jan 2019 16:01:19 +0100 Subject: Implement type inference for enum variants --- crates/ra_hir/src/code_model_api.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (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 fa3e4baa7..c7d1bf0a6 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -44,6 +44,7 @@ pub enum Def { Module(Module), Struct(Struct), Enum(Enum), + EnumVariant(EnumVariant), Function(Function), Item, } @@ -188,6 +189,10 @@ pub struct Enum { } impl Enum { + pub(crate) fn new(def_id: DefId) -> Self { + Enum { def_id } + } + pub fn def_id(&self) -> DefId { self.def_id } @@ -196,11 +201,38 @@ impl Enum { Ok(db.enum_data(self.def_id)?.name.clone()) } - pub fn variants(&self, db: &impl HirDatabase) -> Cancelable)>> { + pub fn variants(&self, db: &impl HirDatabase) -> Cancelable>> { Ok(db.enum_data(self.def_id)?.variants.clone()) } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct EnumVariant { + pub(crate) def_id: DefId, +} + +impl EnumVariant { + pub(crate) fn new(def_id: DefId) -> Self { + EnumVariant { def_id } + } + + pub fn def_id(&self) -> DefId { + self.def_id + } + + pub fn parent_enum(&self, db: &impl HirDatabase) -> Cancelable { + Ok(db.enum_variant_data(self.def_id)?.parent_enum.clone()) + } + + pub fn name(&self, db: &impl HirDatabase) -> Cancelable> { + Ok(db.enum_variant_data(self.def_id)?.name.clone()) + } + + pub fn variant_data(&self, db: &impl HirDatabase) -> Cancelable> { + Ok(db.enum_variant_data(self.def_id)?.variant_data.clone()) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Function { pub(crate) def_id: DefId, -- cgit v1.2.3