aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_ty/src/tests.rs')
-rw-r--r--crates/ra_hir_ty/src/tests.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/crates/ra_hir_ty/src/tests.rs b/crates/ra_hir_ty/src/tests.rs
index d5b8d10e2..2ea9e261c 100644
--- a/crates/ra_hir_ty/src/tests.rs
+++ b/crates/ra_hir_ty/src/tests.rs
@@ -4820,6 +4820,53 @@ fn test<T, U>() where T: Trait<U::Item>, U: Trait<T::Item> {
4820 assert_eq!(t, "{unknown}"); 4820 assert_eq!(t, "{unknown}");
4821} 4821}
4822 4822
4823#[test]
4824fn bug_2467() {
4825 assert_snapshot!(
4826 infer(r#"
4827struct S<T>(T);
4828impl<T> S<T> {
4829 fn foo(self) -> T;
4830}
4831fn test() {
4832 // needs to nest multiple times for variable indices to get high enough
4833 let a = S::foo(S(1));
4834 let b = S::foo(S(a));
4835 let c = S::foo(S(b));
4836 let d: u32 = S::foo(S(c));
4837}
4838"#),
4839 @r###"
4840 [43; 47) 'self': S<T>
4841 [67; 255) '{ ...c)); }': ()
4842 [153; 154) 'a': u32
4843 [157; 163) 'S::foo': fn foo<u32>(S<T>) -> T
4844 [157; 169) 'S::foo(S(1))': u32
4845 [164; 165) 'S': S<u32>(T) -> S<T>
4846 [164; 168) 'S(1)': S<u32>
4847 [166; 167) '1': u32
4848 [179; 180) 'b': u32
4849 [183; 189) 'S::foo': fn foo<u32>(S<T>) -> T
4850 [183; 195) 'S::foo(S(a))': u32
4851 [190; 191) 'S': S<u32>(T) -> S<T>
4852 [190; 194) 'S(a)': S<u32>
4853 [192; 193) 'a': u32
4854 [205; 206) 'c': u32
4855 [209; 215) 'S::foo': fn foo<u32>(S<T>) -> T
4856 [209; 221) 'S::foo(S(b))': u32
4857 [216; 217) 'S': S<u32>(T) -> S<T>
4858 [216; 220) 'S(b)': S<u32>
4859 [218; 219) 'b': u32
4860 [231; 232) 'd': u32
4861 [240; 246) 'S::foo': fn foo<u32>(S<T>) -> T
4862 [240; 252) 'S::foo(S(c))': u32
4863 [247; 248) 'S': S<u32>(T) -> S<T>
4864 [247; 251) 'S(c)': S<u32>
4865 [249; 250) 'c': u32
4866 "###
4867 );
4868}
4869
4823fn type_at_pos(db: &TestDB, pos: FilePosition) -> String { 4870fn type_at_pos(db: &TestDB, pos: FilePosition) -> String {
4824 let file = db.parse(pos.file_id).ok().unwrap(); 4871 let file = db.parse(pos.file_id).ok().unwrap();
4825 let expr = algo::find_node_at_offset::<ast::Expr>(file.syntax(), pos.offset).unwrap(); 4872 let expr = algo::find_node_at_offset::<ast::Expr>(file.syntax(), pos.offset).unwrap();