Rust: マクロ展開に関するコメント

作成日 2016年10月19日  ·  3コメント  ·  ソース: rust-lang/rust

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);

最も参考になるコメント

ここでの問題は解決されていないようです。 identで始まるマクロのドキュメントコメントを書く方法

全てのコメント3件

すべての属性を転送することもできますが(ドキュメントコメントは#[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で始まるマクロのドキュメントコメントを書く方法

このページは役に立ちましたか?
0 / 5 - 0 評価