diff options
Diffstat (limited to 'crates/ra_hir_ty/src/infer.rs')
-rw-r--r-- | crates/ra_hir_ty/src/infer.rs | 18 |
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 | ||