aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/infer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_ty/src/infer.rs')
-rw-r--r--crates/ra_hir_ty/src/infer.rs18
1 files changed, 5 insertions, 13 deletions
diff --git a/crates/ra_hir_ty/src/infer.rs b/crates/ra_hir_ty/src/infer.rs
index b4a3e1675..f7ef09f0e 100644
--- a/crates/ra_hir_ty/src/infer.rs
+++ b/crates/ra_hir_ty/src/infer.rs
@@ -279,11 +279,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
279 impl_trait_mode: ImplTraitLoweringMode, 279 impl_trait_mode: ImplTraitLoweringMode,
280 ) -> Ty { 280 ) -> Ty {
281 // FIXME use right resolver for block 281 // FIXME use right resolver for block
282 let ctx = crate::lower::TyLoweringContext { 282 let ctx = crate::lower::TyLoweringContext::new(self.db, &self.resolver).with_impl_trait_mode(impl_trait_mode);
283 db: self.db,
284 resolver: &self.resolver,
285 impl_trait_mode,
286 };
287 let ty = Ty::from_hir(&ctx, type_ref); 283 let ty = Ty::from_hir(&ctx, type_ref);
288 let ty = self.insert_type_vars(ty); 284 let ty = self.insert_type_vars(ty);
289 self.normalize_associated_types_in(ty) 285 self.normalize_associated_types_in(ty)
@@ -457,24 +453,20 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
457 None => return (Ty::Unknown, None), 453 None => return (Ty::Unknown, None),
458 }; 454 };
459 let resolver = &self.resolver; 455 let resolver = &self.resolver;
460 let ctx = crate::lower::TyLoweringContext { 456 let ctx = crate::lower::TyLoweringContext::new(self.db, &self.resolver);
461 db: self.db,
462 resolver: &self.resolver,
463 impl_trait_mode: ImplTraitLoweringMode::Disallowed,
464 };
465 // FIXME: this should resolve assoc items as well, see this example: 457 // FIXME: this should resolve assoc items as well, see this example:
466 // https://play.rust-lang.org/?gist=087992e9e22495446c01c0d4e2d69521 458 // https://play.rust-lang.org/?gist=087992e9e22495446c01c0d4e2d69521
467 match resolver.resolve_path_in_type_ns_fully(self.db, path.mod_path()) { 459 match resolver.resolve_path_in_type_ns_fully(self.db, path.mod_path()) {
468 Some(TypeNs::AdtId(AdtId::StructId(strukt))) => { 460 Some(TypeNs::AdtId(AdtId::StructId(strukt))) => {
469 let substs = Ty::substs_from_path(&ctx, path, strukt.into()); 461 let substs = Ty::substs_from_path(&ctx, path, strukt.into());
470 let ty = self.db.ty(strukt.into()); 462 let ty = self.db.ty(strukt.into());
471 let ty = self.insert_type_vars(ty.apply_substs(substs)); 463 let ty = self.insert_type_vars(ty.subst(&substs));
472 (ty, Some(strukt.into())) 464 (ty, Some(strukt.into()))
473 } 465 }
474 Some(TypeNs::EnumVariantId(var)) => { 466 Some(TypeNs::EnumVariantId(var)) => {
475 let substs = Ty::substs_from_path(&ctx, path, var.into()); 467 let substs = Ty::substs_from_path(&ctx, path, var.into());
476 let ty = self.db.ty(var.parent.into()); 468 let ty = self.db.ty(var.parent.into());
477 let ty = self.insert_type_vars(ty.apply_substs(substs)); 469 let ty = self.insert_type_vars(ty.subst(&substs));
478 (ty, Some(var.into())) 470 (ty, Some(var.into()))
479 } 471 }
480 Some(_) | None => (Ty::Unknown, None), 472 Some(_) | None => (Ty::Unknown, None),
@@ -492,7 +484,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
492 484
493 self.infer_pat(*pat, &ty, BindingMode::default()); 485 self.infer_pat(*pat, &ty, BindingMode::default());
494 } 486 }
495 let return_ty = self.make_ty_with_mode(&data.ret_type, ImplTraitLoweringMode::Placeholder); 487 let return_ty = self.make_ty_with_mode(&data.ret_type, ImplTraitLoweringMode::Variable);
496 self.return_ty = self.insert_vars_for_impl_trait(return_ty); 488 self.return_ty = self.insert_vars_for_impl_trait(return_ty);
497 } 489 }
498 490