我写了一个proc-macro
库来配合我正在编写的库 - 它们一起使用,前者用于抽象出后者中的大量冗余代码。
我在我的 proc 宏中成功生成了几个结构和实现。我也在使用cargo doc
图书馆,我的文档是我所期望的。但是,我在 proc 宏中创建的文档注释没有按预期工作。我的 proc 宏中的一些代码大致如下所示:
#[proc_macro_derive(MyDerive)]
pub fn derive(input: TokenStream) -> TokenStream {
...
let expanded = quote! {
...
impl #my_struct {
/// This comment doesn't show up in documentation
pub fn foo(&self, n: i32) -> bool {
false
}
/// This comment DOES show up in documentation
pub fn bar(n: i32) -> Vec<String> {
...
}
}
}
expanded.into()
}
当我打开生成的文档时:
foo
本身出现在文档中,但它的评论没有bar
及其评论在文档中- 如果我更改 的评论
bar
,则评论不会更新。
这第三点告诉我,我可能cargo doc
在某些时候使用了一些正常工作的标志,但我现在使用的是一组不同的标志,这些标志不适用于 proc 宏。我不想记录我所有的外部 crate 依赖项 ( --no-deps
),但我确实想记录我的私人项目 ( --document-private-items
)。因此,我使用cargo doc --no-deps --document-private-items
. 我也试过了--release
。
我假设文档是从源代码构建的,而不是从构建的 .so 文件本身构建的,所以我cargo build
之前没有做过cargo doc
,尽管我也尝试过这个来调试这个问题。那么,确保正确生成和更新我的 proc 宏生成代码的文档的正确方法是什么?