]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/wildcard_enum_match_arm.rs
wildcard_enum_match_arm gives suggestions
[rust.git] / tests / ui / wildcard_enum_match_arm.rs
index 58daabf4268645b01a309a5993826029ffd680e2..86d4c7f28c4e46fe0317d9ce991a2ff64abd6058 100644 (file)
@@ -1,42 +1,73 @@
-#![deny(clippy::wildcard_enum_match_arm)]
-
-#[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,
-        }
+#![warn(clippy::wildcard_enum_match_arm)]
+
+#[derive(Debug)]
+enum Maybe<T> {
+    Some(T),
+    Probably(T),
+    None,
+}
+
+fn is_it_wildcard<T>(m: Maybe<T>) -> &'static str {
+    match m {
+        Maybe::Some(_) => "Some",
+        _ => "Could be",
+    }
+}
+
+fn is_it_bound<T>(m: Maybe<T>) -> &'static str {
+    match m {
+        Maybe::None => "None",
+        _other => "Could be",
+    }
+}
+
+fn is_it_binding(m: Maybe<u32>) -> String {
+    match m {
+        Maybe::Some(v) => "Large".to_string(),
+        n => format!("{:?}", n),
+    }
+}
+
+fn is_it_binding_exhaustive(m: Maybe<u32>) -> String {
+    match m {
+        Maybe::Some(v) => "Large".to_string(),
+        n @ Maybe::Probably(_) | n @ Maybe::None => format!("{:?}", n),
+    }
+}
+
+fn is_it_with_guard(m: Maybe<u32>) -> &'static str {
+    match m {
+        Maybe::Some(v) if v > 100 => "Large",
+        _ => "Who knows",
+    }
+}
+
+fn is_it_exhaustive<T>(m: Maybe<T>) -> &'static str {
+    match m {
+        Maybe::None => "None",
+        Maybe::Some(_) | Maybe::Probably(..) => "Could be",
+    }
+}
+
+fn is_one_or_three(i: i32) -> bool {
+    match i {
+        1 | 3 => true,
+        _ => false,
     }
 }
 
 fn main() {
-    let color = Color::Rgb(0, 0, 127);
-    match color {
-        Color::Red => println!("Red"),
-        _ => eprintln!("Not red"),
-    };
-    match color {
-        Color::Red => {},
-        Color::Green => {},
-        Color::Blue => {},
-        Color::Cyan => {},
-        c if c.is_monochrome() => {},
-        Color::Rgb(_, _, _) => {},
-    };
-    let x: u8 = unimplemented!();
-    match x {
-        0 => {},
-        140 => {},
-        _ => {},
-    };
+    println!("{}", is_it_wildcard(Maybe::Some("foo")));
+
+    println!("{}", is_it_bound(Maybe::Some("foo")));
+
+    println!("{}", is_it_binding(Maybe::Some(1)));
+
+    println!("{}", is_it_binding_exhaustive(Maybe::Some(1)));
+
+    println!("{}", is_it_with_guard(Maybe::Some(1)));
+
+    println!("{}", is_it_exhaustive(Maybe::Some("foo")));
+
+    println!("{}", is_one_or_three(2));
 }