#![warn(clippy::unit_arg)]

use std::fmt::Debug;

fn foo<T: Debug>(t: T) {
    println!("{:?}", t);
}

fn foo3<T1: Debug, T2: Debug, T3: Debug>(t1: T1, t2: T2, t3: T3) {
    println!("{:?}, {:?}, {:?}", t1, t2, t3);
}

fn bad() {
    foo(());
    //~^ unit_arg
    foo3((), 2, 2);
    //~^ unit_arg
    foo(0);
    taking_two_units((), ());
    //~^ unit_arg
    foo(0);
    foo(1);
    taking_three_units((), (), ());
    //~^ unit_arg
}

fn taking_two_units(a: (), b: ()) {}
fn taking_three_units(a: (), b: (), c: ()) {}

fn main() {}

fn issue14857() {
    let fn_take_unit = |_: ()| {};
    fn_take_unit(());
    //~^ unit_arg

    fn some_other_fn(_: &i32) {}

    macro_rules! another_mac {
        () => {
            some_other_fn(&Default::default())
        };
        ($e:expr) => {
            some_other_fn(&$e)
        };
    }

    another_mac!();
    fn_take_unit(());
    //~^ unit_arg
    another_mac!(1);
    fn_take_unit(());
    //~^ unit_arg

    macro_rules! mac {
        (nondef $e:expr) => {
            $e
        };
        (empty_block) => {{}};
    }
    fn_take_unit(mac!(nondef ()));
    //~^ unit_arg
    mac!(empty_block);
    fn_take_unit(());
    //~^ unit_arg

    fn def<T: Default>() -> T {
        Default::default()
    }

    let _: () = def();
    fn_take_unit(());
    //~^ unit_arg
}
