diff options
Diffstat (limited to 'crates/hir/src/code_model.rs')
-rw-r--r-- | crates/hir/src/code_model.rs | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/crates/hir/src/code_model.rs b/crates/hir/src/code_model.rs index 3248f6d20..d6c7e71ea 100644 --- a/crates/hir/src/code_model.rs +++ b/crates/hir/src/code_model.rs | |||
@@ -161,7 +161,7 @@ pub enum ModuleDef { | |||
161 | Function(Function), | 161 | Function(Function), |
162 | Adt(Adt), | 162 | Adt(Adt), |
163 | // Can't be directly declared, but can be imported. | 163 | // Can't be directly declared, but can be imported. |
164 | EnumVariant(EnumVariant), | 164 | Variant(Variant), |
165 | Const(Const), | 165 | Const(Const), |
166 | Static(Static), | 166 | Static(Static), |
167 | Trait(Trait), | 167 | Trait(Trait), |
@@ -172,7 +172,7 @@ impl_from!( | |||
172 | Module, | 172 | Module, |
173 | Function, | 173 | Function, |
174 | Adt(Struct, Enum, Union), | 174 | Adt(Struct, Enum, Union), |
175 | EnumVariant, | 175 | Variant, |
176 | Const, | 176 | Const, |
177 | Static, | 177 | Static, |
178 | Trait, | 178 | Trait, |
@@ -186,7 +186,7 @@ impl From<VariantDef> for ModuleDef { | |||
186 | match var { | 186 | match var { |
187 | VariantDef::Struct(t) => Adt::from(t).into(), | 187 | VariantDef::Struct(t) => Adt::from(t).into(), |
188 | VariantDef::Union(t) => Adt::from(t).into(), | 188 | VariantDef::Union(t) => Adt::from(t).into(), |
189 | VariantDef::EnumVariant(t) => t.into(), | 189 | VariantDef::Variant(t) => t.into(), |
190 | } | 190 | } |
191 | } | 191 | } |
192 | } | 192 | } |
@@ -197,7 +197,7 @@ impl ModuleDef { | |||
197 | ModuleDef::Module(it) => it.parent(db), | 197 | ModuleDef::Module(it) => it.parent(db), |
198 | ModuleDef::Function(it) => Some(it.module(db)), | 198 | ModuleDef::Function(it) => Some(it.module(db)), |
199 | ModuleDef::Adt(it) => Some(it.module(db)), | 199 | ModuleDef::Adt(it) => Some(it.module(db)), |
200 | ModuleDef::EnumVariant(it) => Some(it.module(db)), | 200 | ModuleDef::Variant(it) => Some(it.module(db)), |
201 | ModuleDef::Const(it) => Some(it.module(db)), | 201 | ModuleDef::Const(it) => Some(it.module(db)), |
202 | ModuleDef::Static(it) => Some(it.module(db)), | 202 | ModuleDef::Static(it) => Some(it.module(db)), |
203 | ModuleDef::Trait(it) => Some(it.module(db)), | 203 | ModuleDef::Trait(it) => Some(it.module(db)), |
@@ -221,7 +221,7 @@ impl ModuleDef { | |||
221 | ModuleDef::Module(it) => it.parent(db)?, | 221 | ModuleDef::Module(it) => it.parent(db)?, |
222 | ModuleDef::Function(it) => return Some(it.visibility(db)), | 222 | ModuleDef::Function(it) => return Some(it.visibility(db)), |
223 | ModuleDef::Adt(it) => it.module(db), | 223 | ModuleDef::Adt(it) => it.module(db), |
224 | ModuleDef::EnumVariant(it) => { | 224 | ModuleDef::Variant(it) => { |
225 | let parent = it.parent_enum(db); | 225 | let parent = it.parent_enum(db); |
226 | let module = it.module(db); | 226 | let module = it.module(db); |
227 | return module.visibility_of(db, &ModuleDef::Adt(Adt::Enum(parent))); | 227 | return module.visibility_of(db, &ModuleDef::Adt(Adt::Enum(parent))); |
@@ -241,7 +241,7 @@ impl ModuleDef { | |||
241 | ModuleDef::Adt(it) => Some(it.name(db)), | 241 | ModuleDef::Adt(it) => Some(it.name(db)), |
242 | ModuleDef::Trait(it) => Some(it.name(db)), | 242 | ModuleDef::Trait(it) => Some(it.name(db)), |
243 | ModuleDef::Function(it) => Some(it.name(db)), | 243 | ModuleDef::Function(it) => Some(it.name(db)), |
244 | ModuleDef::EnumVariant(it) => Some(it.name(db)), | 244 | ModuleDef::Variant(it) => Some(it.name(db)), |
245 | ModuleDef::TypeAlias(it) => Some(it.name(db)), | 245 | ModuleDef::TypeAlias(it) => Some(it.name(db)), |
246 | ModuleDef::Module(it) => it.name(db), | 246 | ModuleDef::Module(it) => it.name(db), |
247 | ModuleDef::Const(it) => it.name(db), | 247 | ModuleDef::Const(it) => it.name(db), |
@@ -455,7 +455,7 @@ impl Field { | |||
455 | let generic_def_id: GenericDefId = match self.parent { | 455 | let generic_def_id: GenericDefId = match self.parent { |
456 | VariantDef::Struct(it) => it.id.into(), | 456 | VariantDef::Struct(it) => it.id.into(), |
457 | VariantDef::Union(it) => it.id.into(), | 457 | VariantDef::Union(it) => it.id.into(), |
458 | VariantDef::EnumVariant(it) => it.parent.id.into(), | 458 | VariantDef::Variant(it) => it.parent.id.into(), |
459 | }; | 459 | }; |
460 | let substs = Substs::type_params(db, generic_def_id); | 460 | let substs = Substs::type_params(db, generic_def_id); |
461 | let ty = db.field_types(var_id)[self.id].clone().subst(&substs); | 461 | let ty = db.field_types(var_id)[self.id].clone().subst(&substs); |
@@ -566,12 +566,8 @@ impl Enum { | |||
566 | db.enum_data(self.id).name.clone() | 566 | db.enum_data(self.id).name.clone() |
567 | } | 567 | } |
568 | 568 | ||
569 | pub fn variants(self, db: &dyn HirDatabase) -> Vec<EnumVariant> { | 569 | pub fn variants(self, db: &dyn HirDatabase) -> Vec<Variant> { |
570 | db.enum_data(self.id) | 570 | db.enum_data(self.id).variants.iter().map(|(id, _)| Variant { parent: self, id }).collect() |
571 | .variants | ||
572 | .iter() | ||
573 | .map(|(id, _)| EnumVariant { parent: self, id }) | ||
574 | .collect() | ||
575 | } | 571 | } |
576 | 572 | ||
577 | pub fn ty(self, db: &dyn HirDatabase) -> Type { | 573 | pub fn ty(self, db: &dyn HirDatabase) -> Type { |
@@ -580,12 +576,12 @@ impl Enum { | |||
580 | } | 576 | } |
581 | 577 | ||
582 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 578 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
583 | pub struct EnumVariant { | 579 | pub struct Variant { |
584 | pub(crate) parent: Enum, | 580 | pub(crate) parent: Enum, |
585 | pub(crate) id: LocalEnumVariantId, | 581 | pub(crate) id: LocalEnumVariantId, |
586 | } | 582 | } |
587 | 583 | ||
588 | impl EnumVariant { | 584 | impl Variant { |
589 | pub fn module(self, db: &dyn HirDatabase) -> Module { | 585 | pub fn module(self, db: &dyn HirDatabase) -> Module { |
590 | self.parent.module(db) | 586 | self.parent.module(db) |
591 | } | 587 | } |
@@ -662,16 +658,16 @@ impl Adt { | |||
662 | pub enum VariantDef { | 658 | pub enum VariantDef { |
663 | Struct(Struct), | 659 | Struct(Struct), |
664 | Union(Union), | 660 | Union(Union), |
665 | EnumVariant(EnumVariant), | 661 | Variant(Variant), |
666 | } | 662 | } |
667 | impl_from!(Struct, Union, EnumVariant for VariantDef); | 663 | impl_from!(Struct, Union, Variant for VariantDef); |
668 | 664 | ||
669 | impl VariantDef { | 665 | impl VariantDef { |
670 | pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> { | 666 | pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> { |
671 | match self { | 667 | match self { |
672 | VariantDef::Struct(it) => it.fields(db), | 668 | VariantDef::Struct(it) => it.fields(db), |
673 | VariantDef::Union(it) => it.fields(db), | 669 | VariantDef::Union(it) => it.fields(db), |
674 | VariantDef::EnumVariant(it) => it.fields(db), | 670 | VariantDef::Variant(it) => it.fields(db), |
675 | } | 671 | } |
676 | } | 672 | } |
677 | 673 | ||
@@ -679,7 +675,7 @@ impl VariantDef { | |||
679 | match self { | 675 | match self { |
680 | VariantDef::Struct(it) => it.module(db), | 676 | VariantDef::Struct(it) => it.module(db), |
681 | VariantDef::Union(it) => it.module(db), | 677 | VariantDef::Union(it) => it.module(db), |
682 | VariantDef::EnumVariant(it) => it.module(db), | 678 | VariantDef::Variant(it) => it.module(db), |
683 | } | 679 | } |
684 | } | 680 | } |
685 | 681 | ||
@@ -687,7 +683,7 @@ impl VariantDef { | |||
687 | match self { | 683 | match self { |
688 | VariantDef::Struct(s) => s.name(db), | 684 | VariantDef::Struct(s) => s.name(db), |
689 | VariantDef::Union(u) => u.name(db), | 685 | VariantDef::Union(u) => u.name(db), |
690 | VariantDef::EnumVariant(e) => e.name(db), | 686 | VariantDef::Variant(e) => e.name(db), |
691 | } | 687 | } |
692 | } | 688 | } |
693 | 689 | ||
@@ -695,7 +691,7 @@ impl VariantDef { | |||
695 | match self { | 691 | match self { |
696 | VariantDef::Struct(it) => it.variant_data(db), | 692 | VariantDef::Struct(it) => it.variant_data(db), |
697 | VariantDef::Union(it) => it.variant_data(db), | 693 | VariantDef::Union(it) => it.variant_data(db), |
698 | VariantDef::EnumVariant(it) => it.variant_data(db), | 694 | VariantDef::Variant(it) => it.variant_data(db), |
699 | } | 695 | } |
700 | } | 696 | } |
701 | } | 697 | } |
@@ -1095,7 +1091,7 @@ pub enum GenericDef { | |||
1095 | Impl(Impl), | 1091 | Impl(Impl), |
1096 | // enum variants cannot have generics themselves, but their parent enums | 1092 | // enum variants cannot have generics themselves, but their parent enums |
1097 | // can, and this makes some code easier to write | 1093 | // can, and this makes some code easier to write |
1098 | EnumVariant(EnumVariant), | 1094 | Variant(Variant), |
1099 | // consts can have type parameters from their parents (i.e. associated consts of traits) | 1095 | // consts can have type parameters from their parents (i.e. associated consts of traits) |
1100 | Const(Const), | 1096 | Const(Const), |
1101 | } | 1097 | } |
@@ -1105,7 +1101,7 @@ impl_from!( | |||
1105 | Trait, | 1101 | Trait, |
1106 | TypeAlias, | 1102 | TypeAlias, |
1107 | Impl, | 1103 | Impl, |
1108 | EnumVariant, | 1104 | Variant, |
1109 | Const | 1105 | Const |
1110 | for GenericDef | 1106 | for GenericDef |
1111 | ); | 1107 | ); |
@@ -1847,7 +1843,7 @@ pub struct Callable { | |||
1847 | pub enum CallableKind { | 1843 | pub enum CallableKind { |
1848 | Function(Function), | 1844 | Function(Function), |
1849 | TupleStruct(Struct), | 1845 | TupleStruct(Struct), |
1850 | TupleEnumVariant(EnumVariant), | 1846 | TupleEnumVariant(Variant), |
1851 | Closure, | 1847 | Closure, |
1852 | } | 1848 | } |
1853 | 1849 | ||