#![warn(clippy::init_numbered_fields)]

#[derive(Default)]
struct TupleStruct(u32, u32, u8);

// This shouldn't lint because it's in a macro
macro_rules! tuple_struct_init {
    () => {
        TupleStruct { 0: 0, 1: 1, 2: 2 }
    };
}

fn main() {
    let tuple_struct = TupleStruct::default();

    // This should lint
    let _ = TupleStruct(1u32, 42, 23u8);

    // This should also lint and order the fields correctly
    let _ = TupleStruct(1u32, 3u32, 2u8);

    // Ok because of default initializer
    let _ = TupleStruct { 0: 42, ..tuple_struct };

    let _ = TupleStruct {
        1: 23,
        ..TupleStruct::default()
    };

    // Ok because it's in macro
    let _ = tuple_struct_init!();

    type Alias = TupleStruct;

    // Aliases can't be tuple constructed #8638
    let _ = Alias { 0: 0, 1: 1, 2: 2 };

    // Issue #12367
    struct TupleStructVec(Vec<usize>);

    let _ = TupleStructVec(vec![0, 1, 2, 3]);
    //~^ init_numbered_fields

    {
        struct S(i32, i32);
        let mut iter = [1i32, 1i32].into_iter();
        let _ = S {
            1: iter.next().unwrap(),
            0: iter.next().unwrap(),
        };
    }
}
