//@ aux-build:edition-lint-paths.rs
//@ run-rustfix

#![deny(absolute_paths_not_starting_with_crate)]
#![allow(unused)]

extern crate edition_lint_paths;

pub mod foo {
    use edition_lint_paths;
    use crate::bar::Bar;
    //~^ ERROR absolute
    //~| WARN this is accepted in the current edition

    use super::bar::Bar2;
    use crate::bar::Bar3;

    use crate::bar;
    //~^ ERROR absolute
    //~| WARN this is accepted in the current edition

    use crate::bar as something_else;

    use crate::{main, Bar as SomethingElse};
    //~^ ERROR absolute
    //~| WARN this is accepted in the current edition
    //~| ERROR absolute
    //~| WARN this is accepted in the current edition
    //~| ERROR absolute
    //~| WARN this is accepted in the current edition

    use crate::{main as another_main, Bar as SomethingElse2};

    pub fn test() {}

    pub trait SomeTrait {}
}

use crate::bar::Bar;
//~^ ERROR absolute
//~| WARN this is accepted in the current edition

pub mod bar {
    use edition_lint_paths as foo;
    pub struct Bar;
    pub type Bar2 = Bar;
    pub type Bar3 = Bar;
}

mod baz {
    use crate::*;
    //~^ ERROR absolute
    //~| WARN this is accepted in the current edition
}

impl crate::foo::SomeTrait for u32 {}
//~^ ERROR absolute
//~| WARN this is accepted in the current edition

fn main() {
    let x = crate::bar::Bar;
    //~^ ERROR absolute
    //~| WARN this is accepted in the current edition

    let x = bar::Bar;
    let x = crate::bar::Bar;
    let x = self::bar::Bar;
    foo::test();

    {
        use edition_lint_paths as bar;
        edition_lint_paths::foo();
        bar::foo();
        ::edition_lint_paths::foo();
    }
}
