diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/hir_ty/src/tests/coercion.rs | 65 | ||||
-rw-r--r-- | crates/hir_ty/src/tests/method_resolution.rs | 44 | ||||
-rw-r--r-- | crates/test_utils/src/minicore.rs | 28 |
3 files changed, 75 insertions, 62 deletions
diff --git a/crates/hir_ty/src/tests/coercion.rs b/crates/hir_ty/src/tests/coercion.rs index eca6ae1fe..713b74165 100644 --- a/crates/hir_ty/src/tests/coercion.rs +++ b/crates/hir_ty/src/tests/coercion.rs | |||
@@ -426,15 +426,15 @@ fn coerce_autoderef() { | |||
426 | #[test] | 426 | #[test] |
427 | fn coerce_autoderef_generic() { | 427 | fn coerce_autoderef_generic() { |
428 | check_infer_with_mismatches( | 428 | check_infer_with_mismatches( |
429 | r" | 429 | r#" |
430 | struct Foo; | 430 | struct Foo; |
431 | fn takes_ref<T>(x: &T) -> T { *x } | 431 | fn takes_ref<T>(x: &T) -> T { *x } |
432 | fn test() { | 432 | fn test() { |
433 | takes_ref(&Foo); | 433 | takes_ref(&Foo); |
434 | takes_ref(&&Foo); | 434 | takes_ref(&&Foo); |
435 | takes_ref(&&&Foo); | 435 | takes_ref(&&&Foo); |
436 | } | 436 | } |
437 | ", | 437 | "#, |
438 | expect![[r" | 438 | expect![[r" |
439 | 28..29 'x': &T | 439 | 28..29 'x': &T |
440 | 40..46 '{ *x }': T | 440 | 40..46 '{ *x }': T |
@@ -464,30 +464,29 @@ fn coerce_autoderef_generic() { | |||
464 | fn coerce_autoderef_block() { | 464 | fn coerce_autoderef_block() { |
465 | check_infer_with_mismatches( | 465 | check_infer_with_mismatches( |
466 | r#" | 466 | r#" |
467 | struct String {} | 467 | //- minicore: deref |
468 | #[lang = "deref"] | 468 | struct String {} |
469 | trait Deref { type Target; } | 469 | impl core::ops::Deref for String { type Target = str; } |
470 | impl Deref for String { type Target = str; } | 470 | fn takes_ref_str(x: &str) {} |
471 | fn takes_ref_str(x: &str) {} | 471 | fn returns_string() -> String { loop {} } |
472 | fn returns_string() -> String { loop {} } | 472 | fn test() { |
473 | fn test() { | 473 | takes_ref_str(&{ returns_string() }); |
474 | takes_ref_str(&{ returns_string() }); | 474 | } |
475 | } | 475 | "#, |
476 | "#, | 476 | expect![[r#" |
477 | expect![[r" | 477 | 90..91 'x': &str |
478 | 126..127 'x': &str | 478 | 99..101 '{}': () |
479 | 135..137 '{}': () | 479 | 132..143 '{ loop {} }': String |
480 | 168..179 '{ loop {} }': String | 480 | 134..141 'loop {}': ! |
481 | 170..177 'loop {}': ! | 481 | 139..141 '{}': () |
482 | 175..177 '{}': () | 482 | 154..199 '{ ... }); }': () |
483 | 190..235 '{ ... }); }': () | 483 | 160..173 'takes_ref_str': fn takes_ref_str(&str) |
484 | 196..209 'takes_ref_str': fn takes_ref_str(&str) | 484 | 160..196 'takes_...g() })': () |
485 | 196..232 'takes_...g() })': () | 485 | 174..195 '&{ ret...ng() }': &String |
486 | 210..231 '&{ ret...ng() }': &String | 486 | 175..195 '{ retu...ng() }': String |
487 | 211..231 '{ retu...ng() }': String | 487 | 177..191 'returns_string': fn returns_string() -> String |
488 | 213..227 'returns_string': fn returns_string() -> String | 488 | 177..193 'return...ring()': String |
489 | 213..229 'return...ring()': String | 489 | "#]], |
490 | "]], | ||
491 | ); | 490 | ); |
492 | } | 491 | } |
493 | 492 | ||
diff --git a/crates/hir_ty/src/tests/method_resolution.rs b/crates/hir_ty/src/tests/method_resolution.rs index f26b2c8a7..79108054c 100644 --- a/crates/hir_ty/src/tests/method_resolution.rs +++ b/crates/hir_ty/src/tests/method_resolution.rs | |||
@@ -780,10 +780,7 @@ fn test() { (&S).foo(); } | |||
780 | fn method_resolution_unsize_array() { | 780 | fn method_resolution_unsize_array() { |
781 | check_types( | 781 | check_types( |
782 | r#" | 782 | r#" |
783 | #[lang = "slice"] | 783 | //- minicore: slice |
784 | impl<T> [T] { | ||
785 | fn len(&self) -> usize { loop {} } | ||
786 | } | ||
787 | fn test() { | 784 | fn test() { |
788 | let a = [1, 2, 3]; | 785 | let a = [1, 2, 3]; |
789 | a.len(); | 786 | a.len(); |
@@ -1178,11 +1175,7 @@ fn main() { | |||
1178 | fn autoderef_visibility_field() { | 1175 | fn autoderef_visibility_field() { |
1179 | check_infer( | 1176 | check_infer( |
1180 | r#" | 1177 | r#" |
1181 | #[lang = "deref"] | 1178 | //- minicore: deref |
1182 | pub trait Deref { | ||
1183 | type Target; | ||
1184 | fn deref(&self) -> &Self::Target; | ||
1185 | } | ||
1186 | mod a { | 1179 | mod a { |
1187 | pub struct Foo(pub char); | 1180 | pub struct Foo(pub char); |
1188 | pub struct Bar(i32); | 1181 | pub struct Bar(i32); |
@@ -1191,7 +1184,7 @@ mod a { | |||
1191 | Self(0) | 1184 | Self(0) |
1192 | } | 1185 | } |
1193 | } | 1186 | } |
1194 | impl super::Deref for Bar { | 1187 | impl core::ops::Deref for Bar { |
1195 | type Target = Foo; | 1188 | type Target = Foo; |
1196 | fn deref(&self) -> &Foo { | 1189 | fn deref(&self) -> &Foo { |
1197 | &Foo('z') | 1190 | &Foo('z') |
@@ -1205,22 +1198,21 @@ mod b { | |||
1205 | } | 1198 | } |
1206 | "#, | 1199 | "#, |
1207 | expect![[r#" | 1200 | expect![[r#" |
1208 | 67..71 'self': &Self | 1201 | 107..138 '{ ... }': Bar |
1209 | 200..231 '{ ... }': Bar | 1202 | 121..125 'Self': Bar(i32) -> Bar |
1210 | 214..218 'Self': Bar(i32) -> Bar | 1203 | 121..128 'Self(0)': Bar |
1211 | 214..221 'Self(0)': Bar | 1204 | 126..127 '0': i32 |
1212 | 219..220 '0': i32 | 1205 | 226..230 'self': &Bar |
1213 | 315..319 'self': &Bar | 1206 | 240..273 '{ ... }': &Foo |
1214 | 329..362 '{ ... }': &Foo | 1207 | 254..263 '&Foo('z')': &Foo |
1215 | 343..352 '&Foo('z')': &Foo | 1208 | 255..258 'Foo': Foo(char) -> Foo |
1216 | 344..347 'Foo': Foo(char) -> Foo | 1209 | 255..263 'Foo('z')': Foo |
1217 | 344..352 'Foo('z')': Foo | 1210 | 259..262 ''z'': char |
1218 | 348..351 ''z'': char | 1211 | 303..350 '{ ... }': () |
1219 | 392..439 '{ ... }': () | 1212 | 317..318 'x': char |
1220 | 406..407 'x': char | 1213 | 321..339 'super:...r::new': fn new() -> Bar |
1221 | 410..428 'super:...r::new': fn new() -> Bar | 1214 | 321..341 'super:...:new()': Bar |
1222 | 410..430 'super:...:new()': Bar | 1215 | 321..343 'super:...ew().0': char |
1223 | 410..432 'super:...ew().0': char | ||
1224 | "#]], | 1216 | "#]], |
1225 | ) | 1217 | ) |
1226 | } | 1218 | } |
diff --git a/crates/test_utils/src/minicore.rs b/crates/test_utils/src/minicore.rs index 8f8f1c9f8..a61459f6d 100644 --- a/crates/test_utils/src/minicore.rs +++ b/crates/test_utils/src/minicore.rs | |||
@@ -9,7 +9,9 @@ | |||
9 | //! | 9 | //! |
10 | //! Available flags: | 10 | //! Available flags: |
11 | //! sized: | 11 | //! sized: |
12 | //! slice: | ||
12 | //! unsize: sized | 13 | //! unsize: sized |
14 | //! deref: sized | ||
13 | //! coerce_unsized: unsize | 15 | //! coerce_unsized: unsize |
14 | 16 | ||
15 | pub mod marker { | 17 | pub mod marker { |
@@ -27,8 +29,8 @@ pub mod marker { | |||
27 | } | 29 | } |
28 | 30 | ||
29 | pub mod ops { | 31 | pub mod ops { |
32 | // region:coerce_unsized | ||
30 | mod unsize { | 33 | mod unsize { |
31 | // region:coerce_unsized | ||
32 | use crate::marker::Unsize; | 34 | use crate::marker::Unsize; |
33 | 35 | ||
34 | #[lang = "coerce_unsized"] | 36 | #[lang = "coerce_unsized"] |
@@ -45,11 +47,31 @@ pub mod ops { | |||
45 | impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {} | 47 | impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {} |
46 | impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *mut T {} | 48 | impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *mut T {} |
47 | impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *const T {} | 49 | impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *const T {} |
48 | // endregion:coerce_unsized | ||
49 | } | 50 | } |
51 | pub use self::unsize::CoerceUnsized; | ||
52 | // endregion:coerce_unsized | ||
50 | 53 | ||
51 | pub use self::unsize::CoerceUnsized; // :coerce_unsized | 54 | // region:deref |
55 | mod deref { | ||
56 | #[lang = "deref"] | ||
57 | pub trait Deref { | ||
58 | #[lang = "deref_target"] | ||
59 | type Target: ?Sized; | ||
60 | fn deref(&self) -> &Self::Target; | ||
61 | } | ||
62 | } | ||
63 | pub use self::deref::Deref; | ||
64 | // endregion:deref | ||
65 | } | ||
66 | |||
67 | // region:slice | ||
68 | pub mod slice { | ||
69 | #[lang = "slice"] | ||
70 | impl<T> [T] { | ||
71 | pub fn len(&self) -> usize { loop {} } | ||
72 | } | ||
52 | } | 73 | } |
74 | // endregion:slice | ||
53 | 75 | ||
54 | pub mod prelude { | 76 | pub mod prelude { |
55 | pub mod v1 { | 77 | pub mod v1 { |