-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Description
I originally wanted to suggest a new lint which would check the following pattern:
fn foo(opt: Option<i32>, default: i32) -> i32 {
opt.map_or(default, |o| o)
}
and would rewrite it as:
fn foo(opt: Option<i32>, default: i32) -> i32 {
opt.unwrap_or(default)
}
and same with Option::map_or_else
.
But it turns out that there's already a pretty similar lint, unnecessary_result_map_or_else
, which does the same for Result
s. Therefore, I'd instead suggest revamping that lint, by adding support both for Result::map_or
and Option::map_or{,_else}
.
That would of course require a name change, and I'd intuitively go with unnecessary_map_or_else
. But there's already an unnecessary_map_or
-- and I kind of feel like this new lint is more deserving of that name; maybe unnecessary_map_or
could be renamed to something like map_or_for_partialeq
?..
Also, currently unnecessary_result_map_or_else
uses some bespoke algorithm to find out whether the "map closure" (as they call it) is an identity closure -- I think we should just switch to is_expr_untyped_identity_function
instead. I guess this could be done separately from the rest.
@rustbot label C-enhancement