Macro file

1.85.0 · Source
macro_rules! file {
    () => { ... };
}
Expand description

Expands to the file name in which it was invoked.

With line! and column!, these macros provide debugging information for developers about the location within the source.

The expanded expression has type &'static str, and the returned file is not the invocation of the file! macro itself, but rather the first macro invocation leading up to the invocation of the file! macro.

The file name is derived from the crate root’s source path passed to the Rust compiler and the sequence the compiler takes to get from the crate root to the module containing file!, modified by any flags passed to the Rust compiler (e.g. --remap-path-prefix). If the crate’s source path is relative, the initial base directory will be the working directory of the Rust compiler. For example, if the source path passed to the compiler is ./src/lib.rs which has a mod foo; with a source path of src/foo/mod.rs, then calling file! inside mod foo; will return ./src/foo/mod.rs.

Future compiler options might make further changes to the behavior of file!, including potentially making it entirely empty. Code (e.g. test libraries) relying on file! producing an openable file path would be incompatible with such options, and might wish to recommend not using those options.

§Examples

let this_file = file!();
println!("defined in file: {this_file}");