diff options
| author | Pramod Bisht <pramodpsb@outlook.com> | 2018-10-19 10:33:49 +0000 |
|---|---|---|
| committer | Pramod Bisht <pramodpsb@outlook.com> | 2018-10-19 10:33:49 +0000 |
| commit | 978dc3d66f5e9a3bea733aca664e25b845fa0f27 (patch) | |
| tree | ecd0f1c5af295781cd55a5aaf2f2222cc53e1a01 /src/test | |
| parent | cbbd70d4f25bc255d80b6b9ba0a65f6c5957f2b7 (diff) | |
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
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/issue-52717.rs | 21 | ||||
| -rw-r--r-- | src/test/ui/issue-52717.stderr | 12 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-17800.rs | 1 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-17800.stderr | 18 |
4 files changed, 39 insertions, 13 deletions
diff --git a/src/test/ui/issue-52717.rs b/src/test/ui/issue-52717.rs new file mode 100644 index 00000000000..d40e2bd3d53 --- /dev/null +++ b/src/test/ui/issue-52717.rs @@ -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); } + } +} diff --git a/src/test/ui/issue-52717.stderr b/src/test/ui/issue-52717.stderr new file mode 100644 index 00000000000..0ef5a84671d --- /dev/null +++ b/src/test/ui/issue-52717.stderr @@ -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`. diff --git a/src/test/ui/issues/issue-17800.rs b/src/test/ui/issues/issue-17800.rs index f7cae91aa93..8ccf34f2456 100644 --- a/src/test/ui/issues/issue-17800.rs +++ b/src/test/ui/issues/issue-17800.rs @@ -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` _ => (), } } diff --git a/src/test/ui/issues/issue-17800.stderr b/src/test/ui/issues/issue-17800.stderr index 2cc562fbd7a..e1c48e8a0e8 100644 --- a/src/test/ui/issues/issue-17800.stderr +++ b/src/test/ui/issues/issue-17800.stderr @@ -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 2 previous errors +error: aborting due to previous error -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`. |
