2016-12-28 60 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的更多信息。