I have some code like this:
let extensions: Vec<&vk_parse::Extension> = extensions
.iter()
.filter_map(|extension| {
if let Some(supported) = &extension.supported {
if supported.as_str() == "disabled" {
return None;
}
}
Some(extension)
})
.collect();
When I use cargo clippy to check my code, it suggested that:
warning: this `.filter_map` can be written more simply using `.filter`
--> generator/src/generate_extensions.rs:34:49
|
34 | let extensions: Vec<&vk_parse::Extension> = extensions
| _________________________________________________^
35 | | .iter()
36 | | .filter_map(|extension| {
37 | | if let Some(supported) = &extension.supported {
... |
42 | | Some(extension)
43 | | })
| |__________^
|
= note: `#[warn(clippy::unnecessary_filter_map)]` on by default
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map
But IICR the if let
chain feature is still on RFC state, I don't know how to convert this:
if let Some(supported) = &extension.supported {
if supported.as_str() == "disabled" {
return None;
}
}
Some(extension)
into a single comparison statement.
I know that cargo clippy is not that clever in some cases, but I still wondered if there's a way to use filter
rather than filter_map