Fix substs in resolve_value_path for ImplSelf

Fixes #4953.
This commit is contained in:
Vincent Rouillé 2020-06-19 20:33:04 +02:00
parent 90a5c4626a
commit c95bb0ba7b
No known key found for this signature in database
GPG key ID: FCA513373403B851
2 changed files with 33 additions and 1 deletions

View file

@ -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 {

View file

@ -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<T>(pub T);
impl Foo<i64> {
fn test() -> Self { Self(0i64) }
}
"#),
@r###"
65..79 '{ Self(0i64) }': Foo<i64>
67..71 'Self': Foo<i64>(i64) -> Foo<i64>
67..77 'Self(0i64)': Foo<i64>
72..76 '0i64': i64
"###
);
}