-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #5520 - matthiaskrgr:rustup_44, r=flip1995,phansch
rustup rust-lang/rust#71215 There's currently an crash in `ui/new_without_default.rs` that I need to figure out how to avoid. changelog: none
- Loading branch information
Showing
16 changed files
with
212 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
// run-rustfix | ||
|
||
#![warn(clippy::while_let_on_iterator)] | ||
#![allow(clippy::never_loop, unreachable_code, unused_mut)] | ||
|
||
fn base() { | ||
let mut iter = 1..20; | ||
for x in iter { | ||
println!("{}", x); | ||
} | ||
|
||
let mut iter = 1..20; | ||
for x in iter { | ||
println!("{}", x); | ||
} | ||
|
||
let mut iter = 1..20; | ||
for _ in iter {} | ||
|
||
let mut iter = 1..20; | ||
while let None = iter.next() {} // this is fine (if nonsensical) | ||
|
||
let mut iter = 1..20; | ||
if let Some(x) = iter.next() { | ||
// also fine | ||
println!("{}", x) | ||
} | ||
|
||
// the following shouldn't warn because it can't be written with a for loop | ||
let mut iter = 1u32..20; | ||
while let Some(_) = iter.next() { | ||
println!("next: {:?}", iter.next()) | ||
} | ||
|
||
// neither can this | ||
let mut iter = 1u32..20; | ||
while let Some(_) = iter.next() { | ||
println!("next: {:?}", iter.next()); | ||
} | ||
|
||
// or this | ||
let mut iter = 1u32..20; | ||
while let Some(_) = iter.next() { | ||
break; | ||
} | ||
println!("Remaining iter {:?}", iter); | ||
|
||
// or this | ||
let mut iter = 1u32..20; | ||
while let Some(_) = iter.next() { | ||
iter = 1..20; | ||
} | ||
} | ||
|
||
// Issue #1188 | ||
fn refutable() { | ||
let a = [42, 1337]; | ||
let mut b = a.iter(); | ||
|
||
// consume all the 42s | ||
while let Some(&42) = b.next() {} | ||
|
||
let a = [(1, 2, 3)]; | ||
let mut b = a.iter(); | ||
|
||
while let Some(&(1, 2, 3)) = b.next() {} | ||
|
||
let a = [Some(42)]; | ||
let mut b = a.iter(); | ||
|
||
while let Some(&None) = b.next() {} | ||
|
||
/* This gives “refutable pattern in `for` loop binding: `&_` not covered” | ||
for &42 in b {} | ||
for &(1, 2, 3) in b {} | ||
for &Option::None in b.next() {} | ||
// */ | ||
} | ||
|
||
fn nested_loops() { | ||
let a = [42, 1337]; | ||
let mut y = a.iter(); | ||
loop { | ||
// x is reused, so don't lint here | ||
while let Some(_) = y.next() {} | ||
} | ||
|
||
let mut y = a.iter(); | ||
for _ in 0..2 { | ||
while let Some(_) = y.next() { | ||
// y is reused, don't lint | ||
} | ||
} | ||
|
||
loop { | ||
let mut y = a.iter(); | ||
for _ in y { | ||
// use a for loop here | ||
} | ||
} | ||
} | ||
|
||
fn issue1121() { | ||
use std::collections::HashSet; | ||
let mut values = HashSet::new(); | ||
values.insert(1); | ||
|
||
while let Some(&value) = values.iter().next() { | ||
values.remove(&value); | ||
} | ||
} | ||
|
||
fn issue2965() { | ||
// This should not cause an ICE and suggest: | ||
// | ||
// for _ in values.iter() {} | ||
// | ||
use std::collections::HashSet; | ||
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); | ||
} | ||
} | ||
|
||
fn issue3670() { | ||
let array = [Some(0), None, Some(1)]; | ||
let mut iter = array.iter(); | ||
|
||
while let Some(elem) = iter.next() { | ||
let _ = elem.or_else(|| *iter.next()?); | ||
} | ||
} | ||
|
||
fn main() { | ||
base(); | ||
refutable(); | ||
nested_loops(); | ||
issue1121(); | ||
issue2965(); | ||
issue3670(); | ||
} |
Oops, something went wrong.