]> git.lizzy.rs Git - rust.git/blob - tests/ui/match_single_binding.rs
Fix `manual_map` at the end of an if chain
[rust.git] / tests / ui / match_single_binding.rs
1 // run-rustfix
2
3 #![warn(clippy::match_single_binding)]
4 #![allow(unused_variables, clippy::many_single_char_names, clippy::toplevel_ref_arg)]
5
6 struct Point {
7     x: i32,
8     y: i32,
9 }
10
11 fn coords() -> Point {
12     Point { x: 1, y: 2 }
13 }
14
15 macro_rules! foo {
16     ($param:expr) => {
17         match $param {
18             _ => println!("whatever"),
19         }
20     };
21 }
22
23 fn main() {
24     let a = 1;
25     let b = 2;
26     let c = 3;
27     // Lint
28     match (a, b, c) {
29         (x, y, z) => {
30             println!("{} {} {}", x, y, z);
31         },
32     }
33     // Lint
34     match (a, b, c) {
35         (x, y, z) => println!("{} {} {}", x, y, z),
36     }
37     // Ok
38     foo!(a);
39     // Ok
40     match a {
41         2 => println!("2"),
42         _ => println!("Not 2"),
43     }
44     // Ok
45     let d = Some(5);
46     match d {
47         Some(d) => println!("{}", d),
48         _ => println!("None"),
49     }
50     // Lint
51     match a {
52         _ => println!("whatever"),
53     }
54     // Lint
55     match a {
56         _ => {
57             let x = 29;
58             println!("x has a value of {}", x);
59         },
60     }
61     // Lint
62     match a {
63         _ => {
64             let e = 5 * a;
65             if e >= 5 {
66                 println!("e is superior to 5");
67             }
68         },
69     }
70     // Lint
71     let p = Point { x: 0, y: 7 };
72     match p {
73         Point { x, y } => println!("Coords: ({}, {})", x, y),
74     }
75     // Lint
76     match p {
77         Point { x: x1, y: y1 } => println!("Coords: ({}, {})", x1, y1),
78     }
79     // Lint
80     let x = 5;
81     match x {
82         ref r => println!("Got a reference to {}", r),
83     }
84     // Lint
85     let mut x = 5;
86     match x {
87         ref mut mr => println!("Got a mutable reference to {}", mr),
88     }
89     // Lint
90     let product = match coords() {
91         Point { x, y } => x * y,
92     };
93     // Lint
94     let v = vec![Some(1), Some(2), Some(3), Some(4)];
95     #[allow(clippy::let_and_return)]
96     let _ = v
97         .iter()
98         .map(|i| match i.unwrap() {
99             unwrapped => unwrapped,
100         })
101         .collect::<Vec<u8>>();
102     // Ok
103     let x = 1;
104     match x {
105         #[cfg(disabled_feature)]
106         0 => println!("Disabled branch"),
107         _ => println!("Enabled branch"),
108     }
109     // Lint
110     let x = 1;
111     let y = 1;
112     match match y {
113         0 => 1,
114         _ => 2,
115     } {
116         _ => println!("Single branch"),
117     }
118     // Ok
119     let x = 1;
120     let y = 1;
121     match match y {
122         0 => 1,
123         _ => 2,
124     } {
125         #[cfg(disabled_feature)]
126         0 => println!("Array index start"),
127         _ => println!("Not an array index start"),
128     }
129     // False negative
130     let x = 1;
131     match x {
132         // =>
133         _ => println!("Not an array index start"),
134     }
135 }