summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/manual_ok_or.rs
blob: 7188a521357ec51495346eca60fb4fd9d1b7ef07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//@run-rustfix
#![warn(clippy::manual_ok_or)]
#![allow(clippy::or_fun_call)]
#![allow(clippy::disallowed_names)]
#![allow(clippy::redundant_closure)]
#![allow(dead_code)]
#![allow(unused_must_use)]

fn main() {
    // basic case
    let foo: Option<i32> = None;
    foo.map_or(Err("error"), |v| Ok(v));

    // eta expansion case
    foo.map_or(Err("error"), Ok);

    // turbo fish syntax
    None::<i32>.map_or(Err("error"), |v| Ok(v));

    // multiline case
    #[rustfmt::skip]
    foo.map_or(Err::<i32, &str>(
        &format!(
            "{}{}{}{}{}{}{}",
            "Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer")
        ),
        |v| Ok(v),
    );

    // 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);

    // TODO patterns not covered yet
    match foo {
        Some(v) => Ok(v),
        None => Err("error"),
    };
    foo.map_or_else(|| Err("error"), |v| Ok(v));
}