diff options
| author | iximeow <me@iximeow.net> | 2020-09-13 20:55:06 -0700 |
|---|---|---|
| committer | iximeow <me@iximeow.net> | 2020-09-13 21:24:34 -0700 |
| commit | 0eac38b7a65c29734f4b2d34f35ee0aa9cb00a74 (patch) | |
| tree | d2c46ff6ec5a1229f71f0b47e5824fa434d0e716 /src | |
| parent | dd33766e4a9a918058c3447d42491e874e21f7cc (diff) | |
| download | rust-0eac38b7a65c29734f4b2d34f35ee0aa9cb00a74.tar.gz rust-0eac38b7a65c29734f4b2d34f35ee0aa9cb00a74.zip | |
fix syntax error in suggesting generic constraint in trait parameter
suggest `where T: Foo` for the first bound on a trait, then suggest `, T: Foo` when the suggested bound would add to an existing set of `where` clauses. `where T: Foo` may be the first bound if `T` has a default, because we'd rather suggest ``` trait A<T=()> where T: Copy ``` than ``` trait A<T: Copy=()> ``` for legibility reasons.
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/trait-impl-bound-suggestions.fixed | 20 | ||||
| -rw-r--r-- | src/test/ui/trait-impl-bound-suggestions.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/trait-impl-bound-suggestions.stderr | 17 | ||||
| -rw-r--r-- | src/test/ui/type/type-check-defaults.stderr | 4 |
4 files changed, 59 insertions, 2 deletions
diff --git a/src/test/ui/trait-impl-bound-suggestions.fixed b/src/test/ui/trait-impl-bound-suggestions.fixed new file mode 100644 index 00000000000..db3a95f5c4f --- /dev/null +++ b/src/test/ui/trait-impl-bound-suggestions.fixed @@ -0,0 +1,20 @@ +// run-rustfix + +#[allow(unused)] +use std::fmt::Debug; +// Rustfix should add this, or use `std::fmt::Debug` instead. + +#[allow(dead_code)] +struct ConstrainedStruct<X: Copy> { + x: X +} + +#[allow(dead_code)] +trait InsufficientlyConstrainedGeneric<X=()> where X: Copy { + fn return_the_constrained_type(&self, x: X) -> ConstrainedStruct<X> { + //~^ ERROR the trait bound `X: Copy` is not satisfied + ConstrainedStruct { x } + } +} + +pub fn main() { } diff --git a/src/test/ui/trait-impl-bound-suggestions.rs b/src/test/ui/trait-impl-bound-suggestions.rs new file mode 100644 index 00000000000..bf75175179e --- /dev/null +++ b/src/test/ui/trait-impl-bound-suggestions.rs @@ -0,0 +1,20 @@ +// run-rustfix + +#[allow(unused)] +use std::fmt::Debug; +// Rustfix should add this, or use `std::fmt::Debug` instead. + +#[allow(dead_code)] +struct ConstrainedStruct<X: Copy> { + x: X +} + +#[allow(dead_code)] +trait InsufficientlyConstrainedGeneric<X=()> { + fn return_the_constrained_type(&self, x: X) -> ConstrainedStruct<X> { + //~^ ERROR the trait bound `X: Copy` is not satisfied + ConstrainedStruct { x } + } +} + +pub fn main() { } diff --git a/src/test/ui/trait-impl-bound-suggestions.stderr b/src/test/ui/trait-impl-bound-suggestions.stderr new file mode 100644 index 00000000000..3a21e9c6b2a --- /dev/null +++ b/src/test/ui/trait-impl-bound-suggestions.stderr @@ -0,0 +1,17 @@ +error[E0277]: the trait bound `X: Copy` is not satisfied + --> $DIR/trait-impl-bound-suggestions.rs:14:52 + | +LL | struct ConstrainedStruct<X: Copy> { + | ---- required by this bound in `ConstrainedStruct` +... +LL | fn return_the_constrained_type(&self, x: X) -> ConstrainedStruct<X> { + | ^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `X` + | +help: consider further restricting type parameter `X` + | +LL | trait InsufficientlyConstrainedGeneric<X=()> where X: Copy { + | ^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type/type-check-defaults.stderr b/src/test/ui/type/type-check-defaults.stderr index fa6f3422410..d8c7f595e62 100644 --- a/src/test/ui/type/type-check-defaults.stderr +++ b/src/test/ui/type/type-check-defaults.stderr @@ -56,8 +56,8 @@ LL | trait Base<T = String>: Super<T> { } | help: consider further restricting type parameter `T` | -LL | trait Base<T = String>: Super<T>, T: Copy { } - | ^^^^^^^^^ +LL | trait Base<T = String>: Super<T> where T: Copy { } + | ^^^^^^^^^^^^^ error[E0277]: cannot add `u8` to `i32` --> $DIR/type-check-defaults.rs:24:66 |
