aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty/tests.rs')
-rw-r--r--crates/ra_hir/src/ty/tests.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs
index e587dca31..059a73900 100644
--- a/crates/ra_hir/src/ty/tests.rs
+++ b/crates/ra_hir/src/ty/tests.rs
@@ -2766,6 +2766,37 @@ fn test(s: Arc<S>) {
2766 assert_eq!(t, "(S, u128)"); 2766 assert_eq!(t, "(S, u128)");
2767} 2767}
2768 2768
2769#[test]
2770fn deref_trait_with_inference_var() {
2771 // std::env::set_var("RUST_BACKTRACE", "1");
2772 let t = type_at(
2773 r#"
2774//- /main.rs
2775#[lang = "deref"]
2776trait Deref {
2777 type Target;
2778 fn deref(&self) -> &Self::Target;
2779}
2780
2781struct Arc<T>;
2782fn new_arc<T>() -> Arc<T> {}
2783impl<T> Deref for Arc<T> {
2784 type Target = T;
2785}
2786
2787struct S;
2788fn foo(a: Arc<S>) {}
2789
2790fn test() {
2791 let a = new_arc();
2792 let b = (*a)<|>;
2793 foo(a);
2794}
2795"#,
2796 );
2797 assert_eq!(t, "S");
2798}
2799
2769fn type_at_pos(db: &MockDatabase, pos: FilePosition) -> String { 2800fn type_at_pos(db: &MockDatabase, pos: FilePosition) -> String {
2770 let file = db.parse(pos.file_id).ok().unwrap(); 2801 let file = db.parse(pos.file_id).ok().unwrap();
2771 let expr = algo::find_node_at_offset::<ast::Expr>(file.syntax(), pos.offset).unwrap(); 2802 let expr = algo::find_node_at_offset::<ast::Expr>(file.syntax(), pos.offset).unwrap();