diff options
Diffstat (limited to 'crates/hir_ty/src/tests/display_source_code.rs')
| -rw-r--r-- | crates/hir_ty/src/tests/display_source_code.rs | 111 |
1 files changed, 109 insertions, 2 deletions
diff --git a/crates/hir_ty/src/tests/display_source_code.rs b/crates/hir_ty/src/tests/display_source_code.rs index a484dc3a03b..240942e488d 100644 --- a/crates/hir_ty/src/tests/display_source_code.rs +++ b/crates/hir_ty/src/tests/display_source_code.rs @@ -44,13 +44,13 @@ fn main() { fn render_raw_ptr_impl_ty() { check_types_source_code( r#" -trait Sized {} +//- minicore: sized trait Unpin {} fn foo() -> *const (impl Unpin + Sized) { loop {} } fn main() { let foo = foo(); foo; -} //^^^ *const (impl Unpin + Sized) +} //^^^ *const impl Unpin "#, ); } @@ -67,3 +67,110 @@ fn foo(foo: &dyn for<'a> Foo<'a>) {} "#, ); } + +#[test] +fn sized_bounds_apit() { + check_types_source_code( + r#" +//- minicore: sized +trait Foo {} +trait Bar<T> {} +struct S<T>; +fn test( + a: impl Foo, + b: impl Foo + Sized, + c: &(impl Foo + ?Sized), + d: S<impl Foo>, + ref_any: &impl ?Sized, + empty: impl, +) { + a; + //^ impl Foo + b; + //^ impl Foo + c; + //^ &impl Foo + ?Sized + d; + //^ S<impl Foo> + ref_any; + //^^^^^^^ &impl ?Sized + empty; +} //^^^^^ impl Sized +"#, + ); +} + +#[test] +fn sized_bounds_rpit() { + check_types_source_code( + r#" +//- minicore: sized +trait Foo {} +fn foo1() -> impl Foo { loop {} } +fn foo2() -> impl Foo + Sized { loop {} } +fn foo3() -> impl Foo + ?Sized { loop {} } +fn test() { + let foo = foo1(); + foo; + //^^^ impl Foo + let foo = foo2(); + foo; + //^^^ impl Foo + let foo = foo3(); + foo; +} //^^^ impl Foo + ?Sized +"#, + ); +} + +#[test] +fn parenthesize_ptr_rpit_sized_bounds() { + check_types_source_code( + r#" +//- minicore: sized +trait Foo {} +fn foo1() -> *const impl Foo { loop {} } +fn foo2() -> *const (impl Foo + Sized) { loop {} } +fn foo3() -> *const (impl Sized + Foo) { loop {} } +fn foo4() -> *const (impl Foo + ?Sized) { loop {} } +fn foo5() -> *const (impl ?Sized + Foo) { loop {} } +fn test() { + let foo = foo1(); + foo; + //^^^ *const impl Foo + let foo = foo2(); + foo; + //^^^ *const impl Foo + let foo = foo3(); + foo; + //^^^ *const impl Foo + let foo = foo4(); + foo; + //^^^ *const (impl Foo + ?Sized) + let foo = foo5(); + foo; +} //^^^ *const (impl Foo + ?Sized) +"#, + ); +} + +#[test] +fn sized_bounds_impl_traits_in_fn_signature() { + check_types_source_code( + r#" +//- minicore: sized +trait Foo {} +fn test( + a: fn(impl Foo) -> impl Foo, + b: fn(impl Foo + Sized) -> impl Foo + Sized, + c: fn(&(impl Foo + ?Sized)) -> &(impl Foo + ?Sized), +) { + a; + //^ fn(impl Foo) -> impl Foo + b; + //^ fn(impl Foo) -> impl Foo + c; +} //^ fn(&impl Foo + ?Sized) -> &impl Foo + ?Sized +"#, + ); +} |
