我试着做
#![deny(missing_docs)]
在Rust,我发现当使用像这样的宏创建函数时,///
注释被忽略:
/// docs
py_module_initializer!(libx, initlibx PyInit_libx |py, m| {
Ok(())
});
使用:
error: missing documentation for a function
113 | py_module_initializer!(libx initlibx PyInit_libx |py, m| {
| ^
我认为宏只会在///
之后添加一个函数定义。这有什么不对?
答案 0 :(得分:8)
您的文档注释引用了宏调用,在您的情况下它是无用的。要记录生成的函数,您必须将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);
这可行,但它不是最佳解决方案,因为所有生成的函数的doc注释都是相同的。如果要记录每个生成的函数,则有来更改宏:
macro_rules! gen_fn {
($(#[$attr:meta])* => $name:ident) => {
$(#[$attr])*
pub fn $name() {}
}
}
gen_fn!{
/// Doc comment for a
=> a
}
这很有效,因为doc注释会在内部转换为#[doc(...)]
属性。您可以找到有关here的更多信息。