| // run-rustfix |
| // aux-build:non-exhaustive-enum.rs |
| #![deny(clippy::wildcard_enum_match_arm)] |
| #![allow(dead_code, unreachable_code, unused_variables)] |
| #![allow( |
| clippy::diverging_sub_expression, |
| clippy::single_match, |
| clippy::uninlined_format_args, |
| clippy::unnested_or_patterns, |
| clippy::wildcard_in_or_patterns |
| )] |
| |
| extern crate non_exhaustive_enum; |
| |
| use non_exhaustive_enum::ErrorKind; |
| |
| #[derive(Clone, Copy, Debug, Eq, PartialEq)] |
| enum Color { |
| Red, |
| Green, |
| Blue, |
| Rgb(u8, u8, u8), |
| Cyan, |
| } |
| |
| impl Color { |
| fn is_monochrome(self) -> bool { |
| match self { |
| Color::Red | Color::Green | Color::Blue => true, |
| Color::Rgb(r, g, b) => r | g == 0 || r | b == 0 || g | b == 0, |
| Color::Cyan => false, |
| } |
| } |
| } |
| |
| fn main() { |
| let color = Color::Rgb(0, 0, 127); |
| match color { |
| Color::Red => println!("Red"), |
| Color::Green | Color::Blue | Color::Rgb(..) | Color::Cyan => eprintln!("Not red"), |
| }; |
| match color { |
| Color::Red => println!("Red"), |
| _not_red @ Color::Green | _not_red @ Color::Blue | _not_red @ Color::Rgb(..) | _not_red @ Color::Cyan => eprintln!("Not red"), |
| }; |
| let _str = match color { |
| Color::Red => "Red".to_owned(), |
| not_red @ Color::Green | not_red @ Color::Blue | not_red @ Color::Rgb(..) | not_red @ Color::Cyan => format!("{:?}", not_red), |
| }; |
| match color { |
| Color::Red => {}, |
| Color::Green => {}, |
| Color::Blue => {}, |
| Color::Cyan => {}, |
| c if c.is_monochrome() => {}, |
| Color::Rgb(_, _, _) => {}, |
| }; |
| let _str = match color { |
| Color::Red => "Red", |
| c @ Color::Green | c @ Color::Blue | c @ Color::Rgb(_, _, _) | c @ Color::Cyan => "Not red", |
| }; |
| match color { |
| Color::Rgb(r, _, _) if r > 0 => "Some red", |
| Color::Red | Color::Green | Color::Blue | Color::Rgb(..) | Color::Cyan => "No red", |
| }; |
| match color { |
| Color::Red | Color::Green | Color::Blue | Color::Cyan => {}, |
| Color::Rgb(..) => {}, |
| }; |
| let x: u8 = unimplemented!(); |
| match x { |
| 0 => {}, |
| 140 => {}, |
| _ => {}, |
| }; |
| // We need to use an enum not defined in this test because non_exhaustive is ignored for the |
| // purposes of dead code analysis within a crate. |
| let error_kind = ErrorKind::NotFound; |
| match error_kind { |
| ErrorKind::NotFound => {}, |
| ErrorKind::PermissionDenied | _ => {}, |
| } |
| match error_kind { |
| ErrorKind::NotFound => {}, |
| ErrorKind::PermissionDenied => {}, |
| _ => {}, |
| } |
| |
| { |
| #![allow(clippy::manual_non_exhaustive)] |
| pub enum Enum { |
| A, |
| B, |
| #[doc(hidden)] |
| __Private, |
| } |
| match Enum::A { |
| Enum::A => (), |
| Enum::B | Enum::__Private => (), |
| } |
| } |
| } |