1// run-rustfix
2
3#![warn(clippy::match_wildcard_for_single_variants)]
4#![allow(dead_code)]
5
6enum Foo {
7    A,
8    B,
9    C,
10}
11
12enum Color {
13    Red,
14    Green,
15    Blue,
16    Rgb(u8, u8, u8),
17}
18impl Color {
19    fn f(self) {
20        match self {
21            Self::Red => (),
22            Self::Green => (),
23            Self::Blue => (),
24            Self::Rgb(..) => (),
25        };
26    }
27}
28
29fn main() {
30    let f = Foo::A;
31    match f {
32        Foo::A => {},
33        Foo::B => {},
34        Foo::C => {},
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        Color::Blue => {},
45    }
46
47    // check exhaustive wild
48    match color {
49        Color::Red => {},
50        Color::Green => {},
51        Color::Rgb(..) => {},
52        Color::Blue => {},
53    }
54    match color {
55        Color::Red => {},
56        Color::Green => {},
57        Color::Rgb(_, _, _) => {},
58        Color::Blue => {},
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        Color::Blue => (),
76    }
77
78    use self::Color as C;
79
80    match color {
81        C::Red => (),
82        C::Green => (),
83        C::Rgb(..) => (),
84        C::Blue => (),
85    }
86
87    match color {
88        C::Red => (),
89        Color::Green => (),
90        Color::Rgb(..) => (),
91        Color::Blue => (),
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