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
.
crate
can be used only in absolute paths, i.e. either in ::crate::a::b::c
form or in use
items where the starting ::
is added implicitly.
Paths like crate::a::b::c
are not accepted currently.
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);
// `::` is required in non-import paths
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();
}