#![warn(unused)]
#![allow(dead_code)]
#![deny(non_snake_case)]

mod foo {
    pub enum Foo { Foo }
}

struct Something {
    X: usize //~ ERROR structure field `X` should have a snake case name
}

fn test(Xx: usize) { //~ ERROR variable `Xx` should have a snake case name
    println!("{}", Xx);
}

fn main() {
    let Test: usize = 0; //~ ERROR variable `Test` should have a snake case name
    println!("{}", Test);

    match foo::Foo::Foo {
        Foo => {}
    //~^ ERROR variable `Foo` should have a snake case name
    //~^^ ERROR `Foo` is named the same as one of the variants of the type `foo::Foo`
    //~^^^ WARN unused variable: `Foo`
    }

    let Foo = foo::Foo::Foo;
    //~^ ERROR variable `Foo` should have a snake case name
    //~^^ ERROR `Foo` is named the same as one of the variants of the type `foo::Foo`
    //~^^^ WARN unused variable: `Foo`

    fn in_param(Foo: foo::Foo) {}
    //~^ ERROR variable `Foo` should have a snake case name
    //~^^ ERROR `Foo` is named the same as one of the variants of the type `foo::Foo`
    //~^^^ WARN unused variable: `Foo`

    test(1);

    let _ = Something { X: 0 };
}