如何将 rustdoc 注释添加到 proc 宏生成的代码中?

use*_*321 9 rust rust-cargo rust-proc-macros

我编写了一个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()
}
Run Code Online (Sandbox Code Playgroud)

当我打开生成的文档时:

  • foo本身出现在文档中,但其注释没有
  • bar及其评论在文档中
  • 如果我更改 的评论bar,则评论不会更新。

第三点告诉我,我可能cargo doc在某些时候使用了一些可以正常工作的标志,但我现在使用的是一组不同的标志,这些标志不能与 proc 宏一起使用。我不想记录我所有的外部板条箱依赖项 ( --no-deps),但我确实想记录我的私人项目 ( --document-private-items)。因此,我使用 生成文档cargo doc --no-deps --document-private-items。我也尝试过与--release.

cargo build我假设文档是从源代码构建的,而不是从构建的 .so 文件本身构建的,所以我在 do 之前没有做过cargo doc,尽管我也尝试过这个来调试这个问题。那么确保我的 proc 宏生成代码的文档正确生成和更新的正确方法是什么?