macros - 如何将 Rust 宏变量嵌入到文档中?

标签 macros documentation rust

我想在宏生成的文档中使用宏变量:

macro_rules! impl_foo {
    ($name:ident) => {
        /// Returns a new `$name`.
        fn myfoo() -> $name {

        }
    };
}

但是,变量不会被替换。我还尝试使用 #[doc] 属性:

macro_rules! impl_foo {
    ($name:ident) => {
        #[doc = concat!("Returns a new `", $name, "`.")]
        fn myfoo() -> $name {

        }
    };
}

这个甚至无法解析:unexpected token: 'concat'

最佳答案

这可以使用递归宏来完成:

macro_rules! impl_foo {
    ($name:ident, $sname:expr) => {
        #[doc = "Returns a new `"]
        #[doc = $sname]
        #[doc = "`."]
        pub fn myfoo() -> $name {
            42
        }
    };

    ($name:tt) => {
        impl_foo!($name, stringify!($name));
    };
}

impl_foo!(u32);


fn main() {
    println!("Hello, world!");
}

呈现为:

Example from rustdoc

关于macros - 如何将 Rust 宏变量嵌入到文档中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43353077/

相关文章:

iterator - 如何使用同一个迭代器两次,一次用于计数,一次用于迭代?

rust - 如何找到 syn::parse 的正确返回类型?

c++ - 重新定义自定义删除

cmake - 记录 CMakeLists.txt 和自定义或本地 .cmake 文件

ruby-on-rails - 如何在Rails中为我的模型和 Controller 生成文档

Linq to SQL 的 C# XML 文档

windows - 无法在 Windows 上使用 Rust 和 GTK 运行 pkg-config

c - 测试预处理器符号是否在宏中定义

基于上下文的c++宏

rust - 从 Option<Rc<RefCell<T>>> 解包并访问 T