diff options
author | Aleksey Kladov <[email protected]> | 2019-09-12 22:10:16 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-09-12 22:10:16 +0100 |
commit | 45117c63884366ee82102a782a62a09fefff746b (patch) | |
tree | b66d9ca105e39b96b78bf7f3659d1858577a2c8c /crates/ra_hir/src/ty | |
parent | d8b621cf26b59ff5ae9379b50fc822590b6a3a4e (diff) |
make various enums "inherit" from AdtDef
Diffstat (limited to 'crates/ra_hir/src/ty')
-rw-r--r-- | crates/ra_hir/src/ty/infer.rs | 6 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/lower.rs | 58 |
2 files changed, 32 insertions, 32 deletions
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs index 3970c49e3..725eec834 100644 --- a/crates/ra_hir/src/ty/infer.rs +++ b/crates/ra_hir/src/ty/infer.rs | |||
@@ -668,7 +668,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
668 | // FIXME remove the duplication between here and `Ty::from_path`? | 668 | // FIXME remove the duplication between here and `Ty::from_path`? |
669 | let substs = Ty::substs_from_path(self.db, resolver, path, def); | 669 | let substs = Ty::substs_from_path(self.db, resolver, path, def); |
670 | match def { | 670 | match def { |
671 | TypableDef::Struct(s) => { | 671 | TypableDef::AdtDef(AdtDef::Struct(s)) => { |
672 | let ty = s.ty(self.db); | 672 | let ty = s.ty(self.db); |
673 | let ty = self.insert_type_vars(ty.apply_substs(substs)); | 673 | let ty = self.insert_type_vars(ty.apply_substs(substs)); |
674 | (ty, Some(s.into())) | 674 | (ty, Some(s.into())) |
@@ -678,10 +678,10 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
678 | let ty = self.insert_type_vars(ty.apply_substs(substs)); | 678 | let ty = self.insert_type_vars(ty.apply_substs(substs)); |
679 | (ty, Some(var.into())) | 679 | (ty, Some(var.into())) |
680 | } | 680 | } |
681 | TypableDef::Union(_) | 681 | TypableDef::AdtDef(AdtDef::Enum(_)) |
682 | | TypableDef::AdtDef(AdtDef::Union(_)) | ||
682 | | TypableDef::TypeAlias(_) | 683 | | TypableDef::TypeAlias(_) |
683 | | TypableDef::Function(_) | 684 | | TypableDef::Function(_) |
684 | | TypableDef::Enum(_) | ||
685 | | TypableDef::Const(_) | 685 | | TypableDef::Const(_) |
686 | | TypableDef::Static(_) | 686 | | TypableDef::Static(_) |
687 | | TypableDef::BuiltinType(_) => (Ty::Unknown, None), | 687 | | TypableDef::BuiltinType(_) => (Ty::Unknown, None), |
diff --git a/crates/ra_hir/src/ty/lower.rs b/crates/ra_hir/src/ty/lower.rs index e67525a74..587dc12ee 100644 --- a/crates/ra_hir/src/ty/lower.rs +++ b/crates/ra_hir/src/ty/lower.rs | |||
@@ -172,9 +172,7 @@ impl Ty { | |||
172 | ) -> Substs { | 172 | ) -> Substs { |
173 | let def_generic: Option<GenericDef> = match resolved { | 173 | let def_generic: Option<GenericDef> = match resolved { |
174 | TypableDef::Function(func) => Some(func.into()), | 174 | TypableDef::Function(func) => Some(func.into()), |
175 | TypableDef::Struct(s) => Some(s.into()), | 175 | TypableDef::AdtDef(adt) => Some(adt.into()), |
176 | TypableDef::Union(u) => Some(u.into()), | ||
177 | TypableDef::Enum(e) => Some(e.into()), | ||
178 | TypableDef::EnumVariant(var) => Some(var.parent_enum(db).into()), | 176 | TypableDef::EnumVariant(var) => Some(var.parent_enum(db).into()), |
179 | TypableDef::TypeAlias(t) => Some(t.into()), | 177 | TypableDef::TypeAlias(t) => Some(t.into()), |
180 | TypableDef::Const(_) | TypableDef::Static(_) | TypableDef::BuiltinType(_) => None, | 178 | TypableDef::Const(_) | TypableDef::Static(_) | TypableDef::BuiltinType(_) => None, |
@@ -193,9 +191,7 @@ impl Ty { | |||
193 | let last = path.segments.last().expect("path should have at least one segment"); | 191 | let last = path.segments.last().expect("path should have at least one segment"); |
194 | let segment = match resolved { | 192 | let segment = match resolved { |
195 | TypableDef::Function(_) | 193 | TypableDef::Function(_) |
196 | | TypableDef::Struct(_) | 194 | | TypableDef::AdtDef(_) |
197 | | TypableDef::Union(_) | ||
198 | | TypableDef::Enum(_) | ||
199 | | TypableDef::Const(_) | 195 | | TypableDef::Const(_) |
200 | | TypableDef::Static(_) | 196 | | TypableDef::Static(_) |
201 | | TypableDef::TypeAlias(_) | 197 | | TypableDef::TypeAlias(_) |
@@ -410,11 +406,11 @@ fn assoc_type_bindings_from_type_bound<'a>( | |||
410 | pub(crate) fn type_for_def(db: &impl HirDatabase, def: TypableDef, ns: Namespace) -> Ty { | 406 | pub(crate) fn type_for_def(db: &impl HirDatabase, def: TypableDef, ns: Namespace) -> Ty { |
411 | match (def, ns) { | 407 | match (def, ns) { |
412 | (TypableDef::Function(f), Namespace::Values) => type_for_fn(db, f), | 408 | (TypableDef::Function(f), Namespace::Values) => type_for_fn(db, f), |
413 | (TypableDef::Struct(s), Namespace::Types) => type_for_adt(db, s), | 409 | (TypableDef::AdtDef(AdtDef::Struct(s)), Namespace::Values) => { |
414 | (TypableDef::Struct(s), Namespace::Values) => type_for_struct_constructor(db, s), | 410 | type_for_struct_constructor(db, s) |
415 | (TypableDef::Enum(e), Namespace::Types) => type_for_adt(db, e), | 411 | } |
412 | (TypableDef::AdtDef(adt), Namespace::Types) => type_for_adt(db, adt), | ||
416 | (TypableDef::EnumVariant(v), Namespace::Values) => type_for_enum_variant_constructor(db, v), | 413 | (TypableDef::EnumVariant(v), Namespace::Values) => type_for_enum_variant_constructor(db, v), |
417 | (TypableDef::Union(u), Namespace::Types) => type_for_adt(db, u), | ||
418 | (TypableDef::TypeAlias(t), Namespace::Types) => type_for_type_alias(db, t), | 414 | (TypableDef::TypeAlias(t), Namespace::Types) => type_for_type_alias(db, t), |
419 | (TypableDef::Const(c), Namespace::Values) => type_for_const(db, c), | 415 | (TypableDef::Const(c), Namespace::Values) => type_for_const(db, c), |
420 | (TypableDef::Static(c), Namespace::Values) => type_for_static(db, c), | 416 | (TypableDef::Static(c), Namespace::Values) => type_for_static(db, c), |
@@ -422,8 +418,8 @@ pub(crate) fn type_for_def(db: &impl HirDatabase, def: TypableDef, ns: Namespace | |||
422 | 418 | ||
423 | // 'error' cases: | 419 | // 'error' cases: |
424 | (TypableDef::Function(_), Namespace::Types) => Ty::Unknown, | 420 | (TypableDef::Function(_), Namespace::Types) => Ty::Unknown, |
425 | (TypableDef::Union(_), Namespace::Values) => Ty::Unknown, | 421 | (TypableDef::AdtDef(AdtDef::Union(_)), Namespace::Values) => Ty::Unknown, |
426 | (TypableDef::Enum(_), Namespace::Values) => Ty::Unknown, | 422 | (TypableDef::AdtDef(AdtDef::Enum(_)), Namespace::Values) => Ty::Unknown, |
427 | (TypableDef::EnumVariant(_), Namespace::Types) => Ty::Unknown, | 423 | (TypableDef::EnumVariant(_), Namespace::Types) => Ty::Unknown, |
428 | (TypableDef::TypeAlias(_), Namespace::Values) => Ty::Unknown, | 424 | (TypableDef::TypeAlias(_), Namespace::Values) => Ty::Unknown, |
429 | (TypableDef::Const(_), Namespace::Types) => Ty::Unknown, | 425 | (TypableDef::Const(_), Namespace::Types) => Ty::Unknown, |
@@ -608,34 +604,38 @@ fn type_for_type_alias(db: &impl HirDatabase, t: TypeAlias) -> Ty { | |||
608 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | 604 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] |
609 | pub enum TypableDef { | 605 | pub enum TypableDef { |
610 | Function(Function), | 606 | Function(Function), |
611 | Struct(Struct), | 607 | AdtDef(AdtDef), |
612 | Union(Union), | ||
613 | Enum(Enum), | ||
614 | EnumVariant(EnumVariant), | 608 | EnumVariant(EnumVariant), |
615 | TypeAlias(TypeAlias), | 609 | TypeAlias(TypeAlias), |
616 | Const(Const), | 610 | Const(Const), |
617 | Static(Static), | 611 | Static(Static), |
618 | BuiltinType(BuiltinType), | 612 | BuiltinType(BuiltinType), |
619 | } | 613 | } |
620 | impl_froms!( | 614 | impl_froms!(TypableDef: Function, AdtDef, EnumVariant, TypeAlias, Const, Static, BuiltinType); |
621 | TypableDef: Function, | 615 | |
622 | Struct, | 616 | impl From<Struct> for TypableDef { |
623 | Union, | 617 | fn from(it: Struct) -> TypableDef { |
624 | Enum, | 618 | TypableDef::AdtDef(AdtDef::Struct(it)) |
625 | EnumVariant, | 619 | } |
626 | TypeAlias, | 620 | } |
627 | Const, | 621 | |
628 | Static, | 622 | impl From<Enum> for TypableDef { |
629 | BuiltinType | 623 | fn from(it: Enum) -> TypableDef { |
630 | ); | 624 | TypableDef::AdtDef(AdtDef::Enum(it)) |
625 | } | ||
626 | } | ||
627 | |||
628 | impl From<Union> for TypableDef { | ||
629 | fn from(it: Union) -> TypableDef { | ||
630 | TypableDef::AdtDef(AdtDef::Union(it)) | ||
631 | } | ||
632 | } | ||
631 | 633 | ||
632 | impl From<ModuleDef> for Option<TypableDef> { | 634 | impl From<ModuleDef> for Option<TypableDef> { |
633 | fn from(def: ModuleDef) -> Option<TypableDef> { | 635 | fn from(def: ModuleDef) -> Option<TypableDef> { |
634 | let res = match def { | 636 | let res = match def { |
635 | ModuleDef::Function(f) => f.into(), | 637 | ModuleDef::Function(f) => f.into(), |
636 | ModuleDef::Struct(s) => s.into(), | 638 | ModuleDef::AdtDef(adt) => adt.into(), |
637 | ModuleDef::Union(u) => u.into(), | ||
638 | ModuleDef::Enum(e) => e.into(), | ||
639 | ModuleDef::EnumVariant(v) => v.into(), | 639 | ModuleDef::EnumVariant(v) => v.into(), |
640 | ModuleDef::TypeAlias(t) => t.into(), | 640 | ModuleDef::TypeAlias(t) => t.into(), |
641 | ModuleDef::Const(v) => v.into(), | 641 | ModuleDef::Const(v) => v.into(), |