]>
Commit | Line | Data |
---|---|---|
f20569fa XL |
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 | } |