aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs44
1 files changed, 38 insertions, 6 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 2bac6122b..c1938bd86 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -127,9 +127,7 @@ impl BuiltinType {
127pub enum ModuleDef { 127pub enum ModuleDef {
128 Module(Module), 128 Module(Module),
129 Function(Function), 129 Function(Function),
130 Struct(Struct), 130 Adt(Adt),
131 Union(Union),
132 Enum(Enum),
133 // Can't be directly declared, but can be imported. 131 // Can't be directly declared, but can be imported.
134 EnumVariant(EnumVariant), 132 EnumVariant(EnumVariant),
135 Const(Const), 133 Const(Const),
@@ -141,9 +139,7 @@ pub enum ModuleDef {
141impl_froms!( 139impl_froms!(
142 ModuleDef: Module, 140 ModuleDef: Module,
143 Function, 141 Function,
144 Struct, 142 Adt(Struct, Enum, Union),
145 Union,
146 Enum,
147 EnumVariant, 143 EnumVariant,
148 Const, 144 Const,
149 Static, 145 Static,
@@ -500,6 +496,42 @@ impl EnumVariant {
500 } 496 }
501} 497}
502 498
499/// A Data Type
500#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
501pub enum Adt {
502 Struct(Struct),
503 Union(Union),
504 Enum(Enum),
505}
506impl_froms!(Adt: Struct, Union, Enum);
507
508impl Adt {
509 pub fn ty(self, db: &impl HirDatabase) -> Ty {
510 match self {
511 Adt::Struct(it) => it.ty(db),
512 Adt::Union(it) => it.ty(db),
513 Adt::Enum(it) => it.ty(db),
514 }
515 }
516
517 pub(crate) fn krate(self, db: &impl HirDatabase) -> Option<Crate> {
518 match self {
519 Adt::Struct(s) => s.module(db),
520 Adt::Union(s) => s.module(db),
521 Adt::Enum(e) => e.module(db),
522 }
523 .krate(db)
524 }
525
526 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
527 match self {
528 Adt::Struct(it) => it.resolver(db),
529 Adt::Union(it) => it.resolver(db),
530 Adt::Enum(it) => it.resolver(db),
531 }
532 }
533}
534
503/// The defs which have a body. 535/// The defs which have a body.
504#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 536#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
505pub enum DefWithBody { 537pub enum DefWithBody {