aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-09-12 22:10:16 +0100
committerAleksey Kladov <[email protected]>2019-09-12 22:10:16 +0100
commit45117c63884366ee82102a782a62a09fefff746b (patch)
treeb66d9ca105e39b96b78bf7f3659d1858577a2c8c /crates/ra_hir/src/ty
parentd8b621cf26b59ff5ae9379b50fc822590b6a3a4e (diff)
make various enums "inherit" from AdtDef
Diffstat (limited to 'crates/ra_hir/src/ty')
-rw-r--r--crates/ra_hir/src/ty/infer.rs6
-rw-r--r--crates/ra_hir/src/ty/lower.rs58
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>(
410pub(crate) fn type_for_def(db: &impl HirDatabase, def: TypableDef, ns: Namespace) -> Ty { 406pub(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)]
609pub enum TypableDef { 605pub 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}
620impl_froms!( 614impl_froms!(TypableDef: Function, AdtDef, EnumVariant, TypeAlias, Const, Static, BuiltinType);
621 TypableDef: Function, 615
622 Struct, 616impl 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, 622impl From<Enum> for TypableDef {
629 BuiltinType 623 fn from(it: Enum) -> TypableDef {
630); 624 TypableDef::AdtDef(AdtDef::Enum(it))
625 }
626}
627
628impl From<Union> for TypableDef {
629 fn from(it: Union) -> TypableDef {
630 TypableDef::AdtDef(AdtDef::Union(it))
631 }
632}
631 633
632impl From<ModuleDef> for Option<TypableDef> { 634impl 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(),