From c95bb0ba7b0dd1e5f86d5df532502744eabe92e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Rouill=C3=A9?= Date: Fri, 19 Jun 2020 20:33:04 +0200 Subject: Fix substs in resolve_value_path for ImplSelf Fixes #4953. --- crates/ra_hir_ty/src/infer/path.rs | 2 +- crates/ra_hir_ty/src/tests/regression.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) (limited to 'crates') diff --git a/crates/ra_hir_ty/src/infer/path.rs b/crates/ra_hir_ty/src/infer/path.rs index 1ad0d8397..80d7ed10e 100644 --- a/crates/ra_hir_ty/src/infer/path.rs +++ b/crates/ra_hir_ty/src/infer/path.rs @@ -81,7 +81,7 @@ impl<'a> InferenceContext<'a> { let generics = crate::utils::generics(self.db.upcast(), impl_id.into()); let substs = Substs::type_params_for_generics(&generics); let ty = self.db.impl_self_ty(impl_id).subst(&substs); - if let Some((AdtId::StructId(struct_id), _)) = ty.as_adt() { + if let Some((AdtId::StructId(struct_id), substs)) = ty.as_adt() { let ty = self.db.value_ty(struct_id.into()).subst(&substs); return Some(ty); } else { diff --git a/crates/ra_hir_ty/src/tests/regression.rs b/crates/ra_hir_ty/src/tests/regression.rs index 1f004bd63..ed43df484 100644 --- a/crates/ra_hir_ty/src/tests/regression.rs +++ b/crates/ra_hir_ty/src/tests/regression.rs @@ -633,3 +633,35 @@ where "### ); } + +#[test] +fn issue_4953() { + assert_snapshot!( + infer(r#" +pub struct Foo(pub i64); +impl Foo { + fn test() -> Self { Self(0i64) } +} +"#), + @r###" + 59..73 '{ Self(0i64) }': Foo + 61..65 'Self': Foo(i64) -> Foo + 61..71 'Self(0i64)': Foo + 66..70 '0i64': i64 + "### + ); + assert_snapshot!( + infer(r#" +pub struct Foo(pub T); +impl Foo { + fn test() -> Self { Self(0i64) } +} +"#), + @r###" + 65..79 '{ Self(0i64) }': Foo + 67..71 'Self': Foo(i64) -> Foo + 67..77 'Self(0i64)': Foo + 72..76 '0i64': i64 + "### + ); +} -- cgit v1.2.3