macro_rules! foo_macro {
($name:ident) => {
pub struct $name;
}
}
/// Doc comment for Foo struct.
foo_macro!(Foo);
/// Doc comment for Bar struct.
foo_macro!(Bar);
この簡単なコードサンプルでは、ユーザーはマクロ展開を介して構造体を作成し、さまざまなマクロ呼び出しごとに一意のコメントを記述したいと考えています。
これは、struct Foo and Barに対する一意のコメントを意味します。これは、現在rustコンパイラで有効にすると不可能です。
#![warn(missing_docs)]
次の警告があります。
warning: missing documentation for a struct
--> src/activation_fn.rs:9:3
|
9 | pub struct $name;
| ^^^^^^^^^^^^^^^^^
...
14 | foo_macro!(Foo);
| ---------------- in this macro invocation
|
note: lint level defined here
--> src/lib.rs:1:9
|
1 | #![warn(missing_docs)]
| ^^^^^^^^^^^^
warning: missing documentation for a struct
--> src/activation_fn.rs:9:3
|
9 | pub struct $name;
| ^^^^^^^^^^^^^^^^^
...
17 | foo_macro!(Bar);
| ---------------- in this macro invocation
|
note: lint level defined here
--> src/lib.rs:1:9
|
1 | #![warn(missing_docs)]
| ^^^^^^^^^^^^
これは明らかに機能しますが:
macro_rules! foo_macro {
/// Unified comment for any macro expansion which is bad!
($name:ident) => {
pub struct $name;
}
}
foo_macro!(Foo);
foo_macro!(Bar);
すべての属性を転送することもできますが(ドキュメントコメントは#[doc]
属性です)、属性の繰り返しの後にIDを直接続けることはできないため、構文を少し変更する必要があります。
macro_rules! foo_macro {
($(#[$attr:meta])* struct $name:ident) => {
$(#[$attr])*
pub struct $name;
}
}
foo_macro!(
/// Doc comment for Foo struct.
struct Foo
);
foo_macro!(
/// Doc comment for Bar struct.
struct Bar
);
fn main() {
}
ユーザーフォーラムは、このような質問について話し合うのに適した場所です。 https://users.rust-lang.org/
具体的なバグレポートはここで大歓迎ですが、回答があり、ユーザーフォーラムでさらに議論するのが最善であるため、これを閉じます。
ここでの問題は解決されていないようです。 ident
で始まるマクロのドキュメントコメントを書く方法
最も参考になるコメント
ここでの問題は解決されていないようです。
ident
で始まるマクロのドキュメントコメントを書く方法