3 #![warn(clippy::while_let_on_iterator)]
4 #![allow(clippy::never_loop, unreachable_code, unused_mut)]
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() {}
84 // x is reused, so don't lint here
85 while let Some(_) = y.next() {}
90 while let Some(_) = y.next() {
91 // y is reused, don't lint
98 // use a for loop here
104 use std::collections::HashSet;
105 let mut values = HashSet::new();
108 while let Some(&value) = values.iter().next() {
109 values.remove(&value);
114 // This should not cause an ICE and suggest:
116 // for _ in values.iter() {}
118 use std::collections::HashSet;
119 let mut values = HashSet::new();
122 while let Some(..) = values.iter().next() {}
126 let array = [Some(0), None, Some(1)];
127 let mut iter = array.iter();
129 while let Some(elem) = iter.next() {
130 let _ = elem.or_else(|| *iter.next()?);
135 // should not lint if the iterator is generated on every iteration
136 use std::collections::HashSet;
137 let mut values = HashSet::new();
140 while let Some(..) = values.iter().next() {
144 while let Some(..) = values.iter().map(|x| x + 1).next() {}
146 let chars = "Hello, World!".char_indices();
147 while let Some((i, ch)) = chars.clone().next() {
148 println!("{}: {}", i, ch);