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}");