diff options
Diffstat (limited to 'crates/ra_hir/src/ty/tests.rs')
-rw-r--r-- | crates/ra_hir/src/ty/tests.rs | 62 |
1 files changed, 44 insertions, 18 deletions
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 42bcae157..3e743ef58 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs | |||
@@ -3586,37 +3586,63 @@ fn test<T: Trait<Type = u32>>(x: T, y: impl Trait<Type = i64>) { | |||
3586 | [166; 169) '{t}': T | 3586 | [166; 169) '{t}': T |
3587 | [167; 168) 't': T | 3587 | [167; 168) 't': T |
3588 | [257; 258) 'x': T | 3588 | [257; 258) 'x': T |
3589 | [263; 264) 'y': impl Trait | 3589 | [263; 264) 'y': impl Trait + |
3590 | [290; 398) '{ ...r>); }': () | 3590 | [290; 398) '{ ...r>); }': () |
3591 | [296; 299) 'get': fn get<T>(T) -> <T as Trait>::Type | 3591 | [296; 299) 'get': fn get<T>(T) -> <T as Trait>::Type |
3592 | [296; 302) 'get(x)': {unknown} | 3592 | [296; 302) 'get(x)': {unknown} |
3593 | [300; 301) 'x': T | 3593 | [300; 301) 'x': T |
3594 | [308; 312) 'get2': fn get2<{unknown}, T>(T) -> U | 3594 | [308; 312) 'get2': fn get2<{unknown}, S<{unknown}>>(T) -> U |
3595 | [308; 315) 'get2(x)': {unknown} | 3595 | [308; 315) 'get2(x)': {unknown} |
3596 | [313; 314) 'x': T | 3596 | [313; 314) 'x': T |
3597 | [321; 324) 'get': fn get<impl Trait>(T) -> <T as Trait>::Type | 3597 | [321; 324) 'get': fn get<impl Trait + >(T) -> <T as Trait>::Type |
3598 | [321; 327) 'get(y)': {unknown} | 3598 | [321; 327) 'get(y)': {unknown} |
3599 | [325; 326) 'y': impl Trait | 3599 | [325; 326) 'y': impl Trait + |
3600 | [333; 337) 'get2': fn get2<{unknown}, impl Trait>(T) -> U | 3600 | [333; 337) 'get2': fn get2<{unknown}, S<{unknown}>>(T) -> U |
3601 | [333; 340) 'get2(y)': {unknown} | 3601 | [333; 340) 'get2(y)': {unknown} |
3602 | [338; 339) 'y': impl Trait | 3602 | [338; 339) 'y': impl Trait + |
3603 | [346; 349) 'get': fn get<S<{unknown}>>(T) -> <T as Trait>::Type | 3603 | [346; 349) 'get': fn get<S<u64>>(T) -> <T as Trait>::Type |
3604 | [346; 357) 'get(set(S))': {unknown} | 3604 | [346; 357) 'get(set(S))': u64 |
3605 | [350; 353) 'set': fn set<S<{unknown}>>(T) -> T | 3605 | [350; 353) 'set': fn set<S<u64>>(T) -> T |
3606 | [350; 356) 'set(S)': S<{unknown}> | 3606 | [350; 356) 'set(S)': S<u64> |
3607 | [354; 355) 'S': S<{unknown}> | 3607 | [354; 355) 'S': S<u64> |
3608 | [363; 367) 'get2': fn get2<{unknown}, S<{unknown}>>(T) -> U | 3608 | [363; 367) 'get2': fn get2<u64, S<u64>>(T) -> U |
3609 | [363; 375) 'get2(set(S))': {unknown} | 3609 | [363; 375) 'get2(set(S))': u64 |
3610 | [368; 371) 'set': fn set<S<{unknown}>>(T) -> T | 3610 | [368; 371) 'set': fn set<S<u64>>(T) -> T |
3611 | [368; 374) 'set(S)': S<{unknown}> | 3611 | [368; 374) 'set(S)': S<u64> |
3612 | [372; 373) 'S': S<{unknown}> | 3612 | [372; 373) 'S': S<u64> |
3613 | [381; 385) 'get2': fn get2<{unknown}, S<str>>(T) -> U | 3613 | [381; 385) 'get2': fn get2<str, S<str>>(T) -> U |
3614 | [381; 395) 'get2(S::<str>)': {unknown} | 3614 | [381; 395) 'get2(S::<str>)': str |
3615 | [386; 394) 'S::<str>': S<str> | 3615 | [386; 394) 'S::<str>': S<str> |
3616 | "### | 3616 | "### |
3617 | ); | 3617 | ); |
3618 | } | 3618 | } |
3619 | 3619 | ||
3620 | #[test] | ||
3621 | fn projection_eq_within_chalk() { | ||
3622 | // std::env::set_var("CHALK_DEBUG", "1"); | ||
3623 | assert_snapshot!( | ||
3624 | infer(r#" | ||
3625 | trait Trait1 { | ||
3626 | type Type; | ||
3627 | } | ||
3628 | trait Trait2<T> { | ||
3629 | fn foo(self) -> T; | ||
3630 | } | ||
3631 | impl<T, U> Trait2<T> for U where U: Trait1<Type = T> {} | ||
3632 | |||
3633 | fn test<T: Trait1<Type = u32>>(x: T) { | ||
3634 | x.foo(); | ||
3635 | } | ||
3636 | "#), | ||
3637 | @r###" | ||
3638 | [62; 66) 'self': Self | ||
3639 | [164; 165) 'x': T | ||
3640 | [170; 186) '{ ...o(); }': () | ||
3641 | [176; 177) 'x': T | ||
3642 | [176; 183) 'x.foo()': {unknown} | ||
3643 | "### | ||
3644 | ); | ||
3645 | } | ||
3620 | fn type_at_pos(db: &MockDatabase, pos: FilePosition) -> String { | 3646 | fn type_at_pos(db: &MockDatabase, pos: FilePosition) -> String { |
3621 | let file = db.parse(pos.file_id).ok().unwrap(); | 3647 | let file = db.parse(pos.file_id).ok().unwrap(); |
3622 | let expr = algo::find_node_at_offset::<ast::Expr>(file.syntax(), pos.offset).unwrap(); | 3648 | let expr = algo::find_node_at_offset::<ast::Expr>(file.syntax(), pos.offset).unwrap(); |