summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/bind_instead_of_map_multipart.rs
blob: 49944403f6ddddf76a0b12137ef542f2ebc0f70c (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// run-rustfix
#![deny(clippy::bind_instead_of_map)]
#![allow(clippy::blocks_in_if_conditions)]

pub fn main() {
    let _ = Some("42").and_then(|s| if s.len() < 42 { Some(0) } else { Some(s.len()) });
    let _ = Some("42").and_then(|s| if s.len() < 42 { None } else { Some(s.len()) });

    let _ = Ok::<_, ()>("42").and_then(|s| if s.len() < 42 { Ok(0) } else { Ok(s.len()) });
    let _ = Ok::<_, ()>("42").and_then(|s| if s.len() < 42 { Err(()) } else { Ok(s.len()) });

    let _ = Err::<(), _>("42").or_else(|s| if s.len() < 42 { Err(s.len() + 20) } else { Err(s.len()) });
    let _ = Err::<(), _>("42").or_else(|s| if s.len() < 42 { Ok(()) } else { Err(s.len()) });

    hard_example();
    macro_example();
}

fn hard_example() {
    Some("42").and_then(|s| {
        if {
            if s == "43" {
                return Some(43);
            }
            s == "42"
        } {
            return Some(45);
        }
        match s.len() {
            10 => Some(2),
            20 => {
                if foo() {
                    return {
                        if foo() {
                            return Some(20);
                        }
                        println!("foo");
                        Some(3)
                    };
                }
                Some(20)
            },
            40 => Some(30),
            _ => Some(1),
        }
    });
}

fn foo() -> bool {
    true
}

macro_rules! m {
    () => {
        Some(10)
    };
}

fn macro_example() {
    let _ = Some("").and_then(|s| if s.len() == 20 { m!() } else { Some(20) });
    let _ = Some("").and_then(|s| if s.len() == 20 { Some(m!()) } else { Some(Some(20)) });
}