2016-12-28 55 views
4

与宏创建的函数我试图做文档化拉斯特

#![deny(missing_docs)] 

在生锈。而且我发现,当用这样的宏创建的函数///意见只是忽略:

/// 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| { 
    |^

我想///后的宏将只需添加一个函数定义。这里有什么问题?

回答

8

你的文档评论是指宏调用,在你的情况下是无用的。要记录生成的函数,您必须将文档注释写入宏定义将宏更改为也接受文档注释。让我们来看看这个:

#![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); 

这工作,但它不是最好的解决办法,因为文档注释是所有生成的函数相同。如果你想要记录每个生成的功能,你更改宏:

macro_rules! gen_fn { 
    ($(#[$attr:meta])* => $name:ident) => { 
     $(#[$attr])* 
     pub fn $name() {} 
    } 
} 

gen_fn!{ 
    /// Doc comment for a 
    => a 
} 

这工作,因为文档注释将被转换为#[doc(...)]属性内部。您可以找到有关该here的更多信息。