| #![warn(clippy::manual_ok_or)] |
| #![expect(clippy::disallowed_names, clippy::redundant_closure)] |
| |
| fn main() { |
| // basic case |
| let foo: Option<i32> = None; |
| foo.ok_or("error"); |
| //~^ manual_ok_or |
| |
| // eta expansion case |
| foo.ok_or("error"); |
| //~^ manual_ok_or |
| |
| // turbo fish syntax |
| None::<i32>.ok_or("error"); |
| //~^ manual_ok_or |
| |
| // multiline case |
| #[rustfmt::skip] |
| foo.ok_or(&format!( |
| "{}{}{}{}{}{}{}", |
| "Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer")); |
| |
| // not applicable, closure isn't direct `Ok` wrapping |
| foo.map_or(Err("error"), |v| Ok(v + 1)); |
| |
| // not applicable, or side isn't `Result::Err` |
| foo.map_or(Ok::<i32, &str>(1), |v| Ok(v)); |
| |
| // not applicable, expr is not a `Result` value |
| foo.map_or(42, |v| v + 1); |
| |
| // not applicable, closure isn't `Ok` wrapping |
| let bar: Option<Result<i32, &str>> = None; |
| #[allow(clippy::map_or_identity)] |
| bar.map_or(Err("error"), |v| v); |
| |
| // not applicable, closure isn't using value |
| foo.map_or(Err("error"), |_| Ok(42)); |
| |
| // TODO patterns not covered yet |
| match foo { |
| Some(v) => Ok(v), |
| None => Err("error"), |
| }; |
| foo.map_or_else(|| Err("error"), |v| Ok(v)); |
| } |