[`unnecessary_find_map`]: look for then_some

This commit is contained in:
y21 2023-07-30 13:41:58 +02:00
parent 29730969b1
commit 008746cae4
3 changed files with 21 additions and 1 deletions

View File

@ -77,6 +77,16 @@ fn check_expression<'tcx>(cx: &LateContext<'tcx>, arg_id: hir::HirId, expr: &'tc
}
(true, true)
},
hir::ExprKind::MethodCall(segment, recv, [arg], _) => {
if segment.ident.name == sym!(then_some)
&& cx.typeck_results().expr_ty(recv).is_bool()
&& path_to_local_id(arg, arg_id)
{
(false, true)
} else {
(true, true)
}
},
hir::ExprKind::Block(block, _) => block
.expr
.as_ref()

View File

@ -21,3 +21,7 @@ fn main() {
fn find_map_none_changes_item_type() -> Option<bool> {
"".chars().find_map(|_| None)
}
fn issue11260() {
let _x = std::iter::once(1).find_map(|n| (n > 1).then_some(n));
}

View File

@ -34,5 +34,11 @@ error: this `.find_map` can be written more simply using `.map(..).next()`
LL | let _ = (0..4).find_map(|x| Some(x + 1));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 4 previous errors
error: this `.find_map` can be written more simply using `.find`
--> $DIR/unnecessary_find_map.rs:26:14
|
LL | let _x = std::iter::once(1).find_map(|n| (n > 1).then_some(n));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 5 previous errors