Rust: Commentaires pour les extensions de macro

Créé le 19 oct. 2016  ·  3Commentaires  ·  Source: 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);

Dans cet exemple de code trivial, l'utilisateur souhaite créer une structure via l'expansion de macro et écrire un commentaire unique pour chaque invocation de macro différente.
Cela signifie un commentaire unique pour struct Foo et Bar qui n'est actuellement pas possible dans le compilateur rust lors de l'activation :

#![warn(missing_docs)]

Avec les avertissements suivants :

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

Bien que cela fonctionne évidemment:

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

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

Commentaire le plus utile

Le problème ici ne semble pas résolu. Comment écrire des commentaires doc pour les macros commençant par un ident ?

Tous les 3 commentaires

Vous pouvez simplement transférer tous les attributs (les commentaires doc sont des attributs #[doc] ), mais comme la répétition d'attributs ne peut pas être suivie directement d'un ident, cela nécessite de changer un peu la syntaxe.

Exemple (aire de jeux)

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

Le forum des utilisateurs est un bon endroit pour discuter de questions comme celle-ci. https://users.rust-lang.org/

Les rapports de bogues concrets sont les bienvenus ici, mais je vais fermer ceci car il a été répondu et il est préférable de discuter plus avant sur le forum des utilisateurs.

Le problème ici ne semble pas résolu. Comment écrire des commentaires doc pour les macros commençant par un ident ?

Cette page vous a été utile?
0 / 5 - 0 notes