make never_loop applicability more flexible

This commit is contained in:
lapla-cogito 2025-02-12 22:25:58 +09:00
parent 649cef0e81
commit 90dbc5bf94
No known key found for this signature in database
GPG key ID: A173204876C41CCC
6 changed files with 193 additions and 5 deletions

View file

@ -422,6 +422,34 @@ pub fn issue12205() -> Option<()> {
}
}
fn stmt_after_return() {
for v in 0..10 {
//~^ never_loop
break;
println!("{v}");
}
}
fn loop_label() {
'outer: for v in 0..10 {
//~^ never_loop
loop {
//~^ never_loop
break 'outer;
}
return;
}
for v in 0..10 {
//~^ never_loop
'inner: loop {
//~^ never_loop
break 'inner;
}
return;
}
}
fn main() {
test1();
test2();

View file

@ -164,5 +164,73 @@ LL | | unimplemented!("not yet");
LL | | }
| |_____^
error: aborting due to 16 previous errors
error: this loop never actually loops
--> tests/ui/never_loop.rs:426:5
|
LL | / for v in 0..10 {
LL | |
LL | | break;
LL | | println!("{v}");
LL | | }
| |_____^
|
help: if you need the first element of the iterator, try writing
|
LL - for v in 0..10 {
LL + if let Some(v) = (0..10).next() {
|
error: this loop never actually loops
--> tests/ui/never_loop.rs:434:5
|
LL | / 'outer: for v in 0..10 {
LL | |
LL | | loop {
... |
LL | | return;
LL | | }
| |_____^
|
help: if you need the first element of the iterator, try writing
|
LL - 'outer: for v in 0..10 {
LL + if let Some(v) = (0..10).next() {
|
error: this loop never actually loops
--> tests/ui/never_loop.rs:436:9
|
LL | / loop {
LL | |
LL | | break 'outer;
LL | | }
| |_________^
error: this loop never actually loops
--> tests/ui/never_loop.rs:443:5
|
LL | / for v in 0..10 {
LL | |
LL | | 'inner: loop {
... |
LL | | return;
LL | | }
| |_____^
|
help: if you need the first element of the iterator, try writing
|
LL - for v in 0..10 {
LL + if let Some(v) = (0..10).next() {
|
error: this loop never actually loops
--> tests/ui/never_loop.rs:445:9
|
LL | / 'inner: loop {
LL | |
LL | | break 'inner;
LL | | }
| |_________^
error: aborting due to 21 previous errors

View file

@ -0,0 +1,20 @@
#![allow(clippy::iter_next_slice, clippy::needless_return)]
fn no_break_or_continue_loop() {
if let Some(i) = [1, 2, 3].iter().next() {
//~^ never_loop
return;
}
}
fn no_break_or_continue_loop_outer() {
if let Some(i) = [1, 2, 3].iter().next() {
//~^ never_loop
return;
loop {
if true {
continue;
}
}
}
}

View file

@ -0,0 +1,20 @@
#![allow(clippy::iter_next_slice, clippy::needless_return)]
fn no_break_or_continue_loop() {
for i in [1, 2, 3].iter() {
//~^ never_loop
return;
}
}
fn no_break_or_continue_loop_outer() {
for i in [1, 2, 3].iter() {
//~^ never_loop
return;
loop {
if true {
continue;
}
}
}
}

View file

@ -0,0 +1,35 @@
error: this loop never actually loops
--> tests/ui/never_loop_fixable.rs:4:5
|
LL | / for i in [1, 2, 3].iter() {
LL | |
LL | | return;
LL | | }
| |_____^
|
= note: `#[deny(clippy::never_loop)]` on by default
help: if you need the first element of the iterator, try writing
|
LL - for i in [1, 2, 3].iter() {
LL + if let Some(i) = [1, 2, 3].iter().next() {
|
error: this loop never actually loops
--> tests/ui/never_loop_fixable.rs:11:5
|
LL | / for i in [1, 2, 3].iter() {
LL | |
LL | | return;
LL | | loop {
... |
LL | | }
| |_____^
|
help: if you need the first element of the iterator, try writing
|
LL - for i in [1, 2, 3].iter() {
LL + if let Some(i) = [1, 2, 3].iter().next() {
|
error: aborting due to 2 previous errors