1 #![feature(tool_lints)]
4 #![warn(clippy::while_let_loop, clippy::empty_loop, clippy::while_let_on_iterator)]
5 #![allow(dead_code, clippy::never_loop, unused, clippy::cyclomatic_complexity)]
16 loop { // no error, break is not in else clause
42 { let _b = "foobar"; }
44 loop { // no error, else branch does something other than break
53 while let Some(x) = y { // no error, obviously
57 // #675, this used to have a wrong suggestion
59 let (e, l) = match "".split_whitespace().next() {
60 Some(word) => (word.is_empty(), word.len()),
68 while let Option::Some(x) = iter.next() {
73 while let Some(x) = iter.next() {
78 while let Some(_) = iter.next() {}
81 while let None = iter.next() {} // this is fine (if nonsensical)
84 if let Some(x) = iter.next() { // also fine
88 // the following shouldn't warn because it can't be written with a for loop
89 let mut iter = 1u32..20;
90 while let Some(x) = iter.next() {
91 println!("next: {:?}", iter.next())
95 let mut iter = 1u32..20;
96 while let Some(x) = iter.next() {
97 println!("next: {:?}", iter.next());
101 let mut iter = 1u32..20;
102 while let Some(x) = iter.next() {break;}
103 println!("Remaining iter {:?}", iter);
106 let mut iter = 1u32..20;
107 while let Some(x) = iter.next() {
112 // regression test (#360)
113 // this should not panic
114 // it's okay if further iterations of the lint
115 // cause this function to trigger it
116 fn no_panic<T>(slice: &[T]) {
117 let mut iter = slice.iter();
119 let _ = match iter.next() {
128 let r: Result<u32, u32> = Ok(42);
145 let mut b = a.iter();
147 // consume all the 42s
148 while let Some(&42) = b.next() {
152 let mut b = a.iter();
154 while let Some(&(1, 2, 3)) = b.next() {
158 let mut b = a.iter();
160 while let Some(&None) = b.next() {
163 /* This gives “refutable pattern in `for` loop binding: `&_` not covered”
165 for &(1, 2, 3) in b {}
166 for &Option::None in b.next() {}
169 let mut y = a.iter();
170 loop { // x is reused, so don't lint here
171 while let Some(v) = y.next() {
175 let mut y = a.iter();
177 while let Some(v) = y.next() { // y is reused, don't lint
182 let mut y = a.iter();
183 while let Some(v) = y.next() { // use a for loop here
187 // should not trigger clippy::while_let_loop lint because break passes an expression
197 use std::collections::HashSet;
198 let mut values = HashSet::new();
201 while let Some(&value) = values.iter().next() {
202 values.remove(&value);
205 // This should not cause an ICE and suggest:
207 // for _ in values.iter() {}
210 while let Some(..) = values.iter().next() {