mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 21:05:02 +00:00
parent
90a5c4626a
commit
c95bb0ba7b
2 changed files with 33 additions and 1 deletions
|
@ -81,7 +81,7 @@ impl<'a> InferenceContext<'a> {
|
||||||
let generics = crate::utils::generics(self.db.upcast(), impl_id.into());
|
let generics = crate::utils::generics(self.db.upcast(), impl_id.into());
|
||||||
let substs = Substs::type_params_for_generics(&generics);
|
let substs = Substs::type_params_for_generics(&generics);
|
||||||
let ty = self.db.impl_self_ty(impl_id).subst(&substs);
|
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);
|
let ty = self.db.value_ty(struct_id.into()).subst(&substs);
|
||||||
return Some(ty);
|
return Some(ty);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -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
|
||||||
|
"###
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue