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

时间:2017-04-11 17:56:56

标签: 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'

1 个答案:

答案 0 :(得分:10)

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

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