155 lines
2.7 KiB
Rust
155 lines
2.7 KiB
Rust
#![warn(clippy::match_wildcard_for_single_variants)]
|
|
#![allow(dead_code)]
|
|
|
|
enum Foo {
|
|
A,
|
|
B,
|
|
C,
|
|
}
|
|
|
|
enum Color {
|
|
Red,
|
|
Green,
|
|
Blue,
|
|
Rgb(u8, u8, u8),
|
|
}
|
|
impl Color {
|
|
fn f(self) {
|
|
match self {
|
|
Self::Red => (),
|
|
Self::Green => (),
|
|
Self::Blue => (),
|
|
Self::Rgb(..) => (),
|
|
};
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let f = Foo::A;
|
|
match f {
|
|
Foo::A => {},
|
|
Foo::B => {},
|
|
Foo::C => {},
|
|
}
|
|
|
|
let color = Color::Red;
|
|
|
|
// check exhaustive bindings
|
|
match color {
|
|
Color::Red => {},
|
|
Color::Green => {},
|
|
Color::Rgb(_r, _g, _b) => {},
|
|
Color::Blue => {},
|
|
}
|
|
|
|
// check exhaustive wild
|
|
match color {
|
|
Color::Red => {},
|
|
Color::Green => {},
|
|
Color::Rgb(..) => {},
|
|
Color::Blue => {},
|
|
}
|
|
match color {
|
|
Color::Red => {},
|
|
Color::Green => {},
|
|
Color::Rgb(_, _, _) => {},
|
|
Color::Blue => {},
|
|
}
|
|
|
|
// shouldn't lint as there is one missing variant
|
|
// and one that isn't exhaustively covered
|
|
match color {
|
|
Color::Red => {},
|
|
Color::Green => {},
|
|
Color::Rgb(255, _, _) => {},
|
|
_ => {},
|
|
}
|
|
|
|
// References shouldn't change anything
|
|
match &color {
|
|
&Color::Red => (),
|
|
Color::Green => (),
|
|
&Color::Rgb(..) => (),
|
|
Color::Blue => (),
|
|
}
|
|
|
|
use self::Color as C;
|
|
|
|
match color {
|
|
C::Red => (),
|
|
C::Green => (),
|
|
C::Rgb(..) => (),
|
|
C::Blue => (),
|
|
}
|
|
|
|
match color {
|
|
C::Red => (),
|
|
Color::Green => (),
|
|
Color::Rgb(..) => (),
|
|
Color::Blue => (),
|
|
}
|
|
|
|
match Some(0) {
|
|
Some(0) => 0,
|
|
Some(_) => 1,
|
|
_ => 2,
|
|
};
|
|
|
|
#[non_exhaustive]
|
|
enum Bar {
|
|
A,
|
|
B,
|
|
C,
|
|
}
|
|
match Bar::A {
|
|
Bar::A => (),
|
|
Bar::B => (),
|
|
_ => (),
|
|
};
|
|
|
|
//#6984
|
|
{
|
|
#![allow(clippy::manual_non_exhaustive)]
|
|
pub enum Enum {
|
|
A,
|
|
B,
|
|
C,
|
|
#[doc(hidden)]
|
|
__Private,
|
|
}
|
|
match Enum::A {
|
|
Enum::A => (),
|
|
Enum::B => (),
|
|
Enum::C => (),
|
|
Enum::__Private => (),
|
|
}
|
|
match Enum::A {
|
|
Enum::A => (),
|
|
Enum::B => (),
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|
|
|
|
mod issue9993 {
|
|
enum Foo {
|
|
A(bool),
|
|
B,
|
|
}
|
|
|
|
fn test() {
|
|
let _ = match Foo::A(true) {
|
|
_ if false => 0,
|
|
Foo::A(true) => 1,
|
|
Foo::A(false) => 2,
|
|
Foo::B => 3,
|
|
};
|
|
|
|
let _ = match Foo::B {
|
|
_ if false => 0,
|
|
Foo::A(_) => 1,
|
|
Foo::B => 2,
|
|
};
|
|
}
|
|
}
|