我试着这样做
#![deny(missing_docs)]
Run Code Online (Sandbox Code Playgroud)
在Rust.我发现///当使用像这样的宏创建函数时,注释会被忽略:
/// docs
py_module_initializer!(libx, initlibx PyInit_libx |py, m| {
Ok(())
});
Run Code Online (Sandbox Code Playgroud)
有:
error: missing documentation for a function
113 | py_module_initializer!(libx initlibx PyInit_libx |py, m| {
| ^
Run Code Online (Sandbox Code Playgroud)
我以为宏只会添加一个函数定义///.这有什么不对?
您的文档注释引用了宏调用,在您的情况下它是无用的.要记录生成的函数,您必须将doc注释写入宏定义或更改宏以接受doc注释.我们来看看这个:
#![deny(missing_docs)]
//! crate docs
macro_rules! gen_fn {
($name:ident) => {
/// generic doc comment... not very useful
pub fn $name() {}
}
}
gen_fn!(a);
gen_fn!(b);
Run Code Online (Sandbox Code Playgroud)
这可行,但它不是最佳解决方案,因为所有生成的函数的doc注释都是相同的.如果要记录每个生成的函数,则必须更改宏:
macro_rules! gen_fn {
($(#[$attr:meta])* => $name:ident) => {
$(#[$attr])*
pub fn $name() {}
}
}
gen_fn!{
/// Doc comment for a
=> a
}
Run Code Online (Sandbox Code Playgroud)
这有效,因为doc注释在#[doc(...)]内部转换为属性.您可以在此处找到有关它的更多信息.