macro_rules! declare_tool_lint {
    (
        $(#[$attr:meta])* $vis:vis $tool:ident :: $NAME:ident, $Level:ident,
        $desc:expr $(, @ feature_gate = $gate:expr;)?
    ) => { ... };
    (
        $(#[$attr:meta])* $vis:vis $tool:ident :: $NAME:ident, $Level:ident,
        $desc:expr, report_in_external_macro : $rep:expr $(, @ feature_gate =
        $gate:expr;)?
    ) => { ... };
    (
        $(#[$attr:meta])* $vis:vis $tool:ident :: $NAME:ident, $Level:ident,
        $desc:expr, $external:expr $(, @ feature_gate = $gate:expr;)?
    ) => { ... };
}