我在寻找在过程宏上下文中等效于file!()
和module_path!()
的功能。
例如,以下内容无法正常工作:
file.rs
:
#[some_attribute]
const A: bool = true;
macro.rs
:
#[proc_macro_attribute]
pub fn some_attribute(attr: TokenStream, input: TokenStream) -> TokenStream {
println!("{}", file!());
input
}
这会打印出有意义的macro.rs
,但我想要的是file.rs
。是否有一种方法可以实现这一点?module_path!()
是否也有类似的方式?
其中一个要求是必须在编译时发生。
我试图在OUT_DIR
中创建一个文件,其中包含具有模块和它们所在的文件添加了属性的常量值。
Span
的源文件(你可以使用span()
方法从TokenTree
中获取它),但一眼望去我没有找到访问模块路径的方法,也没有找到在稳定版上可用的方法。 - Sven Marnachconst
值,该文件位于OUT_DIR
中。 - tversteeg