| #![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(..) => (), |
| //~^ match_wildcard_for_single_variants |
| }; |
| } |
| } |
| |
| fn main() { |
| let f = Foo::A; |
| match f { |
| Foo::A => {}, |
| Foo::B => {}, |
| Foo::C => {}, |
| //~^ match_wildcard_for_single_variants |
| } |
| |
| let color = Color::Red; |
| |
| // check exhaustive bindings |
| match color { |
| Color::Red => {}, |
| Color::Green => {}, |
| Color::Rgb(_r, _g, _b) => {}, |
| Color::Blue => {}, |
| //~^ match_wildcard_for_single_variants |
| } |
| |
| // check exhaustive wild |
| match color { |
| Color::Red => {}, |
| Color::Green => {}, |
| Color::Rgb(..) => {}, |
| Color::Blue => {}, |
| //~^ match_wildcard_for_single_variants |
| } |
| match color { |
| Color::Red => {}, |
| Color::Green => {}, |
| Color::Rgb(_, _, _) => {}, |
| Color::Blue => {}, |
| //~^ match_wildcard_for_single_variants |
| } |
| |
| // 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 => (), |
| //~^ match_wildcard_for_single_variants |
| } |
| |
| use self::Color as C; |
| |
| match color { |
| C::Red => (), |
| C::Green => (), |
| C::Rgb(..) => (), |
| C::Blue => (), |
| //~^ match_wildcard_for_single_variants |
| } |
| |
| match color { |
| C::Red => (), |
| Color::Green => (), |
| Color::Rgb(..) => (), |
| Color::Blue => (), |
| //~^ match_wildcard_for_single_variants |
| } |
| |
| 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_wildcard_for_single_variants |
| } |
| 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, |
| //~^ match_wildcard_for_single_variants |
| }; |
| } |
| } |