Be more discerning on when to attempt suggesting a comma in a macro invocation

This commit is contained in:
Esteban Küber 2019-03-11 15:07:07 -07:00
parent 913ad6d1f0
commit b9d12edd6c
3 changed files with 27 additions and 9 deletions

View File

@ -178,9 +178,11 @@ pub(crate) fn add_comma(&self) -> Option<(TokenStream, Span)> {
while let Some((pos, ts)) = iter.next() {
if let Some((_, next)) = iter.peek() {
let sp = match (&ts, &next) {
((TokenTree::Token(_, token::Token::Comma), NonJoint), _) |
(_, (TokenTree::Token(_, token::Token::Comma), NonJoint)) => continue,
((TokenTree::Token(sp, _), NonJoint), _) => *sp,
(_, (TokenTree::Token(_, token::Token::Comma), _)) => continue,
((TokenTree::Token(sp, token_left), NonJoint),
(TokenTree::Token(_, token_right), _))
if token_left.is_ident() || token_left.is_lit() &&
token_right.is_ident() || token_right.is_lit() => *sp,
((TokenTree::Delimited(sp, ..), NonJoint), _) => sp.entire(),
_ => continue,
};

View File

@ -6,6 +6,11 @@ macro_rules! foo {
($a:ident, $b:ident, $c:ident, $d:ident, $e:ident) => ();
}
macro_rules! bar {
($lvl:expr, $($arg:tt)+) => {}
}
fn main() {
println!("{}" a);
//~^ ERROR expected token: `,`
@ -17,4 +22,6 @@ fn main() {
//~^ 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
}

View File

@ -1,11 +1,11 @@
error: expected token: `,`
--> $DIR/missing-comma.rs:10:19
--> $DIR/missing-comma.rs:15:19
|
LL | println!("{}" a);
| ^
error: no rules expected the token `b`
--> $DIR/missing-comma.rs:12:12
--> $DIR/missing-comma.rs:17:12
|
LL | macro_rules! foo {
| ---------------- when calling this macro
@ -16,7 +16,7 @@ LL | foo!(a b);
| help: missing comma here
error: no rules expected the token `e`
--> $DIR/missing-comma.rs:14:21
--> $DIR/missing-comma.rs:19:21
|
LL | macro_rules! foo {
| ---------------- when calling this macro
@ -27,7 +27,7 @@ LL | foo!(a, b, c, d e);
| help: missing comma here
error: no rules expected the token `d`
--> $DIR/missing-comma.rs:16:18
--> $DIR/missing-comma.rs:21:18
|
LL | macro_rules! foo {
| ---------------- when calling this macro
@ -38,7 +38,7 @@ LL | foo!(a, b, c d, e);
| help: missing comma here
error: no rules expected the token `d`
--> $DIR/missing-comma.rs:18:18
--> $DIR/missing-comma.rs:23:18
|
LL | macro_rules! foo {
| ---------------- when calling this macro
@ -46,5 +46,14 @@ LL | macro_rules! foo {
LL | foo!(a, b, c d e);
| ^ no rules expected this token in macro call
error: aborting due to 5 previous errors
error: unexpected end of macro invocation
--> $DIR/missing-comma.rs:25:23
|
LL | macro_rules! bar {
| ---------------- when calling this macro
...
LL | bar!(Level::Error, );
| ^ missing tokens in macro arguments
error: aborting due to 6 previous errors