macro_rules! foo { ($a:ident) => (); ($a:ident, $b:ident) => (); ($a:ident, $b:ident, $c:ident) => (); ($a:ident, $b:ident, $c:ident, $d:ident) => (); ($a:ident, $b:ident, $c:ident, $d:ident, $e:ident) => (); } macro_rules! bar { ($lvl:expr, $($arg:tt)+) => {} } macro_rules! check { ($ty:ty, $expected:expr) => {}; ($ty_of:expr, $expected:expr) => {}; } fn main() { println!("{}" a); //~^ ERROR expected `,`, found `a` foo!(a b); //~^ ERROR no rules expected the token `b` foo!(a, b, c, d e); //~^ ERROR no rules expected the token `e` foo!(a, b, c d, e); //~^ ERROR no rules expected the token `d` foo!(a, b, c d e); //~^ ERROR no rules expected the token `d` bar!(Level::Error, ); //~^ ERROR unexpected end of macro invocation check!(::fmt, "fmt"); check!(::fmt, "fmt",); //~^ ERROR no rules expected the token `,` }