我正在创建一个从某个配置文件自动生成库的程序宏(它是一个寄存器布局,但这对于这个问题并不重要)。
我希望该库自动生成自动库随附的文档,并包含应该使用cargo test
. 现在,我已经实现了大部分,但有一个问题我看不到解决方案。
假设我们有一个调用的库my_lib
,我们在其中调用宏来填充它:
use my_macro_lib::hello;
hello!();
扩展为:
/// `foo` will always return `true`
/// ```
/// use my_lib;
/// assert!(my_lib::foo());
/// ```
pub fn foo() -> bool {
true
}
这将按预期运行 -cargo doc
将做正确的事情cargo test
并按预期运行文档测试。
问题是,在这个例子中,use my_lib
被硬编码到my_macro_lib
这显然是不可取的。
如何创建一个宏来推断正在调用的 crate 的名称?
我尝试macro_rules!
在程序宏内部使用 a expand $crate
,但这违反了卫生规则。