3 #![warn(clippy::while_let_on_iterator)]
4 #![allow(clippy::never_loop, unreachable_code, unused_mut)]
8 while let Option::Some(x) = iter.next() {
13 while let Some(x) = iter.next() {
18 while let Some(_) = iter.next() {}
21 while let None = iter.next() {} // this is fine (if nonsensical)
24 if let Some(x) = iter.next() {
29 // the following shouldn't warn because it can't be written with a for loop
30 let mut iter = 1u32..20;
31 while let Some(_) = iter.next() {
32 println!("next: {:?}", iter.next())
36 let mut iter = 1u32..20;
37 while let Some(_) = iter.next() {
38 println!("next: {:?}", iter.next());
42 let mut iter = 1u32..20;
43 while let Some(_) = iter.next() {
46 println!("Remaining iter {:?}", iter);
49 let mut iter = 1u32..20;
50 while let Some(_) = iter.next() {
60 // consume all the 42s
61 while let Some(&42) = b.next() {}
66 while let Some(&(1, 2, 3)) = b.next() {}
71 while let Some(&None) = b.next() {}
73 /* This gives “refutable pattern in `for` loop binding: `&_` not covered”
75 for &(1, 2, 3) in b {}
76 for &Option::None in b.next() {}
83 let v = vec![1, 2, 3];
84 let mut it = v.windows(2);
85 while let Some([x, y]) = it.next() {
90 let mut it = v.windows(2);
91 while let Some([x, ..]) = it.next() {
95 let mut it = v.windows(2);
96 while let Some([.., y]) = it.next() {
100 let mut it = v.windows(2);
101 while let Some([..]) = it.next() {}
103 let v = vec![[1], [2], [3]];
104 let mut it = v.iter();
105 while let Some([1]) = it.next() {}
107 let mut it = v.iter();
108 while let Some([_x]) = it.next() {}
113 let v = vec![1, 2, 3];
114 let mut it = v.iter();
115 while let Some(x @ 1) = it.next() {
119 let v = vec![[1], [2], [3]];
120 let mut it = v.iter();
121 while let Some(x @ [_]) = it.next() {
128 let v = vec![1, 2, 3];
129 let mut it = v.iter().map(Some);
130 while let Some(Some(_) | None) = it.next() {
138 let mut y = a.iter();
140 // x is reused, so don't lint here
141 while let Some(_) = y.next() {}
144 let mut y = a.iter();
146 while let Some(_) = y.next() {
147 // y is reused, don't lint
152 let mut y = a.iter();
153 while let Some(_) = y.next() {
154 // use a for loop here
160 use std::collections::HashSet;
161 let mut values = HashSet::new();
164 while let Some(&value) = values.iter().next() {
165 values.remove(&value);
170 // This should not cause an ICE and suggest:
172 // for _ in values.iter() {}
174 use std::collections::HashSet;
175 let mut values = HashSet::new();
178 while let Some(..) = values.iter().next() {}
182 let array = [Some(0), None, Some(1)];
183 let mut iter = array.iter();
185 while let Some(elem) = iter.next() {
186 let _ = elem.or_else(|| *iter.next()?);
191 // should not lint if the iterator is generated on every iteration
192 use std::collections::HashSet;
193 let mut values = HashSet::new();
196 while let Some(..) = values.iter().next() {
200 while let Some(..) = values.iter().map(|x| x + 1).next() {}
202 let chars = "Hello, World!".char_indices();
203 while let Some((i, ch)) = chars.clone().next() {
204 println!("{}: {}", i, ch);