diff --git a/tests/ui/while_let_on_iterator.fixed b/tests/ui/while_let_on_iterator.fixed index 447b36048ee..f5fcabf63fd 100644 --- a/tests/ui/while_let_on_iterator.fixed +++ b/tests/ui/while_let_on_iterator.fixed @@ -119,10 +119,7 @@ fn issue2965() { let mut values = HashSet::new(); values.insert(1); - for _ in values.iter() { - // FIXME(flip1995): Linting this with the following line uncommented is a FP, see #1654 - // values.remove(&1); - } + while let Some(..) = values.iter().next() {} } fn issue3670() { @@ -134,6 +131,24 @@ fn issue3670() { } } +fn issue1654() { + // should not lint if the iterator is generated on every iteration + use std::collections::HashSet; + let mut values = HashSet::new(); + values.insert(1); + + while let Some(..) = values.iter().next() { + values.remove(&1); + } + + while let Some(..) = values.iter().map(|x| x + 1).next() {} + + let chars = "Hello, World!".char_indices(); + while let Some((i, ch)) = chars.clone().next() { + println!("{}: {}", i, ch); + } +} + fn main() { base(); refutable(); @@ -141,4 +156,5 @@ fn main() { issue1121(); issue2965(); issue3670(); + issue1654(); } diff --git a/tests/ui/while_let_on_iterator.rs b/tests/ui/while_let_on_iterator.rs index 56a245aa8c7..04dce8a0289 100644 --- a/tests/ui/while_let_on_iterator.rs +++ b/tests/ui/while_let_on_iterator.rs @@ -119,10 +119,7 @@ fn issue2965() { let mut values = HashSet::new(); values.insert(1); - while let Some(..) = values.iter().next() { - // FIXME(flip1995): Linting this with the following line uncommented is a FP, see #1654 - // values.remove(&1); - } + while let Some(..) = values.iter().next() {} } fn issue3670() { @@ -134,6 +131,24 @@ fn issue3670() { } } +fn issue1654() { + // should not lint if the iterator is generated on every iteration + use std::collections::HashSet; + let mut values = HashSet::new(); + values.insert(1); + + while let Some(..) = values.iter().next() { + values.remove(&1); + } + + while let Some(..) = values.iter().map(|x| x + 1).next() {} + + let chars = "Hello, World!".char_indices(); + while let Some((i, ch)) = chars.clone().next() { + println!("{}: {}", i, ch); + } +} + fn main() { base(); refutable(); @@ -141,4 +156,5 @@ fn main() { issue1121(); issue2965(); issue3670(); + issue1654(); } diff --git a/tests/ui/while_let_on_iterator.stderr b/tests/ui/while_let_on_iterator.stderr index 94caedb43a5..6de138d7227 100644 --- a/tests/ui/while_let_on_iterator.stderr +++ b/tests/ui/while_let_on_iterator.stderr @@ -24,11 +24,5 @@ error: this loop could be written as a `for` loop LL | while let Some(_) = y.next() { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for _ in y` -error: this loop could be written as a `for` loop - --> $DIR/while_let_on_iterator.rs:122:5 - | -LL | while let Some(..) = values.iter().next() { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for _ in values.iter()` - -error: aborting due to 5 previous errors +error: aborting due to 4 previous errors