Rust: рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдХреНрддреВре░ 2016  ┬╖  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);

рдЗрд╕ рдорд╛рдореВрд▓реА рдХреЛрдб рдирдореВрдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдореИрдХреНрд░реЛ рдЖрдордВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреВрдареА рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдлреВ рдФрд░ рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреВрдареА рдЯрд┐рдкреНрдкрдгреА рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрдВрдЧ рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдЬрдм рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

#![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] рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рд╕реАрдзреЗ рдПрдХ рдкрд╣рдЪрд╛рди рджреНрд╡рд╛рд░рд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг (рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди)

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 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dnsl48 picture dnsl48  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mcarton picture mcarton  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nikomatsakis picture nikomatsakis  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tikue picture tikue  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

modsec picture modsec  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