#![warn(clippy::cognitive_complexity)]
#![expect(
    clippy::eq_op,
    clippy::needless_borrows_for_generic_args,
    clippy::needless_return,
    clippy::nonminimal_bool,
    clippy::uninlined_format_args
)]

#[rustfmt::skip]
fn main() {
//~^ cognitive_complexity

    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
    if true {
        println!("a");
    }
}

#[clippy::cognitive_complexity = "1"]
fn kaboom() {
    //~^ cognitive_complexity

    let n = 0;
    'a: for i in 0..20 {
        'b: for j in i..20 {
            for k in j..20 {
                if k == 5 {
                    break 'b;
                }
                if j == 3 && k == 6 {
                    continue 'a;
                }
                if k == j {
                    continue;
                }
                println!("bake");
            }
        }
        println!("cake");
    }
}

fn bloo() {
    match 42 {
        0 => println!("hi"),
        1 => println!("hai"),
        2 => println!("hey"),
        3 => println!("hallo"),
        4 => println!("hello"),
        5 => println!("salut"),
        6 => println!("good morning"),
        7 => println!("good evening"),
        8 => println!("good afternoon"),
        9 => println!("good night"),
        10 => println!("bonjour"),
        11 => println!("hej"),
        12 => println!("hej hej"),
        13 => println!("greetings earthling"),
        14 => println!("take us to you leader"),
        15 | 17 | 19 | 21 | 23 | 25 | 27 | 29 | 31 | 33 => println!("take us to you leader"),
        35 | 37 | 39 | 41 | 43 | 45 | 47 | 49 | 51 | 53 => println!("there is no undefined behavior"),
        55 | 57 | 59 | 61 | 63 | 65 | 67 | 69 | 71 | 73 => println!("I know borrow-fu"),
        _ => println!("bye"),
    }
}

// Short circuiting operations don't increase the complexity of a function.
// Note that the minimum complexity of a function is 1.
#[clippy::cognitive_complexity = "1"]
fn lots_of_short_circuits() -> bool {
    true && false && true && false && true && false && true
}

#[clippy::cognitive_complexity = "1"]
fn lots_of_short_circuits2() -> bool {
    true || false || true || false || true || false || true
}

#[clippy::cognitive_complexity = "1"]
fn baa() {
    //~^ cognitive_complexity

    let x = || match 99 {
        //~^ cognitive_complexity
        0 => 0,
        1 => 1,
        2 => 2,
        4 => 4,
        6 => 6,
        9 => 9,
        _ => 42,
    };
    if x() == 42 {
        println!("x");
    } else {
        println!("not x");
    }
}

#[clippy::cognitive_complexity = "1"]
fn bar() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        _ => println!("bye"),
    }
}

