diff options
Diffstat (limited to 'crates/ra_hir/src/adt.rs')
-rw-r--r-- | crates/ra_hir/src/adt.rs | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index ad3f9c405..6b13b464d 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs | |||
@@ -3,17 +3,32 @@ | |||
3 | 3 | ||
4 | use std::sync::Arc; | 4 | use std::sync::Arc; |
5 | 5 | ||
6 | use ra_syntax::{ | 6 | use ra_syntax::ast::{self, NameOwner, StructFlavor}; |
7 | ast::{self, NameOwner, StructFlavor} | ||
8 | }; | ||
9 | 7 | ||
10 | use crate::{ | 8 | use crate::{ |
11 | Name, AsName, Struct, Enum, EnumVariant, | 9 | Name, AsName, Struct, Enum, EnumVariant, Crate, |
12 | HirDatabase, | 10 | HirDatabase, |
13 | type_ref::TypeRef, | 11 | type_ref::TypeRef, |
14 | ids::LocationCtx, | 12 | ids::LocationCtx, |
15 | }; | 13 | }; |
16 | 14 | ||
15 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | ||
16 | pub enum AdtDef { | ||
17 | Struct(Struct), | ||
18 | Enum(Enum), | ||
19 | } | ||
20 | impl_froms!(AdtDef: Struct, Enum); | ||
21 | |||
22 | impl AdtDef { | ||
23 | pub(crate) fn krate(self, db: &impl HirDatabase) -> Option<Crate> { | ||
24 | match self { | ||
25 | AdtDef::Struct(s) => s.module(db), | ||
26 | AdtDef::Enum(e) => e.module(db), | ||
27 | } | ||
28 | .krate(db) | ||
29 | } | ||
30 | } | ||
31 | |||
17 | impl Struct { | 32 | impl Struct { |
18 | pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc<VariantData> { | 33 | pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc<VariantData> { |
19 | db.struct_data((*self).into()).variant_data.clone() | 34 | db.struct_data((*self).into()).variant_data.clone() |