Address review comments

This commit is contained in:
Jakub Wieczorek 2014-06-19 20:55:12 +02:00
parent 76f7eeef52
commit abce42afa3
10 changed files with 153 additions and 66 deletions

View file

@ -10,7 +10,7 @@
fn foo(a: Option<uint>, b: Option<uint>) {
match (a,b) {
//~^ ERROR: non-exhaustive patterns: (core::option::None, core::option::None) not covered
//~^ ERROR: non-exhaustive patterns: `(None, None)` not covered
(Some(a), Some(b)) if a == b => { }
(Some(_), None) |
(None, Some(_)) => { }

View file

@ -10,7 +10,7 @@
fn main() {
let tup = (true, true);
println!("foo {:}", match tup { //~ ERROR non-exhaustive patterns: (true, false) not covered
println!("foo {:}", match tup { //~ ERROR non-exhaustive patterns: `(true, false)` not covered
(false, false) => "foo",
(false, true) => "bar",
(true, true) => "baz"

View file

@ -13,7 +13,7 @@ enum u { c, d }
fn main() {
let x = a(c);
match x { //~ ERROR non-exhaustive patterns: a(c) not covered
match x { //~ ERROR non-exhaustive patterns: `a(c)` not covered
a(d) => { fail!("hello"); }
b => { fail!("goodbye"); }
}

View file

@ -12,21 +12,21 @@ enum t { a, b, }
fn main() {
let x = a;
match x { b => { } } //~ ERROR non-exhaustive patterns: a not covered
match true { //~ ERROR non-exhaustive patterns: false not covered
match x { b => { } } //~ ERROR non-exhaustive patterns: `a` not covered
match true { //~ ERROR non-exhaustive patterns: `false` not covered
true => {}
}
match Some(10) { //~ ERROR non-exhaustive patterns: core::option::Some(_) not covered
match Some(10) { //~ ERROR non-exhaustive patterns: `Some(_)` not covered
None => {}
}
match (2, 3, 4) { //~ ERROR non-exhaustive patterns: (_, _, _) not covered
match (2, 3, 4) { //~ ERROR non-exhaustive patterns: `(_, _, _)` not covered
(_, _, 4) => {}
}
match (a, a) { //~ ERROR non-exhaustive patterns: (a, a) not covered
match (a, a) { //~ ERROR non-exhaustive patterns: `(a, a)` not covered
(a, b) => {}
(b, a) => {}
}
match a { //~ ERROR non-exhaustive patterns: b not covered
match a { //~ ERROR non-exhaustive patterns: `b` not covered
a => {}
}
// This is exhaustive, though the algorithm got it wrong at one point
@ -37,7 +37,7 @@ fn main() {
}
let vec = vec!(Some(42), None, Some(21));
let vec: &[Option<int>] = vec.as_slice();
match vec { //~ ERROR non-exhaustive patterns: [] not covered
match vec { //~ ERROR non-exhaustive patterns: `[]` not covered
[Some(..), None, ..tail] => {}
[Some(..), Some(..), ..tail] => {}
[None] => {}
@ -50,7 +50,7 @@ fn main() {
}
let vec = vec!(0.5);
let vec: &[f32] = vec.as_slice();
match vec { //~ ERROR non-exhaustive patterns: [_, _, _, _] not covered
match vec { //~ ERROR non-exhaustive patterns: `[_, _, _, _]` not covered
[0.1, 0.2, 0.3] => (),
[0.1, 0.2] => (),
[0.1] => (),

View file

@ -0,0 +1,74 @@
// Copyright 2014 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.
#![feature(struct_variant)]
struct Foo {
first: bool,
second: Option<[uint, ..4]>
}
enum Color {
Red,
Green,
CustomRGBA { a: bool, r: u8, g: u8, b: u8 }
}
fn struct_with_a_nested_enum_and_vector() {
match Foo { first: true, second: None } {
//~^ ERROR non-exhaustive patterns: `Foo{first: false, second: Some([_, _, _, _])}` not covered
Foo { first: true, second: None } => (),
Foo { first: true, second: Some(_) } => (),
Foo { first: false, second: None } => (),
Foo { first: false, second: Some([1u, 2u, 3u, 4u]) } => ()
}
}
fn enum_with_multiple_missing_variants() {
match Red {
//~^ ERROR non-exhaustive patterns: `Red` not covered
CustomRGBA { .. } => ()
}
}
fn enum_struct_variant() {
match Red {
//~^ ERROR non-exhaustive patterns: `CustomRGBA{a: true, r: _, g: _, b: _}` not covered
Red => (),
Green => (),
CustomRGBA { a: false, r: _, g: _, b: 0 } => (),
CustomRGBA { a: false, r: _, g: _, b: _ } => ()
}
}
enum Enum {
First,
Second(bool)
}
fn vectors_with_nested_enums() {
let x: &'static [Enum] = [First, Second(false)];
match x {
//~^ ERROR non-exhaustive patterns: `[Second(true), Second(false)]` not covered
[] => (),
[_] => (),
[First, _] => (),
[Second(true), First] => (),
[Second(true), Second(true)] => (),
[Second(false), _] => (),
[_, _, ..tail, _] => ()
}
}
fn main() {
struct_with_a_nested_enum_and_vector();
enum_with_multiple_missing_variants();
enum_struct_variant();
}

View file

@ -10,9 +10,9 @@
fn func((1, (Some(1), 2..3)): (int, (Option<int>, int))) { }
//~^ ERROR refutable pattern in function argument: (_, _) not covered
//~^ ERROR refutable pattern in function argument: `(_, _)` not covered
fn main() {
let (1, (Some(1), 2..3)) = (1, (None, 2));
//~^ ERROR refutable pattern in local binding: (_, _) not covered
//~^ ERROR refutable pattern in local binding: `(_, _)` not covered
}

View file

@ -10,6 +10,6 @@
fn main() {
let f = |3: int| println!("hello");
//~^ ERROR refutable pattern in function argument: _ not covered
//~^ ERROR refutable pattern in function argument: `_` not covered
f(4);
}

View file

@ -27,4 +27,10 @@ fn main() {
let [a, _, _, d] = bar("baz", "foo");
assert_eq!(a, "baz");
assert_eq!(d, "baz");
let out = bar("baz", "foo");
let [a, ..xs, d] = out;
assert_eq!(a, "baz");
assert!(xs == ["foo", "foo"]);
assert_eq!(d, "baz");
}