aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty/infer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty/infer.rs')
-rw-r--r--crates/ra_hir/src/ty/infer.rs23
1 files changed, 12 insertions, 11 deletions
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs
index 7f9e81d64..684d66946 100644
--- a/crates/ra_hir/src/ty/infer.rs
+++ b/crates/ra_hir/src/ty/infer.rs
@@ -24,6 +24,7 @@ use rustc_hash::FxHashMap;
24use hir_def::{ 24use hir_def::{
25 path::known, 25 path::known,
26 type_ref::{Mutability, TypeRef}, 26 type_ref::{Mutability, TypeRef},
27 AdtId,
27}; 28};
28use hir_expand::{diagnostics::DiagnosticSink, name}; 29use hir_expand::{diagnostics::DiagnosticSink, name};
29use ra_arena::map::ArenaMap; 30use ra_arena::map::ArenaMap;
@@ -43,7 +44,7 @@ use crate::{
43 resolve::{HasResolver, Resolver, TypeNs}, 44 resolve::{HasResolver, Resolver, TypeNs},
44 ty::infer::diagnostics::InferenceDiagnostic, 45 ty::infer::diagnostics::InferenceDiagnostic,
45 Adt, AssocItem, ConstData, DefWithBody, FloatTy, FnData, Function, HasBody, IntTy, Path, 46 Adt, AssocItem, ConstData, DefWithBody, FloatTy, FnData, Function, HasBody, IntTy, Path,
46 StructField, VariantDef, 47 StructField, Trait, VariantDef,
47}; 48};
48 49
49macro_rules! ty_app { 50macro_rules! ty_app {
@@ -518,17 +519,17 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
518 // FIXME: this should resolve assoc items as well, see this example: 519 // FIXME: this should resolve assoc items as well, see this example:
519 // https://play.rust-lang.org/?gist=087992e9e22495446c01c0d4e2d69521 520 // https://play.rust-lang.org/?gist=087992e9e22495446c01c0d4e2d69521
520 match resolver.resolve_path_in_type_ns_fully(self.db, &path) { 521 match resolver.resolve_path_in_type_ns_fully(self.db, &path) {
521 Some(TypeNs::Adt(Adt::Struct(it))) => it.into(), 522 Some(TypeNs::AdtId(AdtId::StructId(it))) => it.into(),
522 Some(TypeNs::Adt(Adt::Union(it))) => it.into(), 523 Some(TypeNs::AdtId(AdtId::UnionId(it))) => it.into(),
523 Some(TypeNs::AdtSelfType(adt)) => adt.into(), 524 Some(TypeNs::AdtSelfType(adt)) => adt.into(),
524 Some(TypeNs::EnumVariant(it)) => it.into(), 525 Some(TypeNs::EnumVariantId(it)) => it.into(),
525 Some(TypeNs::TypeAlias(it)) => it.into(), 526 Some(TypeNs::TypeAliasId(it)) => it.into(),
526 527
527 Some(TypeNs::SelfType(_)) | 528 Some(TypeNs::SelfType(_)) |
528 Some(TypeNs::GenericParam(_)) | 529 Some(TypeNs::GenericParam(_)) |
529 Some(TypeNs::BuiltinType(_)) | 530 Some(TypeNs::BuiltinType(_)) |
530 Some(TypeNs::Trait(_)) | 531 Some(TypeNs::TraitId(_)) |
531 Some(TypeNs::Adt(Adt::Enum(_))) | 532 Some(TypeNs::AdtId(AdtId::EnumId(_))) |
532 None => { 533 None => {
533 return (Ty::Unknown, None) 534 return (Ty::Unknown, None)
534 } 535 }
@@ -576,26 +577,26 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
576 577
577 fn resolve_into_iter_item(&self) -> Option<TypeAlias> { 578 fn resolve_into_iter_item(&self) -> Option<TypeAlias> {
578 let path = known::std_iter_into_iterator(); 579 let path = known::std_iter_into_iterator();
579 let trait_ = self.resolver.resolve_known_trait(self.db, &path)?; 580 let trait_: Trait = self.resolver.resolve_known_trait(self.db, &path)?.into();
580 trait_.associated_type_by_name(self.db, &name::ITEM_TYPE) 581 trait_.associated_type_by_name(self.db, &name::ITEM_TYPE)
581 } 582 }
582 583
583 fn resolve_ops_try_ok(&self) -> Option<TypeAlias> { 584 fn resolve_ops_try_ok(&self) -> Option<TypeAlias> {
584 let path = known::std_ops_try(); 585 let path = known::std_ops_try();
585 let trait_ = self.resolver.resolve_known_trait(self.db, &path)?; 586 let trait_: Trait = self.resolver.resolve_known_trait(self.db, &path)?.into();
586 trait_.associated_type_by_name(self.db, &name::OK_TYPE) 587 trait_.associated_type_by_name(self.db, &name::OK_TYPE)
587 } 588 }
588 589
589 fn resolve_future_future_output(&self) -> Option<TypeAlias> { 590 fn resolve_future_future_output(&self) -> Option<TypeAlias> {
590 let path = known::std_future_future(); 591 let path = known::std_future_future();
591 let trait_ = self.resolver.resolve_known_trait(self.db, &path)?; 592 let trait_: Trait = self.resolver.resolve_known_trait(self.db, &path)?.into();
592 trait_.associated_type_by_name(self.db, &name::OUTPUT_TYPE) 593 trait_.associated_type_by_name(self.db, &name::OUTPUT_TYPE)
593 } 594 }
594 595
595 fn resolve_boxed_box(&self) -> Option<Adt> { 596 fn resolve_boxed_box(&self) -> Option<Adt> {
596 let path = known::std_boxed_box(); 597 let path = known::std_boxed_box();
597 let struct_ = self.resolver.resolve_known_struct(self.db, &path)?; 598 let struct_ = self.resolver.resolve_known_struct(self.db, &path)?;
598 Some(Adt::Struct(struct_)) 599 Some(Adt::Struct(struct_.into()))
599 } 600 }
600} 601}
601 602