1 // run-rustfix
2 
3 #![warn(clippy::match_wildcard_for_single_variants)]
4 #![allow(dead_code)]
5 
6 enum Foo {
7     A,
8     B,
9     C,
10 }
11 
12 enum Color {
13     Red,
14     Green,
15     Blue,
16     Rgb(u8, u8, u8),
17 }
18 impl Color {
f(self)19     fn f(self) {
20         match self {
21             Self::Red => (),
22             Self::Green => (),
23             Self::Blue => (),
24             _ => (),
25         };
26     }
27 }
28 
main()29 fn main() {
30     let f = Foo::A;
31     match f {
32         Foo::A => {},
33         Foo::B => {},
34         _ => {},
35     }
36 
37     let color = Color::Red;
38 
39     // check exhaustive bindings
40     match color {
41         Color::Red => {},
42         Color::Green => {},
43         Color::Rgb(_r, _g, _b) => {},
44         _ => {},
45     }
46 
47     // check exhaustive wild
48     match color {
49         Color::Red => {},
50         Color::Green => {},
51         Color::Rgb(..) => {},
52         _ => {},
53     }
54     match color {
55         Color::Red => {},
56         Color::Green => {},
57         Color::Rgb(_, _, _) => {},
58         _ => {},
59     }
60 
61     // shouldn't lint as there is one missing variant
62     // and one that isn't exhaustively covered
63     match color {
64         Color::Red => {},
65         Color::Green => {},
66         Color::Rgb(255, _, _) => {},
67         _ => {},
68     }
69 
70     // References shouldn't change anything
71     match &color {
72         &Color::Red => (),
73         Color::Green => (),
74         &Color::Rgb(..) => (),
75         &_ => (),
76     }
77 
78     use self::Color as C;
79 
80     match color {
81         C::Red => (),
82         C::Green => (),
83         C::Rgb(..) => (),
84         _ => (),
85     }
86 
87     match color {
88         C::Red => (),
89         Color::Green => (),
90         Color::Rgb(..) => (),
91         _ => (),
92     }
93 
94     match Some(0) {
95         Some(0) => 0,
96         Some(_) => 1,
97         _ => 2,
98     };
99 
100     #[non_exhaustive]
101     enum Bar {
102         A,
103         B,
104         C,
105     }
106     match Bar::A {
107         Bar::A => (),
108         Bar::B => (),
109         _ => (),
110     };
111 
112     //#6984
113     {
114         #![allow(clippy::manual_non_exhaustive)]
115         pub enum Enum {
116             A,
117             B,
118             C,
119             #[doc(hidden)]
120             __Private,
121         }
122         match Enum::A {
123             Enum::A => (),
124             Enum::B => (),
125             Enum::C => (),
126             _ => (),
127         }
128         match Enum::A {
129             Enum::A => (),
130             Enum::B => (),
131             _ => (),
132         }
133     }
134 }
135