Auto merge of #13548 - wowinter13:unnecessary_filter_map_filter_map_some, r=llogiq

fix: remove unnecessary filter_map usages

fixes https://github.com/rust-lang/rust-clippy/issues/12556

(Fixed version of https://github.com/rust-lang/rust-clippy/pull/12766)

changelog: [unnecessary_filter_map]: filter map improvements
This commit is contained in:
bors 2024-10-27 22:27:49 +00:00
commit 73bad368f2
5 changed files with 92 additions and 44 deletions

View file

@ -1,26 +1,31 @@
//@no-rustfix
#![allow(dead_code)]
fn main() {
let _ = (0..4).filter_map(|x| if x > 1 { Some(x) } else { None });
//~^ ERROR: this `.filter_map` can be written more simply using `.filter`
//~^ ERROR: this `.filter_map` can be written more simply
//~| NOTE: `-D clippy::unnecessary-filter-map` implied by `-D warnings`
let _ = (0..4).filter_map(|x| {
//~^ ERROR: this `.filter_map` can be written more simply using `.filter`
//~^ ERROR: this `.filter_map` can be written more simply
if x > 1 {
return Some(x);
};
None
});
let _ = (0..4).filter_map(|x| match x {
//~^ ERROR: this `.filter_map` can be written more simply using `.filter`
//~^ ERROR: this `.filter_map` can be written more simply
0 | 1 => None,
_ => Some(x),
});
let _ = (0..4).filter_map(|x| Some(x + 1));
//~^ ERROR: this `.filter_map` can be written more simply using `.map`
//~^ ERROR: this `.filter_map` can be written more simply
let _ = (0..4).filter_map(i32::checked_abs);
let _ = (0..4).filter_map(Some);
let _ = vec![Some(10), None].into_iter().filter_map(|x| Some(x));
}
fn filter_map_none_changes_item_type() -> impl Iterator<Item = bool> {

View file

@ -1,14 +1,14 @@
error: this `.filter_map` can be written more simply using `.filter`
--> tests/ui/unnecessary_filter_map.rs:4:13
error: this `.filter_map` can be written more simply
--> tests/ui/unnecessary_filter_map.rs:5:13
|
LL | let _ = (0..4).filter_map(|x| if x > 1 { Some(x) } else { None });
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try instead: `filter`
|
= note: `-D clippy::unnecessary-filter-map` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_filter_map)]`
error: this `.filter_map` can be written more simply using `.filter`
--> tests/ui/unnecessary_filter_map.rs:7:13
error: this `.filter_map` can be written more simply
--> tests/ui/unnecessary_filter_map.rs:8:13
|
LL | let _ = (0..4).filter_map(|x| {
| _____________^
@ -18,10 +18,10 @@ LL | | return Some(x);
LL | | };
LL | | None
LL | | });
| |______^
| |______^ help: try instead: `filter`
error: this `.filter_map` can be written more simply using `.filter`
--> tests/ui/unnecessary_filter_map.rs:14:13
error: this `.filter_map` can be written more simply
--> tests/ui/unnecessary_filter_map.rs:15:13
|
LL | let _ = (0..4).filter_map(|x| match x {
| _____________^
@ -29,19 +29,40 @@ LL | |
LL | | 0 | 1 => None,
LL | | _ => Some(x),
LL | | });
| |______^
| |______^ help: try instead: `filter`
error: this `.filter_map` can be written more simply using `.map`
--> tests/ui/unnecessary_filter_map.rs:20:13
error: this `.filter_map` can be written more simply
--> tests/ui/unnecessary_filter_map.rs:21:13
|
LL | let _ = (0..4).filter_map(|x| Some(x + 1));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try instead: `map`
error: this `.filter_map` can be written more simply using `.filter`
--> tests/ui/unnecessary_filter_map.rs:160:14
error: redundant closure
--> tests/ui/unnecessary_filter_map.rs:28:57
|
LL | let _ = vec![Some(10), None].into_iter().filter_map(|x| Some(x));
| ^^^^^^^^^^^ help: replace the closure with the function itself: `Some`
|
= note: `-D clippy::redundant-closure` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::redundant_closure)]`
error: filter_map is unnecessary
--> tests/ui/unnecessary_filter_map.rs:28:61
|
LL | let _ = vec![Some(10), None].into_iter().filter_map(|x| Some(x));
| ^^^^ help: try removing the filter_map
error: this `.filter_map` can be written more simply
--> tests/ui/unnecessary_filter_map.rs:28:13
|
LL | let _ = vec![Some(10), None].into_iter().filter_map(|x| Some(x));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try instead: `map`
error: this `.filter_map` can be written more simply
--> tests/ui/unnecessary_filter_map.rs:165:14
|
LL | let _x = std::iter::once(1).filter_map(|n| (n > 1).then_some(n));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try instead: `filter`
error: aborting due to 5 previous errors
error: aborting due to 8 previous errors

