diff options
Diffstat (limited to 'crates/ra_hir_ty/src/tests/simple.rs')
-rw-r--r-- | crates/ra_hir_ty/src/tests/simple.rs | 182 |
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] |
579 | fn infer_self_as_path() { | ||
580 | assert_snapshot!( | ||
581 | infer(r#" | ||
582 | struct S1; | ||
583 | struct S2(isize); | ||
584 | enum E { | ||
585 | V1, | ||
586 | V2(u32), | ||
587 | } | ||
588 | |||
589 | impl S1 { | ||
590 | fn test() { | ||
591 | Self; | ||
592 | } | ||
593 | } | ||
594 | impl S2 { | ||
595 | fn test() { | ||
596 | Self(1); | ||
597 | } | ||
598 | } | ||
599 | impl 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] | ||
579 | fn infer_binary_op() { | 623 | fn 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] | ||
1804 | fn effects_smoke_test() { | ||
1805 | assert_snapshot!( | ||
1806 | infer(r#" | ||
1807 | fn 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] | ||
1836 | fn infer_generic_from_later_assignment() { | ||
1837 | assert_snapshot!( | ||
1838 | infer(r#" | ||
1839 | enum Option<T> { Some(T), None } | ||
1840 | use Option::*; | ||
1841 | |||
1842 | fn 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] | ||
1865 | fn infer_loop_break_with_val() { | ||
1866 | assert_snapshot!( | ||
1867 | infer(r#" | ||
1868 | enum Option<T> { Some(T), None } | ||
1869 | use Option::*; | ||
1870 | |||
1871 | fn 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] | ||
1900 | fn infer_loop_break_without_val() { | ||
1901 | assert_snapshot!( | ||
1902 | infer(r#" | ||
1903 | enum Option<T> { Some(T), None } | ||
1904 | use Option::*; | ||
1905 | |||
1906 | fn 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 | } | ||