如何在不将每一行转换为新段落的情况下在宏中生成文档?

How can I generate doc in macros without transforming each line into a new paragraph?

我了解到 我可以从宏生成文档:

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

struct Baz {}
impl Baz {
    gen_fn! {
        /// This is a doc
        /// with a very long text.
        my_func
    }
}

fn main() {
    let o = Baz{};
    o.my_func(); // generated method, with correct doc
}

但是,如果我将多个文档行传递给 gen_fn,它会将每一行解释为一个新的 #[doc],从而将每一行转换为一个新段落:

struct Baz {}
impl Baz {
    gen_fn! {
        /// This is a doc
        /// with a very long text.
        => my_func
    }
}

而不是“这是一个文本很长的文档”*,它变成了两个段落:

如何重写 gen_fn 以便它不会将每个新行转换为一个段落?

附录:

我破解了一个方法,直接把字符串插入#[doc],但是看起来很难看,所以我想知道是否有更优雅的方法:

macro_rules! gen_fn {
    ($name: ident, $comm: expr) => {
        #[doc=$comm]
        pub fn $name(self) {}
    }
}

struct Baz {}
impl Baz {
    gen_fn!(my_func,
        "This is a doc
        with a very long text.");
}

更新:

这确实是 rust-analyzer 中的一个错误,这里已修复:

通过 cargo doc 和 Rust 1.48.0 记录时对我来说看起来不错:

<div class="docblock"><p>This is a doc
with a very long text.</p>
</div>

问题似乎与您的编辑器显示文档的方式有关。