Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/tests/display_source_code.rs')
| -rw-r--r-- | crates/hir-ty/src/tests/display_source_code.rs | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/crates/hir-ty/src/tests/display_source_code.rs b/crates/hir-ty/src/tests/display_source_code.rs new file mode 100644 index 0000000000..240942e488 --- /dev/null +++ b/crates/hir-ty/src/tests/display_source_code.rs @@ -0,0 +1,176 @@ +use super::check_types_source_code; + +#[test] +fn qualify_path_to_submodule() { + check_types_source_code( + r#" +mod foo { + pub struct Foo; +} + +fn bar() { + let foo: foo::Foo = foo::Foo; + foo; +} //^^^ foo::Foo + +"#, + ); +} + +#[test] +fn omit_default_type_parameters() { + check_types_source_code( + r#" +struct Foo<T = u8> { t: T } +fn main() { + let foo = Foo { t: 5u8 }; + foo; +} //^^^ Foo +"#, + ); + + check_types_source_code( + r#" +struct Foo<K, T = u8> { k: K, t: T } +fn main() { + let foo = Foo { k: 400, t: 5u8 }; + foo; +} //^^^ Foo<i32> +"#, + ); +} + +#[test] +fn render_raw_ptr_impl_ty() { + check_types_source_code( + r#" +//- minicore: sized +trait Unpin {} +fn foo() -> *const (impl Unpin + Sized) { loop {} } +fn main() { + let foo = foo(); + foo; +} //^^^ *const impl Unpin +"#, + ); +} + +#[test] +fn render_dyn_for_ty() { + // FIXME + check_types_source_code( + r#" +trait Foo<'a> {} + +fn foo(foo: &dyn for<'a> Foo<'a>) {} + // ^^^ &dyn Foo +"#, + ); +} + +#[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 +"#, + ); +} |