mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-24 05:33:27 +00:00
Add tests to tests/ui/unnecessary_filter_map.rs
The tests currently fail, and are fixed by the next commit.
This commit is contained in:
parent
8d12cd4779
commit
cfd32522c0
2 changed files with 133 additions and 4 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _ = (0..4).filter_map(|x| if x > 1 { Some(x) } else { None });
|
let _ = (0..4).filter_map(|x| if x > 1 { Some(x) } else { None });
|
||||||
let _ = (0..4).filter_map(|x| {
|
let _ = (0..4).filter_map(|x| {
|
||||||
|
@ -19,3 +21,130 @@ fn main() {
|
||||||
fn filter_map_none_changes_item_type() -> impl Iterator<Item = bool> {
|
fn filter_map_none_changes_item_type() -> impl Iterator<Item = bool> {
|
||||||
"".chars().filter_map(|_| None)
|
"".chars().filter_map(|_| None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/rust-lang/rust-clippy/issues/4433#issue-483920107
|
||||||
|
mod comment_483920107 {
|
||||||
|
enum Severity {
|
||||||
|
Warning,
|
||||||
|
Other,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ServerError;
|
||||||
|
|
||||||
|
impl ServerError {
|
||||||
|
fn severity(&self) -> Severity {
|
||||||
|
Severity::Warning
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
warnings: Vec<ServerError>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl S {
|
||||||
|
fn foo(&mut self, server_errors: Vec<ServerError>) {
|
||||||
|
#[allow(unused_variables)]
|
||||||
|
let errors: Vec<ServerError> = server_errors
|
||||||
|
.into_iter()
|
||||||
|
.filter_map(|se| match se.severity() {
|
||||||
|
Severity::Warning => {
|
||||||
|
self.warnings.push(se);
|
||||||
|
None
|
||||||
|
},
|
||||||
|
_ => Some(se),
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/rust-lang/rust-clippy/issues/4433#issuecomment-611006622
|
||||||
|
mod comment_611006622 {
|
||||||
|
struct PendingRequest {
|
||||||
|
reply_to: u8,
|
||||||
|
token: u8,
|
||||||
|
expires: u8,
|
||||||
|
group_id: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Value {
|
||||||
|
Null,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Node;
|
||||||
|
|
||||||
|
impl Node {
|
||||||
|
fn send_response(&self, _reply_to: u8, _token: u8, _value: Value) -> &Self {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
fn on_error_warn(&self) -> &Self {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
pending_requests: Vec<PendingRequest>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl S {
|
||||||
|
fn foo(&mut self, node: Node, now: u8, group_id: u8) {
|
||||||
|
// "drain_filter"
|
||||||
|
self.pending_requests = self
|
||||||
|
.pending_requests
|
||||||
|
.drain(..)
|
||||||
|
.filter_map(|pending| {
|
||||||
|
if pending.expires <= now {
|
||||||
|
return None; // Expired, remove
|
||||||
|
}
|
||||||
|
|
||||||
|
if pending.group_id == group_id {
|
||||||
|
// Matched - reuse strings and remove
|
||||||
|
node.send_response(pending.reply_to, pending.token, Value::Null)
|
||||||
|
.on_error_warn();
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
// Keep waiting
|
||||||
|
Some(pending)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/rust-lang/rust-clippy/issues/4433#issuecomment-621925270
|
||||||
|
// This extrapolation doesn't reproduce the false positive. Additional context seems necessary.
|
||||||
|
mod comment_621925270 {
|
||||||
|
struct Signature(u8);
|
||||||
|
|
||||||
|
fn foo(sig_packets: impl Iterator<Item = Result<Signature, ()>>) -> impl Iterator<Item = u8> {
|
||||||
|
sig_packets.filter_map(|res| match res {
|
||||||
|
Ok(Signature(sig_packet)) => Some(sig_packet),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/rust-lang/rust-clippy/issues/4433#issuecomment-1052978898
|
||||||
|
mod comment_1052978898 {
|
||||||
|
#![allow(clippy::redundant_closure)]
|
||||||
|
|
||||||
|
pub struct S(u8);
|
||||||
|
|
||||||
|
impl S {
|
||||||
|
pub fn consume(self) {
|
||||||
|
println!("yum");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn filter_owned() -> impl Iterator<Item = S> {
|
||||||
|
(0..10).map(|i| S(i)).filter_map(|s| {
|
||||||
|
if s.0 & 1 == 0 {
|
||||||
|
s.consume();
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: this `.filter_map` can be written more simply using `.filter`
|
error: this `.filter_map` can be written more simply using `.filter`
|
||||||
--> $DIR/unnecessary_filter_map.rs:2:13
|
--> $DIR/unnecessary_filter_map.rs:4:13
|
||||||
|
|
|
|
||||||
LL | let _ = (0..4).filter_map(|x| if x > 1 { Some(x) } else { None });
|
LL | let _ = (0..4).filter_map(|x| if x > 1 { Some(x) } else { None });
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -7,7 +7,7 @@ LL | let _ = (0..4).filter_map(|x| if x > 1 { Some(x) } else { None });
|
||||||
= note: `-D clippy::unnecessary-filter-map` implied by `-D warnings`
|
= note: `-D clippy::unnecessary-filter-map` implied by `-D warnings`
|
||||||
|
|
||||||
error: this `.filter_map` can be written more simply using `.filter`
|
error: this `.filter_map` can be written more simply using `.filter`
|
||||||
--> $DIR/unnecessary_filter_map.rs:3:13
|
--> $DIR/unnecessary_filter_map.rs:5:13
|
||||||
|
|
|
|
||||||
LL | let _ = (0..4).filter_map(|x| {
|
LL | let _ = (0..4).filter_map(|x| {
|
||||||
| _____________^
|
| _____________^
|
||||||
|
@ -19,7 +19,7 @@ LL | | });
|
||||||
| |______^
|
| |______^
|
||||||
|
|
||||||
error: this `.filter_map` can be written more simply using `.filter`
|
error: this `.filter_map` can be written more simply using `.filter`
|
||||||
--> $DIR/unnecessary_filter_map.rs:9:13
|
--> $DIR/unnecessary_filter_map.rs:11:13
|
||||||
|
|
|
|
||||||
LL | let _ = (0..4).filter_map(|x| match x {
|
LL | let _ = (0..4).filter_map(|x| match x {
|
||||||
| _____________^
|
| _____________^
|
||||||
|
@ -29,7 +29,7 @@ LL | | });
|
||||||
| |______^
|
| |______^
|
||||||
|
|
||||||
error: this `.filter_map` can be written more simply using `.map`
|
error: this `.filter_map` can be written more simply using `.map`
|
||||||
--> $DIR/unnecessary_filter_map.rs:14:13
|
--> $DIR/unnecessary_filter_map.rs:16:13
|
||||||
|
|
|
|
||||||
LL | let _ = (0..4).filter_map(|x| Some(x + 1));
|
LL | let _ = (0..4).filter_map(|x| Some(x + 1));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
Loading…
Reference in a new issue