crate_in_paths

The tracking issue for this feature is: #44660


The crate_in_paths feature allows to explicitly refer to the crate root in absolute paths using keyword crate.

This feature is required in feature(extern_absolute_paths) mode to refer to any absolute path in the local crate (absolute paths refer to extern crates by default in that mode), but can be used without feature(extern_absolute_paths) as well.

#![feature(crate_in_paths)]

// Imports, `::` is added implicitly
use crate::m::f;
use crate as root;

mod m {
    pub fn f() -> u8 { 1 }
    pub fn g() -> u8 { 2 }
    pub fn h() -> u8 { 3 }

    // OK, visibilities implicitly add starting `::` as well, like imports
    pub(in crate::m) struct S;
}

mod n
{
    use crate::m::f;
    use crate as root;
    pub fn check() {
        assert_eq!(f(), 1);
        assert_eq!(crate::m::g(), 2);
        assert_eq!(root::m::h(), 3);
    }
}

fn main() {
    assert_eq!(f(), 1);
    assert_eq!(crate::m::g(), 2);
    assert_eq!(root::m::h(), 3);
    n::check();
}