View file

@ -1,24 +1,25 @@
//@no-rustfix
#![allow(dead_code)]
fn main() {
let _ = (0..4).find_map(|x| if x > 1 { Some(x) } else { None });
//~^ ERROR: this `.find_map` can be written more simply using `.find`
//~^ ERROR: this `.find_map` can be written more simply
//~| NOTE: `-D clippy::unnecessary-find-map` implied by `-D warnings`
let _ = (0..4).find_map(|x| {
//~^ ERROR: this `.find_map` can be written more simply using `.find`
//~^ ERROR: this `.find_map` can be written more simply
if x > 1 {
return Some(x);
};
None
});
let _ = (0..4).find_map(|x| match x {
//~^ ERROR: this `.find_map` can be written more simply using `.find`
//~^ ERROR: this `.find_map` can be written more simply
0 | 1 => None,
_ => Some(x),
});
let _ = (0..4).find_map(|x| Some(x + 1));
//~^ ERROR: this `.find_map` can be written more simply using `.map(..).next()`
//~^ ERROR: this `.find_map` can be written more simply
let _ = (0..4).find_map(i32::checked_abs);
}

View file

@ -1,14 +1,14 @@
error: this `.find_map` can be written more simply using `.find`
--> tests/ui/unnecessary_find_map.rs:4:13
error: this `.find_map` can be written more simply
--> tests/ui/unnecessary_find_map.rs:5:13
|
LL | let _ = (0..4).find_map(|x| if x > 1 { Some(x) } else { None });
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try instead: `find`
|
= note: `-D clippy::unnecessary-find-map` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_find_map)]`
error: this `.find_map` can be written more simply using `.find`
--> tests/ui/unnecessary_find_map.rs:7:13
error: this `.find_map` can be written more simply
--> tests/ui/unnecessary_find_map.rs:8:13
|
LL | let _ = (0..4).find_map(|x| {
| _____________^
@ -18,10 +18,10 @@ LL | | return Some(x);
LL | | };
LL | | None
LL | | });
| |______^
| |______^ help: try instead: `find`
error: this `.find_map` can be written more simply using `.find`
--> tests/ui/unnecessary_find_map.rs:14:13
error: this `.find_map` can be written more simply
--> tests/ui/unnecessary_find_map.rs:15:13
|
LL | let _ = (0..4).find_map(|x| match x {
| _____________^
@ -29,19 +29,19 @@ LL | |
LL | | 0 | 1 => None,
LL | | _ => Some(x),
LL | | });
| |______^
| |______^ help: try instead: `find`
error: this `.find_map` can be written more simply using `.map(..).next()`
--> tests/ui/unnecessary_find_map.rs:20:13
error: this `.find_map` can be written more simply
--> tests/ui/unnecessary_find_map.rs:21:13
|
LL | let _ = (0..4).find_map(|x| Some(x + 1));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try instead: `map(..).next()`
error: this `.find_map` can be written more simply using `.find`
--> tests/ui/unnecessary_find_map.rs:32:14
error: this `.find_map` can be written more simply
--> tests/ui/unnecessary_find_map.rs:33:14
|
LL | let _x = std::iter::once(1).find_map(|n| (n > 1).then_some(n));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try instead: `find`
error: aborting due to 5 previous errors