diff options
Diffstat (limited to 'crates/ra_hir_ty/src/tests')
-rw-r--r-- | crates/ra_hir_ty/src/tests/display_source_code.rs | 4 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/tests/method_resolution.rs | 54 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/tests/simple.rs | 108 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/tests/traits.rs | 54 |
4 files changed, 137 insertions, 83 deletions
diff --git a/crates/ra_hir_ty/src/tests/display_source_code.rs b/crates/ra_hir_ty/src/tests/display_source_code.rs index 4088b1d22..5dfa0a014 100644 --- a/crates/ra_hir_ty/src/tests/display_source_code.rs +++ b/crates/ra_hir_ty/src/tests/display_source_code.rs | |||
@@ -29,7 +29,7 @@ fn omit_default_type_parameters() { | |||
29 | //- /main.rs | 29 | //- /main.rs |
30 | struct Foo<T = u8> { t: T } | 30 | struct Foo<T = u8> { t: T } |
31 | fn main() { | 31 | fn main() { |
32 | let foo = Foo { t: 5 }; | 32 | let foo = Foo { t: 5u8 }; |
33 | foo<|>; | 33 | foo<|>; |
34 | } | 34 | } |
35 | ", | 35 | ", |
@@ -41,7 +41,7 @@ fn omit_default_type_parameters() { | |||
41 | //- /main.rs | 41 | //- /main.rs |
42 | struct Foo<K, T = u8> { k: K, t: T } | 42 | struct Foo<K, T = u8> { k: K, t: T } |
43 | fn main() { | 43 | fn main() { |
44 | let foo = Foo { k: 400, t: 5 }; | 44 | let foo = Foo { k: 400, t: 5u8 }; |
45 | foo<|>; | 45 | foo<|>; |
46 | } | 46 | } |
47 | ", | 47 | ", |
diff --git a/crates/ra_hir_ty/src/tests/method_resolution.rs b/crates/ra_hir_ty/src/tests/method_resolution.rs index 558a70022..804297315 100644 --- a/crates/ra_hir_ty/src/tests/method_resolution.rs +++ b/crates/ra_hir_ty/src/tests/method_resolution.rs | |||
@@ -184,60 +184,6 @@ fn test() { | |||
184 | } | 184 | } |
185 | 185 | ||
186 | #[test] | 186 | #[test] |
187 | fn infer_associated_method_generics_with_default_param() { | ||
188 | assert_snapshot!( | ||
189 | infer(r#" | ||
190 | struct Gen<T=u32> { | ||
191 | val: T | ||
192 | } | ||
193 | |||
194 | impl<T> Gen<T> { | ||
195 | pub fn make() -> Gen<T> { | ||
196 | loop { } | ||
197 | } | ||
198 | } | ||
199 | |||
200 | fn test() { | ||
201 | let a = Gen::make(); | ||
202 | } | ||
203 | "#), | ||
204 | @r###" | ||
205 | 80..104 '{ ... }': Gen<T> | ||
206 | 90..98 'loop { }': ! | ||
207 | 95..98 '{ }': () | ||
208 | 118..146 '{ ...e(); }': () | ||
209 | 128..129 'a': Gen<u32> | ||
210 | 132..141 'Gen::make': fn make<u32>() -> Gen<u32> | ||
211 | 132..143 'Gen::make()': Gen<u32> | ||
212 | "### | ||
213 | ); | ||
214 | } | ||
215 | |||
216 | #[test] | ||
217 | fn infer_associated_method_generics_with_default_tuple_param() { | ||
218 | let t = type_at( | ||
219 | r#" | ||
220 | //- /main.rs | ||
221 | struct Gen<T=()> { | ||
222 | val: T | ||
223 | } | ||
224 | |||
225 | impl<T> Gen<T> { | ||
226 | pub fn make() -> Gen<T> { | ||
227 | loop { } | ||
228 | } | ||
229 | } | ||
230 | |||
231 | fn test() { | ||
232 | let a = Gen::make(); | ||
233 | a.val<|>; | ||
234 | } | ||
235 | "#, | ||
236 | ); | ||
237 | assert_eq!(t, "()"); | ||
238 | } | ||
239 | |||
240 | #[test] | ||
241 | fn infer_associated_method_generics_without_args() { | 187 | fn infer_associated_method_generics_without_args() { |
242 | assert_snapshot!( | 188 | assert_snapshot!( |
243 | infer(r#" | 189 | infer(r#" |
diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs index 88309157b..8a5031756 100644 --- a/crates/ra_hir_ty/src/tests/simple.rs +++ b/crates/ra_hir_ty/src/tests/simple.rs | |||
@@ -1997,3 +1997,111 @@ fn foo() { | |||
1997 | "### | 1997 | "### |
1998 | ); | 1998 | ); |
1999 | } | 1999 | } |
2000 | |||
2001 | #[test] | ||
2002 | fn generic_default() { | ||
2003 | assert_snapshot!( | ||
2004 | infer(r#" | ||
2005 | struct Thing<T = ()> { t: T } | ||
2006 | enum OtherThing<T = ()> { | ||
2007 | One { t: T }, | ||
2008 | Two(T), | ||
2009 | } | ||
2010 | |||
2011 | fn test(t1: Thing, t2: OtherThing, t3: Thing<i32>, t4: OtherThing<i32>) { | ||
2012 | t1.t; | ||
2013 | t3.t; | ||
2014 | match t2 { | ||
2015 | OtherThing::One { t } => { t; }, | ||
2016 | OtherThing::Two(t) => { t; }, | ||
2017 | } | ||
2018 | match t4 { | ||
2019 | OtherThing::One { t } => { t; }, | ||
2020 | OtherThing::Two(t) => { t; }, | ||
2021 | } | ||
2022 | } | ||
2023 | "#), | ||
2024 | @r###" | ||
2025 | 98..100 't1': Thing<()> | ||
2026 | 109..111 't2': OtherThing<()> | ||
2027 | 125..127 't3': Thing<i32> | ||
2028 | 141..143 't4': OtherThing<i32> | ||
2029 | 162..385 '{ ... } }': () | ||
2030 | 168..170 't1': Thing<()> | ||
2031 | 168..172 't1.t': () | ||
2032 | 178..180 't3': Thing<i32> | ||
2033 | 178..182 't3.t': i32 | ||
2034 | 188..283 'match ... }': () | ||
2035 | 194..196 't2': OtherThing<()> | ||
2036 | 207..228 'OtherT... { t }': OtherThing<()> | ||
2037 | 225..226 't': () | ||
2038 | 232..238 '{ t; }': () | ||
2039 | 234..235 't': () | ||
2040 | 248..266 'OtherT...Two(t)': OtherThing<()> | ||
2041 | 264..265 't': () | ||
2042 | 270..276 '{ t; }': () | ||
2043 | 272..273 't': () | ||
2044 | 288..383 'match ... }': () | ||
2045 | 294..296 't4': OtherThing<i32> | ||
2046 | 307..328 'OtherT... { t }': OtherThing<i32> | ||
2047 | 325..326 't': i32 | ||
2048 | 332..338 '{ t; }': () | ||
2049 | 334..335 't': i32 | ||
2050 | 348..366 'OtherT...Two(t)': OtherThing<i32> | ||
2051 | 364..365 't': i32 | ||
2052 | 370..376 '{ t; }': () | ||
2053 | 372..373 't': i32 | ||
2054 | "### | ||
2055 | ); | ||
2056 | } | ||
2057 | |||
2058 | #[test] | ||
2059 | fn generic_default_in_struct_literal() { | ||
2060 | assert_snapshot!( | ||
2061 | infer(r#" | ||
2062 | struct Thing<T = ()> { t: T } | ||
2063 | enum OtherThing<T = ()> { | ||
2064 | One { t: T }, | ||
2065 | Two(T), | ||
2066 | } | ||
2067 | |||
2068 | fn test() { | ||
2069 | let x = Thing { t: loop {} }; | ||
2070 | let y = Thing { t: () }; | ||
2071 | let z = Thing { t: 1i32 }; | ||
2072 | if let Thing { t } = z { | ||
2073 | t; | ||
2074 | } | ||
2075 | |||
2076 | let a = OtherThing::One { t: 1i32 }; | ||
2077 | let b = OtherThing::Two(1i32); | ||
2078 | } | ||
2079 | "#), | ||
2080 | @r###" | ||
2081 | 100..320 '{ ...32); }': () | ||
2082 | 110..111 'x': Thing<!> | ||
2083 | 114..134 'Thing ...p {} }': Thing<!> | ||
2084 | 125..132 'loop {}': ! | ||
2085 | 130..132 '{}': () | ||
2086 | 144..145 'y': Thing<()> | ||
2087 | 148..163 'Thing { t: () }': Thing<()> | ||
2088 | 159..161 '()': () | ||
2089 | 173..174 'z': Thing<i32> | ||
2090 | 177..194 'Thing ...1i32 }': Thing<i32> | ||
2091 | 188..192 '1i32': i32 | ||
2092 | 200..241 'if let... }': () | ||
2093 | 207..218 'Thing { t }': Thing<i32> | ||
2094 | 215..216 't': i32 | ||
2095 | 221..222 'z': Thing<i32> | ||
2096 | 223..241 '{ ... }': () | ||
2097 | 233..234 't': i32 | ||
2098 | 251..252 'a': OtherThing<i32> | ||
2099 | 255..282 'OtherT...1i32 }': OtherThing<i32> | ||
2100 | 276..280 '1i32': i32 | ||
2101 | 292..293 'b': OtherThing<i32> | ||
2102 | 296..311 'OtherThing::Two': Two<i32>(i32) -> OtherThing<i32> | ||
2103 | 296..317 'OtherT...(1i32)': OtherThing<i32> | ||
2104 | 312..316 '1i32': i32 | ||
2105 | "### | ||
2106 | ); | ||
2107 | } | ||
diff --git a/crates/ra_hir_ty/src/tests/traits.rs b/crates/ra_hir_ty/src/tests/traits.rs index 0c538a62d..133fb5f39 100644 --- a/crates/ra_hir_ty/src/tests/traits.rs +++ b/crates/ra_hir_ty/src/tests/traits.rs | |||
@@ -1806,33 +1806,33 @@ fn test() { | |||
1806 | } | 1806 | } |
1807 | "#), | 1807 | "#), |
1808 | @r###" | 1808 | @r###" |
1809 | 65..69 'self': &Self | 1809 | 65..69 'self': &Self |
1810 | 166..170 'self': Self | 1810 | 166..170 'self': Self |
1811 | 172..176 'args': Args | 1811 | 172..176 'args': Args |
1812 | 240..244 'self': &Foo | 1812 | 240..244 'self': &Foo |
1813 | 255..257 '{}': () | 1813 | 255..257 '{}': () |
1814 | 335..336 'f': F | 1814 | 335..336 'f': F |
1815 | 355..357 '{}': () | 1815 | 355..357 '{}': () |
1816 | 444..690 '{ ...o(); }': () | 1816 | 444..690 '{ ...o(); }': () |
1817 | 454..459 'lazy1': Lazy<Foo, fn() -> T> | 1817 | 454..459 'lazy1': Lazy<Foo, || -> Foo> |
1818 | 476..485 'Lazy::new': fn new<Foo, fn() -> T>(fn() -> T) -> Lazy<Foo, fn() -> T> | 1818 | 476..485 'Lazy::new': fn new<Foo, || -> Foo>(|| -> Foo) -> Lazy<Foo, || -> Foo> |
1819 | 476..493 'Lazy::...| Foo)': Lazy<Foo, fn() -> T> | 1819 | 476..493 'Lazy::...| Foo)': Lazy<Foo, || -> Foo> |
1820 | 486..492 '|| Foo': || -> T | 1820 | 486..492 '|| Foo': || -> Foo |
1821 | 489..492 'Foo': Foo | 1821 | 489..492 'Foo': Foo |
1822 | 503..505 'r1': {unknown} | 1822 | 503..505 'r1': usize |
1823 | 508..513 'lazy1': Lazy<Foo, fn() -> T> | 1823 | 508..513 'lazy1': Lazy<Foo, || -> Foo> |
1824 | 508..519 'lazy1.foo()': {unknown} | 1824 | 508..519 'lazy1.foo()': usize |
1825 | 561..576 'make_foo_fn_ptr': fn() -> Foo | 1825 | 561..576 'make_foo_fn_ptr': fn() -> Foo |
1826 | 592..603 'make_foo_fn': fn make_foo_fn() -> Foo | 1826 | 592..603 'make_foo_fn': fn make_foo_fn() -> Foo |
1827 | 613..618 'lazy2': Lazy<Foo, fn() -> T> | 1827 | 613..618 'lazy2': Lazy<Foo, fn() -> Foo> |
1828 | 635..644 'Lazy::new': fn new<Foo, fn() -> T>(fn() -> T) -> Lazy<Foo, fn() -> T> | 1828 | 635..644 'Lazy::new': fn new<Foo, fn() -> Foo>(fn() -> Foo) -> Lazy<Foo, fn() -> Foo> |
1829 | 635..661 'Lazy::...n_ptr)': Lazy<Foo, fn() -> T> | 1829 | 635..661 'Lazy::...n_ptr)': Lazy<Foo, fn() -> Foo> |
1830 | 645..660 'make_foo_fn_ptr': fn() -> Foo | 1830 | 645..660 'make_foo_fn_ptr': fn() -> Foo |
1831 | 671..673 'r2': {unknown} | 1831 | 671..673 'r2': {unknown} |
1832 | 676..681 'lazy2': Lazy<Foo, fn() -> T> | 1832 | 676..681 'lazy2': Lazy<Foo, fn() -> Foo> |
1833 | 676..687 'lazy2.foo()': {unknown} | 1833 | 676..687 'lazy2.foo()': {unknown} |
1834 | 550..552 '{}': () | 1834 | 550..552 '{}': () |
1835 | "### | 1835 | "### |
1836 | ); | 1836 | ); |
1837 | } | 1837 | } |
1838 | 1838 | ||