aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-01-26 22:48:01 +0000
committerFlorian Diebold <[email protected]>2019-01-26 22:48:01 +0000
commit77f92674f9a2ea8e8cd303d15710621a4f7839cb (patch)
tree769232968e82fc463b3c08c7108ff2394e01ed4a /crates/ra_hir/src/ty
parente40d8d40321b191ee82b8b07910f8a0898c8914c (diff)
Handle cycles in type vars
This might be the cause of #587.
Diffstat (limited to 'crates/ra_hir/src/ty')
-rw-r--r--crates/ra_hir/src/ty/snapshots/tests__recursive_vars.snap14
-rw-r--r--crates/ra_hir/src/ty/snapshots/tests__recursive_vars_2.snap21
-rw-r--r--crates/ra_hir/src/ty/tests.rs27
3 files changed, 62 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ty/snapshots/tests__recursive_vars.snap b/crates/ra_hir/src/ty/snapshots/tests__recursive_vars.snap
new file mode 100644
index 000000000..c3227ff7e
--- /dev/null
+++ b/crates/ra_hir/src/ty/snapshots/tests__recursive_vars.snap
@@ -0,0 +1,14 @@
1---
2created: "2019-01-26T22:42:22.329980185+00:00"
3creator: [email protected]
4expression: "&result"
5source: crates/ra_hir/src/ty/tests.rs
6---
7[11; 48) '{ ...&y]; }': ()
8[21; 22) 'y': &[unknown]
9[25; 32) 'unknown': &[unknown]
10[38; 45) '[y, &y]': [&&[unknown]]
11[39; 40) 'y': &[unknown]
12[42; 44) '&y': &&[unknown]
13[43; 44) 'y': &[unknown]
14
diff --git a/crates/ra_hir/src/ty/snapshots/tests__recursive_vars_2.snap b/crates/ra_hir/src/ty/snapshots/tests__recursive_vars_2.snap
new file mode 100644
index 000000000..de124da5b
--- /dev/null
+++ b/crates/ra_hir/src/ty/snapshots/tests__recursive_vars_2.snap
@@ -0,0 +1,21 @@
1---
2created: "2019-01-26T22:42:22.331805845+00:00"
3creator: [email protected]
4expression: "&result"
5source: crates/ra_hir/src/ty/tests.rs
6---
7[11; 80) '{ ...x)]; }': ()
8[21; 22) 'x': &&[unknown]
9[25; 32) 'unknown': &&[unknown]
10[42; 43) 'y': &&[unknown]
11[46; 53) 'unknown': &&[unknown]
12[59; 77) '[(x, y..., &x)]': [(&&[unknown], &&[unknown])]
13[60; 66) '(x, y)': (&&[unknown], &&[unknown])
14[61; 62) 'x': &&[unknown]
15[64; 65) 'y': &&[unknown]
16[68; 76) '(&y, &x)': (&&&[unknown], &&&[unknown])
17[69; 71) '&y': &&&[unknown]
18[70; 71) 'y': &&[unknown]
19[73; 75) '&x': &&&[unknown]
20[74; 75) 'x': &&[unknown]
21
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs
index e1165f682..e34daa0f7 100644
--- a/crates/ra_hir/src/ty/tests.rs
+++ b/crates/ra_hir/src/ty/tests.rs
@@ -562,6 +562,33 @@ fn quux() {
562 ); 562 );
563} 563}
564 564
565#[test]
566fn recursive_vars() {
567 check_inference(
568 "recursive_vars",
569 r#"
570fn test() {
571 let y = unknown;
572 [y, &y];
573}
574"#,
575 );
576}
577
578#[test]
579fn recursive_vars_2() {
580 check_inference(
581 "recursive_vars_2",
582 r#"
583fn test() {
584 let x = unknown;
585 let y = unknown;
586 [(x, y), (&y, &x)];
587}
588"#,
589 );
590}
591
565fn infer(content: &str) -> String { 592fn infer(content: &str) -> String {
566 let (db, _, file_id) = MockDatabase::with_single_file(content); 593 let (db, _, file_id) = MockDatabase::with_single_file(content);
567 let source_file = db.parse(file_id); 594 let source_file = db.parse(file_id);