#[test]
#[clippy::cognitive_complexity = "1"]
/// Tests are usually complex but simple at the same time. `clippy::cognitive_complexity` used to
/// give lots of false-positives in tests.
fn dont_warn_on_tests() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        _ => println!("bye"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn barr() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        1 => println!("bla"),
        2 | 3 => println!("blub"),
        _ => println!("bye"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn barr2() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        1 => println!("bla"),
        2 | 3 => println!("blub"),
        _ => println!("bye"),
    }
    match 99 {
        0 => println!("hi"),
        1 => println!("bla"),
        2 | 3 => println!("blub"),
        _ => println!("bye"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn barrr() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        1 => panic!("bla"),
        2 | 3 => println!("blub"),
        _ => println!("bye"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn barrr2() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        1 => panic!("bla"),
        2 | 3 => println!("blub"),
        _ => println!("bye"),
    }
    match 99 {
        0 => println!("hi"),
        1 => panic!("bla"),
        2 | 3 => println!("blub"),
        _ => println!("bye"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn barrrr() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        1 => println!("bla"),
        2 | 3 => panic!("blub"),
        _ => println!("bye"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn barrrr2() {
    //~^ cognitive_complexity

    match 99 {
        0 => println!("hi"),
        1 => println!("bla"),
        2 | 3 => panic!("blub"),
        _ => println!("bye"),
    }
    match 99 {
        0 => println!("hi"),
        1 => println!("bla"),
        2 | 3 => panic!("blub"),
        _ => println!("bye"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn cake() {
    //~^ cognitive_complexity

    if 4 == 5 {
        println!("yea");
    } else {
        panic!("meh");
    }
    println!("whee");
}

#[clippy::cognitive_complexity = "1"]
pub fn read_file(input_path: &str) -> String {
    //~^ cognitive_complexity

    use std::fs::File;
    use std::io::{Read, Write};
    use std::path::Path;
    let mut file = match File::open(&Path::new(input_path)) {
        Ok(f) => f,
        Err(err) => {
            panic!("Can't open {}: {}", input_path, err);
        },
    };

    let mut bytes = Vec::new();

    match file.read_to_end(&mut bytes) {
        Ok(..) => {},
        Err(_) => {
            panic!("Can't read {}", input_path);
        },
    };

    match String::from_utf8(bytes) {
        Ok(contents) => contents,
        Err(_) => {
            panic!("{} is not UTF-8 encoded", input_path);
        },
    }
}

enum Void {}

#[clippy::cognitive_complexity = "1"]
fn void(void: Void) {
    //~^ cognitive_complexity

    if true {
        match void {}
    }
}

#[clippy::cognitive_complexity = "1"]
fn mcarton_sees_all() {
    panic!("meh");
    panic!("möh");
}

#[clippy::cognitive_complexity = "1"]
fn try_() -> Result<i32, &'static str> {
    match 5 {
        5 => Ok(5),
        _ => return Err("bla"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn try_again() -> Result<i32, &'static str> {
    let _ = Ok(42)?;
    let _ = Ok(43)?;
    let _ = Ok(44)?;
    let _ = Ok(45)?;
    let _ = Ok(46)?;
    let _ = Ok(47)?;
    let _ = Ok(48)?;
    let _ = Ok(49)?;
    match 5 {
        5 => Ok(5),
        _ => return Err("bla"),
    }
}

#[clippy::cognitive_complexity = "1"]
fn early() -> Result<i32, &'static str> {
    return Ok(5);
    return Ok(5);
    return Ok(5);
    return Ok(5);
    return Ok(5);
    return Ok(5);
    return Ok(5);
    return Ok(5);
    return Ok(5);
}

#[rustfmt::skip]
#[clippy::cognitive_complexity = "1"]
fn early_ret() -> i32 {
//~^ cognitive_complexity

    let a = if true { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    let a = if a < 99 { 42 } else { return 0; };
    match 5 {
        5 => 5,
        _ => return 6,
    }
}

#[clippy::cognitive_complexity = "1"]
fn closures() {
    let x = |a: i32, b: i32| -> i32 {
        //~^ cognitive_complexity

        if true {
            println!("moo");
        }

        a + b
    };
}

struct Moo;

#[clippy::cognitive_complexity = "1"]
impl Moo {
    fn moo(&self) {
        //~^ cognitive_complexity

        if true {
            println!("moo");
        }
    }
}

#[clippy::cognitive_complexity = "1"]
mod issue9300 {
    async fn a() {
        //~^ cognitive_complexity

        let a = 0;
        if a == 0 {}
    }

    pub struct S;
    impl S {
        pub async fn async_method() {
            //~^ cognitive_complexity

            let a = 0;
            if a == 0 {}
        }
    }
}

#[clippy::cognitive_complexity = "1"]
mod issue14422 {
    fn foo() {
        //~^ cognitive_complexity
        for _ in 0..10 {
            println!("hello there");
        }
    }

    fn bar() {
        //~^ cognitive_complexity
        for _ in 0..10 {
            println!("hello there");
        }
        return;
        return;
    }
}

#[clippy::cognitive_complexity = "1"]
mod attribute_stacking {
    fn bad() {
        //~^ cognitive_complexity
        if true {
            println!("a");
        }
    }

    #[clippy::cognitive_complexity = "2"]
    fn ok() {
        if true {
            println!("a");
        }
    }

    // should revert to cognitive_complexity = "1"
    fn bad_again() {
        //~^ cognitive_complexity
        if true {
            println!("a");
        }
    }
}
