Rollup merge of #99835 - TaKO8Ki:suggest-adding-or-removing-ref-for-binding-pattern, r=estebank
Suggest adding/removing `ref` for binding patterns This fixes what a fixme comment says. r? `@estebank`
This commit is contained in:
commit
9e4feff46a
8 changed files with 160 additions and 6 deletions
|
|
@ -17,6 +17,10 @@ LL | (0, ref y) | (y, 0) => {}
|
|||
| first introduced with type `&{integer}` here
|
||||
|
|
||||
= note: in the same arm, a binding must have the same type in all alternatives
|
||||
help: consider adding `ref`
|
||||
|
|
||||
LL | (0, ref y) | (ref y, 0) => {}
|
||||
| +++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
// run-rustfix
|
||||
#![allow(dead_code, unused_variables)]
|
||||
|
||||
fn main() {
|
||||
enum Blah {
|
||||
A(isize, isize, usize),
|
||||
B(isize, usize),
|
||||
}
|
||||
|
||||
match Blah::A(1, 1, 2) {
|
||||
Blah::A(_, x, ref y) | Blah::B(x, ref y) => {}
|
||||
//~^ ERROR mismatched types
|
||||
//~| ERROR variable `y` is bound inconsistently across alternatives separated by `|`
|
||||
}
|
||||
|
||||
match Blah::A(1, 1, 2) {
|
||||
Blah::A(_, x, y) | Blah::B(x, y) => {}
|
||||
//~^ ERROR mismatched types
|
||||
//~| variable `y` is bound inconsistently across alternatives separated by `|`
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
// run-rustfix
|
||||
#![allow(dead_code, unused_variables)]
|
||||
|
||||
fn main() {
|
||||
enum Blah {
|
||||
A(isize, isize, usize),
|
||||
B(isize, usize),
|
||||
}
|
||||
|
||||
match Blah::A(1, 1, 2) {
|
||||
Blah::A(_, x, ref y) | Blah::B(x, y) => {}
|
||||
//~^ ERROR mismatched types
|
||||
//~| ERROR variable `y` is bound inconsistently across alternatives separated by `|`
|
||||
}
|
||||
|
||||
match Blah::A(1, 1, 2) {
|
||||
Blah::A(_, x, y) | Blah::B(x, ref y) => {}
|
||||
//~^ ERROR mismatched types
|
||||
//~| variable `y` is bound inconsistently across alternatives separated by `|`
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
error[E0409]: variable `y` is bound inconsistently across alternatives separated by `|`
|
||||
--> $DIR/suggest-adding-or-removing-ref-for-binding-pattern.rs:11:43
|
||||
|
|
||||
LL | Blah::A(_, x, ref y) | Blah::B(x, y) => {}
|
||||
| - first binding ^ bound in different ways
|
||||
|
||||
error[E0409]: variable `y` is bound inconsistently across alternatives separated by `|`
|
||||
--> $DIR/suggest-adding-or-removing-ref-for-binding-pattern.rs:17:43
|
||||
|
|
||||
LL | Blah::A(_, x, y) | Blah::B(x, ref y) => {}
|
||||
| - first binding ^ bound in different ways
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/suggest-adding-or-removing-ref-for-binding-pattern.rs:11:43
|
||||
|
|
||||
LL | match Blah::A(1, 1, 2) {
|
||||
| ---------------- this expression has type `Blah`
|
||||
LL | Blah::A(_, x, ref y) | Blah::B(x, y) => {}
|
||||
| ----- ^ expected `&usize`, found `usize`
|
||||
| |
|
||||
| first introduced with type `&usize` here
|
||||
|
|
||||
= note: in the same arm, a binding must have the same type in all alternatives
|
||||
help: consider adding `ref`
|
||||
|
|
||||
LL | Blah::A(_, x, ref y) | Blah::B(x, ref y) => {}
|
||||
| +++
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/suggest-adding-or-removing-ref-for-binding-pattern.rs:17:39
|
||||
|
|
||||
LL | match Blah::A(1, 1, 2) {
|
||||
| ---------------- this expression has type `Blah`
|
||||
LL | Blah::A(_, x, y) | Blah::B(x, ref y) => {}
|
||||
| - ^^^^^ expected `usize`, found `&usize`
|
||||
| |
|
||||
| first introduced with type `usize` here
|
||||
|
|
||||
= note: in the same arm, a binding must have the same type in all alternatives
|
||||
help: consider removing `ref`
|
||||
|
|
||||
LL - Blah::A(_, x, y) | Blah::B(x, ref y) => {}
|
||||
LL + Blah::A(_, x, y) | Blah::B(x, y) => {}
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0308, E0409.
|
||||
For more information about an error, try `rustc --explain E0308`.
|
||||
|
|
@ -31,6 +31,10 @@ LL | Opts::A(ref i) | Opts::B(i) => {}
|
|||
| first introduced with type `&isize` here
|
||||
|
|
||||
= note: in the same arm, a binding must have the same type in all alternatives
|
||||
help: consider adding `ref`
|
||||
|
|
||||
LL | Opts::A(ref i) | Opts::B(ref i) => {}
|
||||
| +++
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/resolve-inconsistent-binding-mode.rs:18:34
|
||||
|
|
@ -43,6 +47,10 @@ LL | Opts::A(ref i) | Opts::B(i) => {}
|
|||
| first introduced with type `&isize` here
|
||||
|
|
||||
= note: in the same arm, a binding must have the same type in all alternatives
|
||||
help: consider adding `ref`
|
||||
|
|
||||
LL | Opts::A(ref i) | Opts::B(ref i) => {}
|
||||
| +++
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/resolve-inconsistent-binding-mode.rs:27:38
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ fn main() {
|
|||
//~| ERROR mismatched types
|
||||
//~| ERROR variable `c` is not bound in all patterns
|
||||
//~| HELP if you meant to match on unit variant `E::A`, use the full path in the pattern
|
||||
//~| HELP consider removing `ref`
|
||||
}
|
||||
|
||||
let z = (10, 20);
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ LL | (A, B) | (ref B, c) | (c, A) => ()
|
|||
| first binding
|
||||
|
||||
error[E0408]: variable `CONST1` is not bound in all patterns
|
||||
--> $DIR/resolve-inconsistent-names.rs:30:23
|
||||
--> $DIR/resolve-inconsistent-names.rs:31:23
|
||||
|
|
||||
LL | (CONST1, _) | (_, Const2) => ()
|
||||
| ------ ^^^^^^^^^^^ pattern doesn't bind `CONST1`
|
||||
|
|
@ -69,7 +69,7 @@ LL | const CONST1: usize = 10;
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ not accessible
|
||||
|
||||
error[E0408]: variable `Const2` is not bound in all patterns
|
||||
--> $DIR/resolve-inconsistent-names.rs:30:9
|
||||
--> $DIR/resolve-inconsistent-names.rs:31:9
|
||||
|
|
||||
LL | (CONST1, _) | (_, Const2) => ()
|
||||
| ^^^^^^^^^^^ ------ variable not in all patterns
|
||||
|
|
@ -92,6 +92,11 @@ LL | (A, B) | (ref B, c) | (c, A) => ()
|
|||
| first introduced with type `E` here
|
||||
|
|
||||
= note: in the same arm, a binding must have the same type in all alternatives
|
||||
help: consider removing `ref`
|
||||
|
|
||||
LL - (A, B) | (ref B, c) | (c, A) => ()
|
||||
LL + (A, B) | (B, c) | (c, A) => ()
|
||||
|
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue