diff options
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 44 |
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 { | |||
127 | pub enum ModuleDef { | 127 | pub 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 { | |||
141 | impl_froms!( | 139 | impl_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)] | ||
501 | pub enum Adt { | ||
502 | Struct(Struct), | ||
503 | Union(Union), | ||
504 | Enum(Enum), | ||
505 | } | ||
506 | impl_froms!(Adt: Struct, Union, Enum); | ||
507 | |||
508 | impl 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)] |
505 | pub enum DefWithBody { | 537 | pub enum DefWithBody { |