]> git.lizzy.rs Git - rust.git/commit
auto merge of #14731 : jakub-/rust/pattern-matching-refactor, r=alexcrichton
authorbors <bors@rust-lang.org>
Sat, 21 Jun 2014 02:11:22 +0000 (02:11 +0000)
committerbors <bors@rust-lang.org>
Sat, 21 Jun 2014 02:11:22 +0000 (02:11 +0000)
commitb1646cbfd908dc948b251e362669af421100647a
tree4ee04c45c4e5925fe948aa63f99e7ec3b5b47925
parent2563481ca93877551116b11cde3cc7e21f1d6048
parenta88819adbecabd9f26aec4423415044db4f66279
auto merge of #14731 : jakub-/rust/pattern-matching-refactor, r=alexcrichton

This PR is changing the error messages for non-exhaustive pattern matching to include a more accurate witness, i.e. a pattern that is not covered by any of the ones provided by the user. Example:

```rust
fn main() {
match (true, (Some("foo"), [true, true]), Some(42u)) {
(false, _, _) => (),
(true, (None, [true, _]), None) => (),
(true, (None, [false, _]), Some(1u)) => ()
}
}
```

```sh
/tmp/witness.rs:2:2: 6:3 error: non-exhaustive patterns: (true, (core::option::Some(_), _), _) not covered
/tmp/witness.rs:2  match (true, (Some("foo"), [true, true]), Some(42u)) {
/tmp/witness.rs:3  (false, _, _) => (),
/tmp/witness.rs:4  (true, (None, [true, _]), None) => (),
/tmp/witness.rs:5  (true, (None, [false, _]), Some(1u)) => ()
/tmp/witness.rs:6  }
```

As part of that, I refactored some of the relevant code and carried over the changes to fixed vectors from the previous PR.

I'm putting it out there for now but the tests will be red.