]> git.lizzy.rs Git - rust.git/blob - tests/ui/while_let_loop.rs
Auto merge of #68717 - petrochenkov:stabexpat, r=varkor
[rust.git] / tests / ui / while_let_loop.rs
1 #![warn(clippy::while_let_loop)]
2
3 fn main() {
4     let y = Some(true);
5     loop {
6         if let Some(_x) = y {
7             let _v = 1;
8         } else {
9             break;
10         }
11     }
12
13     #[allow(clippy::never_loop)]
14     loop {
15         // no error, break is not in else clause
16         if let Some(_x) = y {
17             let _v = 1;
18         }
19         break;
20     }
21
22     loop {
23         match y {
24             Some(_x) => true,
25             None => break,
26         };
27     }
28
29     loop {
30         let x = match y {
31             Some(x) => x,
32             None => break,
33         };
34         let _x = x;
35         let _str = "foo";
36     }
37
38     loop {
39         let x = match y {
40             Some(x) => x,
41             None => break,
42         };
43         {
44             let _a = "bar";
45         };
46         {
47             let _b = "foobar";
48         }
49     }
50
51     loop {
52         // no error, else branch does something other than break
53         match y {
54             Some(_x) => true,
55             _ => {
56                 let _z = 1;
57                 break;
58             },
59         };
60     }
61
62     while let Some(x) = y {
63         // no error, obviously
64         println!("{}", x);
65     }
66
67     // #675, this used to have a wrong suggestion
68     loop {
69         let (e, l) = match "".split_whitespace().next() {
70             Some(word) => (word.is_empty(), word.len()),
71             None => break,
72         };
73
74         let _ = (e, l);
75     }
76 }
77
78 fn issue771() {
79     let mut a = 100;
80     let b = Some(true);
81     loop {
82         if a > 10 {
83             break;
84         }
85
86         match b {
87             Some(_) => a = 0,
88             None => break,
89         }
90     }
91 }
92
93 fn issue1017() {
94     let r: Result<u32, u32> = Ok(42);
95     let mut len = 1337;
96
97     loop {
98         match r {
99             Err(_) => len = 0,
100             Ok(length) => {
101                 len = length;
102                 break;
103             },
104         }
105     }
106 }
107
108 #[allow(clippy::never_loop)]
109 fn issue1948() {
110     // should not trigger clippy::while_let_loop lint because break passes an expression
111     let a = Some(10);
112     let b = loop {
113         if let Some(c) = a {
114             break Some(c);
115         } else {
116             break None;
117         }
118     };
119 }