rustc_lint_defs::builtin

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.