Compare tuple element & arg types before suggesting a tuple

This commit is contained in:
Rob Pilling 2021-12-05 21:41:33 +00:00
parent 80059f9942
commit 54d2d30662
6 changed files with 79 additions and 32 deletions

View file

@ -0,0 +1,13 @@
// Ensure we don't suggest tuple-wrapping when we'd end up with a type error
fn main() {
// we shouldn't suggest to fix these - `2` isn't a `bool`
let _: Option<(i32, bool)> = Some(1, 2);
//~^ ERROR this enum variant takes 1 argument but 2 arguments were supplied
int_bool(1, 2);
//~^ ERROR this function takes 1 argument but 2 arguments were supplied
}
fn int_bool(_: (i32, bool)) {
}

View file

@ -0,0 +1,25 @@
error[E0061]: this enum variant takes 1 argument but 2 arguments were supplied
--> $DIR/args-instead-of-tuple-errors.rs:6:34
|
LL | let _: Option<(i32, bool)> = Some(1, 2);
| ^^^^ - - supplied 2 arguments
| |
| expected 1 argument
error[E0061]: this function takes 1 argument but 2 arguments were supplied
--> $DIR/args-instead-of-tuple-errors.rs:8:5
|
LL | int_bool(1, 2);
| ^^^^^^^^ - - supplied 2 arguments
| |
| expected 1 argument
|
note: function defined here
--> $DIR/args-instead-of-tuple-errors.rs:12:4
|
LL | fn int_bool(_: (i32, bool)) {
| ^^^^^^^^ --------------
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0061`.

View file

@ -11,8 +11,8 @@ fn main() {
let _: Option<()> = Some(());
//~^ ERROR this enum variant takes 1 argument but 0 arguments were supplied
f((1, 2)); //~ ERROR this function takes 1 argument
two_ints((1, 2)); //~ ERROR this function takes 1 argument
}
fn f(_: (i32, i32)) {
fn two_ints(_: (i32, i32)) {
}

View file

@ -11,8 +11,8 @@ fn main() {
let _: Option<()> = Some();
//~^ ERROR this enum variant takes 1 argument but 0 arguments were supplied
f(1, 2); //~ ERROR this function takes 1 argument
two_ints(1, 2); //~ ERROR this function takes 1 argument
}
fn f(_: (i32, i32)) {
fn two_ints(_: (i32, i32)) {
}

View file

@ -34,18 +34,18 @@ LL | let _: Option<()> = Some(());
error[E0061]: this function takes 1 argument but 2 arguments were supplied
--> $DIR/args-instead-of-tuple.rs:14:5
|
LL | f(1, 2);
| ^ - - supplied 2 arguments
LL | two_ints(1, 2);
| ^^^^^^^^ - - supplied 2 arguments
|
note: function defined here
--> $DIR/args-instead-of-tuple.rs:17:4
|
LL | fn f(_: (i32, i32)) {
| ^ -------------
LL | fn two_ints(_: (i32, i32)) {
| ^^^^^^^^ -------------
help: use parentheses to construct a tuple
|
LL | f((1, 2));
| + +
LL | two_ints((1, 2));
| + +
error: aborting due to 4 previous errors