mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 07:44:10 +00:00
Suggest correct order for args and constraints
This commit is contained in:
parent
33d793c326
commit
dcb4e817bc
@ -663,6 +663,20 @@ impl<'a> AstValidator<'a> {
|
||||
_ => None,
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
let snippet_span = match &constraint_spans[..] {
|
||||
[single] => *single,
|
||||
[first, .., last] => first.to(*last),
|
||||
[] => unreachable!(),
|
||||
};
|
||||
let removal_span = match &arg_spans[..] {
|
||||
[first, ..] => snippet_span.until(*first),
|
||||
[] => unreachable!(),
|
||||
};
|
||||
let sugg_span = match &arg_spans[..] {
|
||||
[.., last] => last.shrink_to_hi(),
|
||||
[] => unreachable!(),
|
||||
};
|
||||
let snippet = self.session.source_map().span_to_snippet(snippet_span).unwrap();
|
||||
let constraint_len = constraint_spans.len();
|
||||
// ...and then error:
|
||||
self.err_handler()
|
||||
@ -679,6 +693,15 @@ impl<'a> AstValidator<'a> {
|
||||
),
|
||||
)
|
||||
.span_labels(arg_spans, "generic argument")
|
||||
.multipart_suggestion(
|
||||
"move the constraints after the generic arguments",
|
||||
vec![
|
||||
(removal_span, String::new()),
|
||||
(sugg_span.shrink_to_lo(), ", ".to_string()),
|
||||
(sugg_span, snippet),
|
||||
],
|
||||
Applicability::MachineApplicable,
|
||||
)
|
||||
.emit();
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,11 @@ LL | pub fn test<W, I: Trait<Item=(), W> >() {}
|
||||
| ------- ^ generic argument
|
||||
| |
|
||||
| the constraint is provided here
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | pub fn test<W, I: Trait<W, Item=()> >() {}
|
||||
| --^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,6 +5,11 @@ LL | struct A<T, M: One<A=(), T>> {
|
||||
| ---- ^ generic argument
|
||||
| |
|
||||
| the constraint is provided here
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct A<T, M: One<T, A=()>> {
|
||||
| --^^^^
|
||||
|
||||
error: generic arguments must come before the first constraint
|
||||
--> $DIR/suggest-move-types.rs:33:43
|
||||
@ -14,6 +19,11 @@ LL | struct Al<'a, T, M: OneWithLifetime<A=(), T, 'a>> {
|
||||
| | |
|
||||
| | generic argument
|
||||
| the constraint is provided here
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct Al<'a, T, M: OneWithLifetime<T, 'a, A=()>> {
|
||||
| -- ^^^^
|
||||
|
||||
error: generic arguments must come before the first constraint
|
||||
--> $DIR/suggest-move-types.rs:40:46
|
||||
@ -26,6 +36,11 @@ LL | struct B<T, U, V, M: Three<A=(), B=(), C=(), T, U, V>> {
|
||||
| | | the constraints are provided here
|
||||
| | the constraints are provided here
|
||||
| the constraints are provided here
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct B<T, U, V, M: Three<T, U, V, A=(), B=(), C=()>> {
|
||||
| -- ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generic arguments must come before the first constraint
|
||||
--> $DIR/suggest-move-types.rs:48:71
|
||||
@ -41,6 +56,11 @@ LL | struct Bl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<A=(), B=(), C=(), T, U,
|
||||
| | | the constraints are provided here
|
||||
| | the constraints are provided here
|
||||
| the constraints are provided here
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct Bl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, U, V, 'a, 'b, 'c, A=(), B=(), C=()>> {
|
||||
| -- ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generic arguments must come before the first constraint
|
||||
--> $DIR/suggest-move-types.rs:57:28
|
||||
@ -53,6 +73,11 @@ LL | struct C<T, U, V, M: Three<T, A=(), B=(), C=(), U, V>> {
|
||||
| | | the constraints are provided here
|
||||
| | the constraints are provided here
|
||||
| generic argument
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct C<T, U, V, M: Three<A=(), B=(), C=(), U, V, A=(), B=(), C=()>> {
|
||||
| -- ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generic arguments must come before the first constraint
|
||||
--> $DIR/suggest-move-types.rs:65:53
|
||||
@ -68,6 +93,11 @@ LL | struct Cl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), C=()
|
||||
| | | the constraints are provided here
|
||||
| | generic argument
|
||||
| generic argument
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct Cl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<A=(), B=(), C=(), U, 'b, V, 'c, A=(), B=(), C=()>> {
|
||||
| -- ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generic arguments must come before the first constraint
|
||||
--> $DIR/suggest-move-types.rs:74:28
|
||||
@ -80,6 +110,11 @@ LL | struct D<T, U, V, M: Three<T, A=(), B=(), U, C=(), V>> {
|
||||
| | | the constraints are provided here
|
||||
| | the constraints are provided here
|
||||
| generic argument
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct D<T, U, V, M: Three<A=(), B=(), U, C=(), V, A=(), B=(), U, C=()>> {
|
||||
| -- ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generic arguments must come before the first constraint
|
||||
--> $DIR/suggest-move-types.rs:82:53
|
||||
@ -95,6 +130,11 @@ LL | struct Dl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), U, '
|
||||
| | | the constraints are provided here
|
||||
| | generic argument
|
||||
| generic argument
|
||||
|
|
||||
help: move the constraints after the generic arguments
|
||||
|
|
||||
LL | struct Dl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<A=(), B=(), U, 'b, C=(), V, 'c, A=(), B=(), U, 'b, C=()>> {
|
||||
| -- ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0747]: type provided when a lifetime was expected
|
||||
--> $DIR/suggest-move-types.rs:33:43
|
||||
|
Loading…
Reference in New Issue
Block a user