Fixed: Multiple errors on single typo in match pattern
Here we have fixed the case where we were throwing two diagnostic
messages `E0026` and `E0027` for same case like this
Example
error[E0026]: variant `A::A` does not have a field named `fob`
--> src/test/ui/issue-52717.rs:20:12
|
20 | A::A { fob } => { println!("{}", fob); }
| ^^^ variant `A::A` does not have this field
error[E0027]: pattern does not mention field `foo`
--> src/test/ui/issue-52717.rs:20:5
|
20 | A::A { fob } => { println!("{}", fob); }
| ^^^^^^^^^^^^ missing field `foo`
error: aborting due to 2 previous errors
Here above we can see that both `E0026` and `E0027` are depicting
same thing.
So, to fix this issue, we are simply checking element of
`inexistent_fields` is there any value lies in
`unmentioned_fields` using Levenshtein algorithm, if does
then for that case we are simply deleting element from
`unmentioned_fields`. More or less now instead of showing
separate message in `E0027` we are giving extra hint on `E0026`
Address: #52717
This commit is contained in:
parent
cbbd70d4f2
commit
978dc3d66f
5 changed files with 56 additions and 20 deletions
21
src/test/ui/issue-52717.rs
Normal file
21
src/test/ui/issue-52717.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
enum A {
|
||||
A {
|
||||
foo: usize,
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x = A::A { foo: 3 };
|
||||
match x {
|
||||
A::A { fob } => { println!("{}", fob); }
|
||||
}
|
||||
}
|
||||
12
src/test/ui/issue-52717.stderr
Normal file
12
src/test/ui/issue-52717.stderr
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
error[E0026]: variant `A::A` does not have a field named `fob`
|
||||
--> $DIR/issue-52717.rs:19:12
|
||||
|
|
||||
LL | A::A { fob } => { println!("{}", fob); }
|
||||
| ^^^
|
||||
| |
|
||||
| variant `A::A` does not have this field
|
||||
| help: did you mean: `foo`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0026`.
|
||||
|
|
@ -17,7 +17,6 @@ fn main() {
|
|||
match MyOption::MySome(42) {
|
||||
MyOption::MySome { x: 42 } => (),
|
||||
//~^ ERROR variant `MyOption::MySome` does not have a field named `x`
|
||||
//~| ERROR pattern does not mention field `0`
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,17 +2,11 @@ error[E0026]: variant `MyOption::MySome` does not have a field named `x`
|
|||
--> $DIR/issue-17800.rs:18:28
|
||||
|
|
||||
LL | MyOption::MySome { x: 42 } => (),
|
||||
| ^^^^^ variant `MyOption::MySome` does not have this field
|
||||
| ^^^^^
|
||||
| |
|
||||
| variant `MyOption::MySome` does not have this field
|
||||
| help: did you mean: `0`
|
||||
|
||||
error[E0027]: pattern does not mention field `0`
|
||||
--> $DIR/issue-17800.rs:18:9
|
||||
|
|
||||
LL | MyOption::MySome { x: 42 } => (),
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ missing field `0`
|
||||
|
|
||||
= note: trying to match a tuple variant with a struct variant pattern
|
||||
error: aborting due to previous error
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors occurred: E0026, E0027.
|
||||
For more information about an error, try `rustc --explain E0026`.
|
||||
For more information about this error, try `rustc --explain E0026`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue