## ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE

# Static ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE

Source

    pub static ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE: &Lint

Expand description

The `absolute_paths_not_starting_with_crate` lint detects fully qualified paths that start with a module name instead of `crate`, `self`, or an extern crate name

#### §Example

ⓘ

    #![deny(absolute_paths_not_starting_with_crate)]

    mod foo {
        pub fn bar() {}
    }

    fn main() {
        ::foo::bar();
    }

{{produces}}

#### §Explanation

Rust editions allow the language to evolve without breaking backwards compatibility. This lint catches code that uses absolute paths in the style of the 2015 edition. In the 2015 edition, absolute paths (those starting with `::`) refer to either the crate root or an external crate. In the 2018 edition it was changed so that they only refer to external crates. The path prefix `crate::` should be used instead to reference items from the crate root.

If you switch the compiler from the 2015 to 2018 edition without updating the code, then it will fail to compile if the old style paths are used. You can manually change the paths to use the `crate::` prefix to transition to the 2018 edition.

This lint solves the problem automatically. It is “allow” by default because the code is perfectly valid in the 2015 edition. The `cargo fix` tool with the `--edition` flag will switch this lint to “warn” and automatically apply the suggested fix from the compiler. This provides a completely automated way to update old code to the 2018 edition.