macro_rules! diagnostic {
($err : expr) => { ... };
($span : expr, $level : expr, $fmt : expr, $($args : expr), + ; $($rest : tt)
+) => { ... };
($span : expr, $level : expr, $msg : expr ; $($rest : tt) +) => { ... };
($span : expr, $level : expr, $fmt : expr, $($args : expr), +) => { ... };
($span : expr, $level : expr, $msg : expr) => { ... };
($span : expr, $level : expr, $fmt : expr, $($args : expr), +, ; $($rest : tt)
+) => { ... };
($span : expr, $level : expr, $msg : expr, ; $($rest : tt) +) => { ... };
($span : expr, $level : expr, $fmt : expr, $($args : expr), +,) => { ... };
($span : expr, $level : expr, $msg : expr,) => { ... };
}