如何在不将每一行转换为新段落的情况下在宏中生成文档?
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>
问题似乎与您的编辑器显示文档的方式有关。
我了解到
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>
问题似乎与您的编辑器显示文档的方式有关。