diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/implied_bounds_in_impls.fixed | 39 | ||||
| -rw-r--r-- | tests/ui/implied_bounds_in_impls.rs | 39 | ||||
| -rw-r--r-- | tests/ui/implied_bounds_in_impls.stderr | 50 |
3 files changed, 127 insertions, 1 deletions
diff --git a/tests/ui/implied_bounds_in_impls.fixed b/tests/ui/implied_bounds_in_impls.fixed index 69fcc8921d6..a50fa0ccf6e 100644 --- a/tests/ui/implied_bounds_in_impls.fixed +++ b/tests/ui/implied_bounds_in_impls.fixed @@ -83,4 +83,43 @@ mod issue11422 { fn f() -> impl Trait1<()> + Trait2 {} } +mod issue11435 { + // Associated type needs to be included on DoubleEndedIterator in the suggestion + fn my_iter() -> impl DoubleEndedIterator<Item = u32> { + 0..5 + } + + // Removing the `Clone` bound should include the `+` behind it in its remove suggestion + fn f() -> impl Copy { + 1 + } + + trait Trait1<T> { + type U; + } + impl Trait1<i32> for () { + type U = i64; + } + trait Trait2<T>: Trait1<T> {} + impl Trait2<i32> for () {} + + // When the other trait has generics, it shouldn't add another pair of `<>` + fn f2() -> impl Trait2<i32, U = i64> {} + + trait Trait3<T, U, V> { + type X; + type Y; + } + trait Trait4<T>: Trait3<T, i16, i64> {} + impl Trait3<i8, i16, i64> for () { + type X = i32; + type Y = i128; + } + impl Trait4<i8> for () {} + + // Associated type `X` is specified, but `Y` is not, so only that associated type should be moved + // over + fn f3() -> impl Trait4<i8, X = i32, Y = i128> {} +} + fn main() {} diff --git a/tests/ui/implied_bounds_in_impls.rs b/tests/ui/implied_bounds_in_impls.rs index 5504feae613..e74ed4425b8 100644 --- a/tests/ui/implied_bounds_in_impls.rs +++ b/tests/ui/implied_bounds_in_impls.rs @@ -83,4 +83,43 @@ mod issue11422 { fn f() -> impl Trait1<()> + Trait2 {} } +mod issue11435 { + // Associated type needs to be included on DoubleEndedIterator in the suggestion + fn my_iter() -> impl Iterator<Item = u32> + DoubleEndedIterator { + 0..5 + } + + // Removing the `Clone` bound should include the `+` behind it in its remove suggestion + fn f() -> impl Copy + Clone { + 1 + } + + trait Trait1<T> { + type U; + } + impl Trait1<i32> for () { + type U = i64; + } + trait Trait2<T>: Trait1<T> {} + impl Trait2<i32> for () {} + + // When the other trait has generics, it shouldn't add another pair of `<>` + fn f2() -> impl Trait1<i32, U = i64> + Trait2<i32> {} + + trait Trait3<T, U, V> { + type X; + type Y; + } + trait Trait4<T>: Trait3<T, i16, i64> {} + impl Trait3<i8, i16, i64> for () { + type X = i32; + type Y = i128; + } + impl Trait4<i8> for () {} + + // Associated type `X` is specified, but `Y` is not, so only that associated type should be moved + // over + fn f3() -> impl Trait3<i8, i16, i64, X = i32, Y = i128> + Trait4<i8, X = i32> {} +} + fn main() {} diff --git a/tests/ui/implied_bounds_in_impls.stderr b/tests/ui/implied_bounds_in_impls.stderr index d6a4ae889fe..9f381efba0a 100644 --- a/tests/ui/implied_bounds_in_impls.stderr +++ b/tests/ui/implied_bounds_in_impls.stderr @@ -143,5 +143,53 @@ LL - fn default_generic_param2() -> impl PartialOrd + PartialEq + Debug {} LL + fn default_generic_param2() -> impl PartialOrd + Debug {} | -error: aborting due to 12 previous errors +error: this bound is already specified as the supertrait of `DoubleEndedIterator` + --> $DIR/implied_bounds_in_impls.rs:88:26 + | +LL | fn my_iter() -> impl Iterator<Item = u32> + DoubleEndedIterator { + | ^^^^^^^^^^^^^^^^^^^^ + | +help: try removing this bound + | +LL - fn my_iter() -> impl Iterator<Item = u32> + DoubleEndedIterator { +LL + fn my_iter() -> impl DoubleEndedIterator<Item = u32> { + | + +error: this bound is already specified as the supertrait of `Copy` + --> $DIR/implied_bounds_in_impls.rs:93:27 + | +LL | fn f() -> impl Copy + Clone { + | ^^^^^ + | +help: try removing this bound + | +LL - fn f() -> impl Copy + Clone { +LL + fn f() -> impl Copy { + | + +error: this bound is already specified as the supertrait of `Trait2<i32>` + --> $DIR/implied_bounds_in_impls.rs:107:21 + | +LL | fn f2() -> impl Trait1<i32, U = i64> + Trait2<i32> {} + | ^^^^^^^^^^^^^^^^^^^^ + | +help: try removing this bound + | +LL - fn f2() -> impl Trait1<i32, U = i64> + Trait2<i32> {} +LL + fn f2() -> impl Trait2<i32, U = i64> {} + | + +error: this bound is already specified as the supertrait of `Trait4<i8, X = i32>` + --> $DIR/implied_bounds_in_impls.rs:122:21 + | +LL | fn f3() -> impl Trait3<i8, i16, i64, X = i32, Y = i128> + Trait4<i8, X = i32> {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +help: try removing this bound + | +LL - fn f3() -> impl Trait3<i8, i16, i64, X = i32, Y = i128> + Trait4<i8, X = i32> {} +LL + fn f3() -> impl Trait4<i8, X = i32, Y = i128> {} + | + +error: aborting due to 16 previous errors |
