Rust: Komentar untuk ekspansi makro

Dibuat pada 19 Okt 2016  ·  3Komentar  ·  Sumber: 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);

Dalam contoh kode sepele ini, pengguna ingin membuat struct melalui ekspansi makro dan menulis komentar unik untuk setiap permintaan makro yang berbeda.
Ini berarti komentar unik untuk struct Foo and Bar yang saat ini tidak memungkinkan di rust compiler saat mengaktifkan:

#![warn(missing_docs)]

Dengan peringatan sebagai berikut:

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)]
   |         ^^^^^^^^^^^^

Meskipun ini jelas berhasil:

macro_rules! foo_macro {
    /// Unified comment for any macro expansion which is bad!
    ($name:ident) => {
        pub struct $name;
    }
}

foo_macro!(Foo);
foo_macro!(Bar);

Komentar yang paling membantu

Masalah di sini sepertinya belum terpecahkan. Bagaimana cara menulis komentar dokumen untuk makro yang dimulai dengan ident ?

Semua 3 komentar

Anda dapat meneruskan semua atribut (komentar dokumen adalah atribut #[doc] ), tetapi karena pengulangan atribut tidak dapat diikuti secara langsung oleh sebuah ident, diperlukan sedikit perubahan sintaks.

Contoh (taman bermain)

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() {
}

Forum pengguna adalah tempat yang baik untuk mendiskusikan pertanyaan seperti ini. https://users.rust-lang.org/

Laporan bug konkret sangat diterima di sini, tetapi saya akan menutup ini karena telah dijawab dan diskusi lebih lanjut sebaiknya dilakukan di forum pengguna.

Masalah di sini sepertinya belum terpecahkan. Bagaimana cara menulis komentar dokumen untuk makro yang dimulai dengan ident ?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat