aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/tests/simple.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_ty/src/tests/simple.rs')
-rw-r--r--crates/ra_hir_ty/src/tests/simple.rs182
1 files changed, 175 insertions, 7 deletions
diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs
index 56abc65b8..fd2208af2 100644
--- a/crates/ra_hir_ty/src/tests/simple.rs
+++ b/crates/ra_hir_ty/src/tests/simple.rs
@@ -179,7 +179,7 @@ fn test(a: u32, b: isize, c: !, d: &str) {
179 17..18 'b': isize 179 17..18 'b': isize
180 27..28 'c': ! 180 27..28 'c': !
181 33..34 'd': &str 181 33..34 'd': &str
182 42..121 '{ ...f32; }': ! 182 42..121 '{ ...f32; }': ()
183 48..49 'a': u32 183 48..49 'a': u32
184 55..56 'b': isize 184 55..56 'b': isize
185 62..63 'c': ! 185 62..63 'c': !
@@ -414,7 +414,7 @@ fn test() {
414 27..31 '5f32': f32 414 27..31 '5f32': f32
415 37..41 '5f64': f64 415 37..41 '5f64': f64
416 47..54 '"hello"': &str 416 47..54 '"hello"': &str
417 60..68 'b"bytes"': &[u8] 417 60..68 'b"bytes"': &[u8; _]
418 74..77 ''c'': char 418 74..77 ''c'': char
419 83..87 'b'b'': u8 419 83..87 'b'b'': u8
420 93..97 '3.14': f64 420 93..97 '3.14': f64
@@ -422,7 +422,7 @@ fn test() {
422 113..118 'false': bool 422 113..118 'false': bool
423 124..128 'true': bool 423 124..128 'true': bool
424 134..202 'r#" ... "#': &str 424 134..202 'r#" ... "#': &str
425 208..218 'br#"yolo"#': &[u8] 425 208..218 'br#"yolo"#': &[u8; _]
426 "### 426 "###
427 ); 427 );
428} 428}
@@ -576,6 +576,50 @@ impl S {
576} 576}
577 577
578#[test] 578#[test]
579fn infer_self_as_path() {
580 assert_snapshot!(
581 infer(r#"
582struct S1;
583struct S2(isize);
584enum E {
585 V1,
586 V2(u32),
587}
588
589impl S1 {
590 fn test() {
591 Self;
592 }
593}
594impl S2 {
595 fn test() {
596 Self(1);
597 }
598}
599impl E {
600 fn test() {
601 Self::V1;
602 Self::V2(1);
603 }
604}
605"#),
606 @r###"
607 87..108 '{ ... }': ()
608 97..101 'Self': S1
609 135..159 '{ ... }': ()
610 145..149 'Self': S2(isize) -> S2
611 145..152 'Self(1)': S2
612 150..151 '1': isize
613 185..231 '{ ... }': ()
614 195..203 'Self::V1': E
615 213..221 'Self::V2': V2(u32) -> E
616 213..224 'Self::V2(1)': E
617 222..223 '1': u32
618 "###
619 );
620}
621
622#[test]
579fn infer_binary_op() { 623fn infer_binary_op() {
580 assert_snapshot!( 624 assert_snapshot!(
581 infer(r#" 625 infer(r#"
@@ -935,7 +979,7 @@ fn foo() {
935 29..33 'true': bool 979 29..33 'true': bool
936 34..51 '{ ... }': i32 980 34..51 '{ ... }': i32
937 44..45 '1': i32 981 44..45 '1': i32
938 57..80 '{ ... }': ! 982 57..80 '{ ... }': i32
939 67..73 'return': ! 983 67..73 'return': !
940 90..93 '_x2': i32 984 90..93 '_x2': i32
941 96..149 'if tru... }': i32 985 96..149 'if tru... }': i32
@@ -951,7 +995,7 @@ fn foo() {
951 186..190 'true': bool 995 186..190 'true': bool
952 194..195 '3': i32 996 194..195 '3': i32
953 205..206 '_': bool 997 205..206 '_': bool
954 210..241 '{ ... }': ! 998 210..241 '{ ... }': i32
955 224..230 'return': ! 999 224..230 'return': !
956 257..260 '_x4': i32 1000 257..260 '_x4': i32
957 263..320 'match ... }': i32 1001 263..320 'match ... }': i32
@@ -1687,7 +1731,7 @@ fn foo() -> u32 {
1687 17..59 '{ ...; }; }': () 1731 17..59 '{ ...; }; }': ()
1688 27..28 'x': || -> usize 1732 27..28 'x': || -> usize
1689 31..56 '|| -> ...n 1; }': || -> usize 1733 31..56 '|| -> ...n 1; }': || -> usize
1690 43..56 '{ return 1; }': ! 1734 43..56 '{ return 1; }': usize
1691 45..53 'return 1': ! 1735 45..53 'return 1': !
1692 52..53 '1': usize 1736 52..53 '1': usize
1693 "### 1737 "###
@@ -1706,7 +1750,7 @@ fn foo() -> u32 {
1706 17..48 '{ ...; }; }': () 1750 17..48 '{ ...; }; }': ()
1707 27..28 'x': || -> () 1751 27..28 'x': || -> ()
1708 31..45 '|| { return; }': || -> () 1752 31..45 '|| { return; }': || -> ()
1709 34..45 '{ return; }': ! 1753 34..45 '{ return; }': ()
1710 36..42 'return': ! 1754 36..42 'return': !
1711 "### 1755 "###
1712 ); 1756 );
@@ -1755,3 +1799,127 @@ fn main() {
1755 "### 1799 "###
1756 ); 1800 );
1757} 1801}
1802
1803#[test]
1804fn effects_smoke_test() {
1805 assert_snapshot!(
1806 infer(r#"
1807fn main() {
1808 let x = unsafe { 92 };
1809 let y = async { async { () }.await };
1810 let z = try { () };
1811 let t = 'a: { 92 };
1812}
1813"#),
1814 @r###"
1815 11..131 '{ ...2 }; }': ()
1816 21..22 'x': i32
1817 32..38 '{ 92 }': i32
1818 34..36 '92': i32
1819 48..49 'y': {unknown}
1820 58..80 '{ asyn...wait }': {unknown}
1821 60..78 'async ....await': {unknown}
1822 66..72 '{ () }': ()
1823 68..70 '()': ()
1824 90..91 'z': {unknown}
1825 94..104 'try { () }': {unknown}
1826 98..104 '{ () }': ()
1827 100..102 '()': ()
1828 114..115 't': i32
1829 122..128 '{ 92 }': i32
1830 124..126 '92': i32
1831 "###
1832 )
1833}
1834
1835#[test]
1836fn infer_generic_from_later_assignment() {
1837 assert_snapshot!(
1838 infer(r#"
1839enum Option<T> { Some(T), None }
1840use Option::*;
1841
1842fn test() {
1843 let mut end = None;
1844 loop {
1845 end = Some(true);
1846 }
1847}
1848"#),
1849 @r###"
1850 60..130 '{ ... } }': ()
1851 70..77 'mut end': Option<bool>
1852 80..84 'None': Option<bool>
1853 90..128 'loop {... }': !
1854 95..128 '{ ... }': ()
1855 105..108 'end': Option<bool>
1856 105..121 'end = ...(true)': ()
1857 111..115 'Some': Some<bool>(bool) -> Option<bool>
1858 111..121 'Some(true)': Option<bool>
1859 116..120 'true': bool
1860 "###
1861 );
1862}
1863
1864#[test]
1865fn infer_loop_break_with_val() {
1866 assert_snapshot!(
1867 infer(r#"
1868enum Option<T> { Some(T), None }
1869use Option::*;
1870
1871fn test() {
1872 let x = loop {
1873 if false {
1874 break None;
1875 }
1876
1877 break Some(true);
1878 };
1879}
1880"#),
1881 @r###"
1882 60..169 '{ ... }; }': ()
1883 70..71 'x': Option<bool>
1884 74..166 'loop {... }': Option<bool>
1885 79..166 '{ ... }': ()
1886 89..133 'if fal... }': ()
1887 92..97 'false': bool
1888 98..133 '{ ... }': ()
1889 112..122 'break None': !
1890 118..122 'None': Option<bool>
1891 143..159 'break ...(true)': !
1892 149..153 'Some': Some<bool>(bool) -> Option<bool>
1893 149..159 'Some(true)': Option<bool>
1894 154..158 'true': bool
1895 "###
1896 );
1897}
1898
1899#[test]
1900fn infer_loop_break_without_val() {
1901 assert_snapshot!(
1902 infer(r#"
1903enum Option<T> { Some(T), None }
1904use Option::*;
1905
1906fn test() {
1907 let x = loop {
1908 if false {
1909 break;
1910 }
1911 };
1912}
1913"#),
1914 @r###"
1915 60..137 '{ ... }; }': ()
1916 70..71 'x': ()
1917 74..134 'loop {... }': ()
1918 79..134 '{ ... }': ()
1919 89..128 'if fal... }': ()
1920 92..97 'false': bool
1921 98..128 '{ ... }': ()
1922 112..117 'break': !
1923 "###
1924 );
1925}