From 45117c63884366ee82102a782a62a09fefff746b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 13 Sep 2019 00:10:16 +0300 Subject: make various enums "inherit" from AdtDef --- crates/ra_hir/src/code_model.rs | 61 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 6 deletions(-) (limited to 'crates/ra_hir/src/code_model.rs') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 2bac6122b..026753c9f 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -127,9 +127,7 @@ impl BuiltinType { pub enum ModuleDef { Module(Module), Function(Function), - Struct(Struct), - Union(Union), - Enum(Enum), + AdtDef(AdtDef), // Can't be directly declared, but can be imported. EnumVariant(EnumVariant), Const(Const), @@ -141,9 +139,7 @@ pub enum ModuleDef { impl_froms!( ModuleDef: Module, Function, - Struct, - Union, - Enum, + AdtDef, EnumVariant, Const, Static, @@ -152,6 +148,24 @@ impl_froms!( BuiltinType ); +impl From for ModuleDef { + fn from(it: Struct) -> ModuleDef { + ModuleDef::AdtDef(AdtDef::Struct(it)) + } +} + +impl From for ModuleDef { + fn from(it: Enum) -> ModuleDef { + ModuleDef::AdtDef(AdtDef::Enum(it)) + } +} + +impl From for ModuleDef { + fn from(it: Union) -> ModuleDef { + ModuleDef::AdtDef(AdtDef::Union(it)) + } +} + pub enum ModuleSource { SourceFile(ast::SourceFile), Module(ast::Module), @@ -500,6 +514,41 @@ impl EnumVariant { } } +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum AdtDef { + Struct(Struct), + Union(Union), + Enum(Enum), +} +impl_froms!(AdtDef: Struct, Union, Enum); + +impl AdtDef { + pub fn ty(self, db: &impl HirDatabase) -> Ty { + match self { + AdtDef::Struct(it) => it.ty(db), + AdtDef::Union(it) => it.ty(db), + AdtDef::Enum(it) => it.ty(db), + } + } + + pub(crate) fn krate(self, db: &impl HirDatabase) -> Option { + match self { + AdtDef::Struct(s) => s.module(db), + AdtDef::Union(s) => s.module(db), + AdtDef::Enum(e) => e.module(db), + } + .krate(db) + } + + pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver { + match self { + AdtDef::Struct(it) => it.resolver(db), + AdtDef::Union(it) => it.resolver(db), + AdtDef::Enum(it) => it.resolver(db), + } + } +} + /// The defs which have a body. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum DefWithBody { -- cgit v1.2.3 From bcf30d389c3744ab517372431eb7e1e1dfcc50df Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 13 Sep 2019 00:31:04 +0300 Subject: generalize impl_froms to nested enums --- crates/ra_hir/src/code_model.rs | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) (limited to 'crates/ra_hir/src/code_model.rs') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 026753c9f..a10e795ce 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -139,7 +139,7 @@ pub enum ModuleDef { impl_froms!( ModuleDef: Module, Function, - AdtDef, + AdtDef(Struct, Enum, Union), EnumVariant, Const, Static, @@ -148,24 +148,6 @@ impl_froms!( BuiltinType ); -impl From for ModuleDef { - fn from(it: Struct) -> ModuleDef { - ModuleDef::AdtDef(AdtDef::Struct(it)) - } -} - -impl From for ModuleDef { - fn from(it: Enum) -> ModuleDef { - ModuleDef::AdtDef(AdtDef::Enum(it)) - } -} - -impl From for ModuleDef { - fn from(it: Union) -> ModuleDef { - ModuleDef::AdtDef(AdtDef::Union(it)) - } -} - pub enum ModuleSource { SourceFile(ast::SourceFile), Module(ast::Module), -- cgit v1.2.3 From 114a1b878e95c20490af574550ea0825b7a8f9d1 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 13 Sep 2019 00:34:52 +0300 Subject: rename AdtDef -> Adt --- crates/ra_hir/src/code_model.rs | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'crates/ra_hir/src/code_model.rs') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index a10e795ce..c1938bd86 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -127,7 +127,7 @@ impl BuiltinType { pub enum ModuleDef { Module(Module), Function(Function), - AdtDef(AdtDef), + Adt(Adt), // Can't be directly declared, but can be imported. EnumVariant(EnumVariant), Const(Const), @@ -139,7 +139,7 @@ pub enum ModuleDef { impl_froms!( ModuleDef: Module, Function, - AdtDef(Struct, Enum, Union), + Adt(Struct, Enum, Union), EnumVariant, Const, Static, @@ -496,37 +496,38 @@ impl EnumVariant { } } +/// A Data Type #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -pub enum AdtDef { +pub enum Adt { Struct(Struct), Union(Union), Enum(Enum), } -impl_froms!(AdtDef: Struct, Union, Enum); +impl_froms!(Adt: Struct, Union, Enum); -impl AdtDef { +impl Adt { pub fn ty(self, db: &impl HirDatabase) -> Ty { match self { - AdtDef::Struct(it) => it.ty(db), - AdtDef::Union(it) => it.ty(db), - AdtDef::Enum(it) => it.ty(db), + Adt::Struct(it) => it.ty(db), + Adt::Union(it) => it.ty(db), + Adt::Enum(it) => it.ty(db), } } pub(crate) fn krate(self, db: &impl HirDatabase) -> Option { match self { - AdtDef::Struct(s) => s.module(db), - AdtDef::Union(s) => s.module(db), - AdtDef::Enum(e) => e.module(db), + Adt::Struct(s) => s.module(db), + Adt::Union(s) => s.module(db), + Adt::Enum(e) => e.module(db), } .krate(db) } pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver { match self { - AdtDef::Struct(it) => it.resolver(db), - AdtDef::Union(it) => it.resolver(db), - AdtDef::Enum(it) => it.resolver(db), + Adt::Struct(it) => it.resolver(db), + Adt::Union(it) => it.resolver(db), + Adt::Enum(it) => it.resolver(db), } } } -- cgit v1.2.3