2016-01-18 35 views
3

我注意到編譯插件經常提供文檔甚至不提及的宏。它們以編程方式註冊和創建,而不是在rustdoc識別的語法中定義。當然,沒有文檔可以顯示。記錄項目rustdoc看不到

我正在尋找一種方法來解決這個問題,一些生成文檔的方法在編譯時並不存在於箱子中。

我注意到語法箱子也可以從這樣的事情中受益。例如,quote_item完全沒有記錄。我甚至找不到註冊它的代碼。

回答

3

一種可能性是做什麼the compiler does:創建一個空的macro_rules!宏並附上文檔。例如。如果一箱定義foo,需要一個單一的表達,然後寫類似

/// Documentation 
#[macro_export] 
macro_rules! foo { 
    ($e: expr) => ({ /* syntax extension */ }) 
} 

我注意到語法箱可以從這樣的事情中受益。例如,quote_item完全沒有記錄。我甚至找不到註冊它的代碼。

你可以search the Rust source for quote_item,這有兩個原因有幫助:它提供了一些例子,並且還允許你追蹤定義。後者使用Rust's DXR instance更容易,它可以用引號(即可以找到字符串)搜索事物,並且包括各種源代碼導航技巧(如跳轉到定義)。

+0

很酷。疑難解答提示:如果您定義了空宏並在同一個箱子中調用它們,那麼它將調用空的宏而不是由編譯器插件註冊的宏,這與您想要的相反。不要驚慌。一旦在調用站點的單獨的包中定義了空的宏,程序宏將按預期調用。 – mako