推断出调用条板箱的名称以在程序宏中填充doctest

问题描述 投票:3回答:1

我正在创建一个程序宏,该宏从某些配置文件自动生成库(这是寄存器布局,但这对问题并不重要)。>>

我希望该库自动生成自动库随附的文档,并包括应该以cargo test运行的doc测试。现在,我已经实现了大部分功能,但是有一个我看不到解决方案的问题。

假设我们有一个名为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将按预期运行doctest。

问题在于,在此示例中,use my_lib被硬编码到my_macro_lib中,这显然是不希望的。

如何创建一个宏来推断正在执行呼叫的板条箱的名称?

我尝试在程序宏内使用macro_rules!来扩展$crate,但这违反了卫生规则。

我正在创建一个程序宏,该宏从某些配置文件自动生成一个库(这是寄存器布局,但这对问题并不重要)。我希望该库自动-...

rust macros doctest
1个回答
0
投票

您可以通过读取CARGO_PKG_NAME环境变量来获得使用您的宏的板条箱的名称。请注意,您必须通过阅读std::env(在宏的“运行时”)和not

© www.soinside.com 2019 - 2024. All rights reserved.