Auto merge of #11261 - y21:issue11260, r=blyxyas
[`unnecessary_find_map`]: look for then_some Closes #11260 changelog: [`unnecessary_find_map`]: lint `.then_some()` in closure
This commit is contained in:
commit
2ab124126d
@ -77,6 +77,16 @@ fn check_expression<'tcx>(cx: &LateContext<'tcx>, arg_id: hir::HirId, expr: &'tc
|
|||||||
}
|
}
|
||||||
(true, true)
|
(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
|
hir::ExprKind::Block(block, _) => block
|
||||||
.expr
|
.expr
|
||||||
.as_ref()
|
.as_ref()
|
||||||
|
@ -148,3 +148,9 @@ mod comment_1052978898 {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn issue11260() {
|
||||||
|
// #11260 is about unnecessary_find_map, but the fix also kind of applies to
|
||||||
|
// unnecessary_filter_map
|
||||||
|
let _x = std::iter::once(1).filter_map(|n| (n > 1).then_some(n));
|
||||||
|
}
|
||||||
|
@ -34,5 +34,11 @@ error: this `.filter_map` can be written more simply using `.map`
|
|||||||
LL | let _ = (0..4).filter_map(|x| Some(x + 1));
|
LL | let _ = (0..4).filter_map(|x| Some(x + 1));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: this `.filter_map` can be written more simply using `.filter`
|
||||||
|
--> $DIR/unnecessary_filter_map.rs:155:14
|
||||||
|
|
|
||||||
|
LL | let _x = std::iter::once(1).filter_map(|n| (n > 1).then_some(n));
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 5 previous errors
|
||||||
|
|
||||||
|
@ -21,3 +21,9 @@ fn main() {
|
|||||||
fn find_map_none_changes_item_type() -> Option<bool> {
|
fn find_map_none_changes_item_type() -> Option<bool> {
|
||||||
"".chars().find_map(|_| None)
|
"".chars().find_map(|_| None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn issue11260() {
|
||||||
|
let y = Some(1);
|
||||||
|
let _x = std::iter::once(1).find_map(|n| (n > 1).then_some(n));
|
||||||
|
let _x = std::iter::once(1).find_map(|n| (n > 1).then_some(y)); // different option, so can't be just `.find()`
|
||||||
|
}
|
||||||
|
@ -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));
|
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:27:14
|
||||||
|
|
|
||||||
|
LL | let _x = std::iter::once(1).find_map(|n| (n > 1).then_some(n));
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 5 previous errors
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user