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);
Neste exemplo de código trivial, o usuário deseja criar uma estrutura por meio da expansão da macro e escrever um comentário exclusivo para cada chamada de macro diferente.
Isso significa um comentário exclusivo para struct Foo e Bar que atualmente não é possível no compilador de ferrugem ao habilitar:
#![warn(missing_docs)]
Com os seguintes avisos:
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)]
| ^^^^^^^^^^^^
Embora isso obviamente funcione:
macro_rules! foo_macro {
/// Unified comment for any macro expansion which is bad!
($name:ident) => {
pub struct $name;
}
}
foo_macro!(Foo);
foo_macro!(Bar);
Você poderia simplesmente encaminhar todos os atributos (os comentários do documento são #[doc]
atributos), mas como a repetição dos atributos não pode ser seguida diretamente por um ident, é necessário alterar um pouco a sintaxe.
Exemplo (playground)
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() {
}
O fórum do usuário é um bom lugar para discutir questões como esta. https://users.rust-lang.org/
Relatórios de bugs concretos são muito bem-vindos aqui, mas irei encerrar assim que tiver sido respondido e discussões futuras são melhores no fórum do usuário.
O problema aqui parece não estar resolvido. Como escrever comentários de documento para macros que começam com ident
?
Comentários muito úteis
O problema aqui parece não estar resolvido. Como escrever comentários de documento para macros que começam com
ident
?