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);
En esta muestra de código trivial, el usuario desea crear una estructura a través de la expansión de macro y escribir un comentario único para cada invocación de macro diferente.
Esto significa un comentario único para struct Foo y Bar que actualmente no es posible en el compilador rust cuando se habilita:
#![warn(missing_docs)]
Con las siguientes advertencias:
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)]
| ^^^^^^^^^^^^
Si bien esto obviamente funciona:
macro_rules! foo_macro {
/// Unified comment for any macro expansion which is bad!
($name:ident) => {
pub struct $name;
}
}
foo_macro!(Foo);
foo_macro!(Bar);
Puede simplemente reenviar todos los atributos (los comentarios de documentos son #[doc]
atributos), pero dado que la repetición de atributos no puede ser seguida directamente por un identificador, es necesario cambiar un poco la sintaxis.
Ejemplo (patio de recreo)
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() {
}
El foro de usuarios es un buen lugar para discutir cuestiones como esta. https://users.rust-lang.org/
Los informes de errores concretos son muy bienvenidos aquí, pero cerraré esto ya que se ha respondido y es mejor seguir hablando en el foro de usuarios.
El problema aquí no parece estar resuelto. ¿Cómo escribir comentarios de documentos para macros que comienzan con ident
?
Comentario más útil
El problema aquí no parece estar resuelto. ¿Cómo escribir comentarios de documentos para macros que comienzan con
ident
?