#![warn(clippy::empty_structs_with_brackets)]
#![allow(dead_code)]

pub struct MyEmptyStruct; // should trigger lint
//~^ empty_structs_with_brackets
struct MyEmptyTupleStruct; // should trigger lint
//~^ empty_structs_with_brackets

// should not trigger lint
struct MyCfgStruct {
    #[cfg(feature = "thisisneverenabled")]
    field: u8,
}

// should not trigger lint
struct MyCfgTupleStruct(#[cfg(feature = "thisisneverenabled")] u8);

// should not trigger lint
struct MyStruct {
    field: u8,
}
struct MyTupleStruct(usize, String); // should not trigger lint
struct MySingleTupleStruct(usize); // should not trigger lint
struct MyUnitLikeStruct; // should not trigger lint

macro_rules! empty_struct {
    ($s:ident) => {
        struct $s {}
    };
}

empty_struct!(FromMacro);

fn main() {}

mod issue15349 {
    trait Bar<T> {}
    impl<T> Bar<T> for [u8; 7] {}

    struct Foo<const N: usize>;
    //~^ empty_structs_with_brackets
    impl<const N: usize> Foo<N>
    where
        [u8; N]: Bar<[(); N]>,
    {
        fn foo() {}
    }
}
