Rollup merge of #59116 - estebank:comma-sugg, r=petrochenkov

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

Fix #58796.
This commit is contained in:
Mazdak Farrokhzad 2019-03-19 15:16:55 +01:00 committed by GitHub
commit 8ebe2acb7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 9 deletions

View File

@ -178,9 +178,11 @@ impl TokenStream {
while let Some((pos, ts)) = iter.next() { while let Some((pos, ts)) = iter.next() {
if let Some((_, next)) = iter.peek() { if let Some((_, next)) = iter.peek() {
let sp = match (&ts, &next) { let sp = match (&ts, &next) {
((TokenTree::Token(_, token::Token::Comma), NonJoint), _) | (_, (TokenTree::Token(_, token::Token::Comma), _)) => continue,
(_, (TokenTree::Token(_, token::Token::Comma), NonJoint)) => continue, ((TokenTree::Token(sp, token_left), NonJoint),
((TokenTree::Token(sp, _), NonJoint), _) => *sp, (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(), ((TokenTree::Delimited(sp, ..), NonJoint), _) => sp.entire(),
_ => continue, _ => continue,
}; };

View File

@ -6,6 +6,11 @@ macro_rules! foo {
($a:ident, $b:ident, $c:ident, $d:ident, $e:ident) => (); ($a:ident, $b:ident, $c:ident, $d:ident, $e:ident) => ();
} }
macro_rules! bar {
($lvl:expr, $($arg:tt)+) => {}
}
fn main() { fn main() {
println!("{}" a); println!("{}" a);
//~^ ERROR expected token: `,` //~^ ERROR expected token: `,`
@ -17,4 +22,6 @@ fn main() {
//~^ ERROR no rules expected the token `d` //~^ ERROR no rules expected the token `d`
foo!(a, b, c d e); foo!(a, b, c d e);
//~^ ERROR no rules expected the token `d` //~^ 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: `,` error: expected token: `,`
--> $DIR/missing-comma.rs:10:19 --> $DIR/missing-comma.rs:15:19
| |
LL | println!("{}" a); LL | println!("{}" a);
| ^ | ^
error: no rules expected the token `b` error: no rules expected the token `b`
--> $DIR/missing-comma.rs:12:12 --> $DIR/missing-comma.rs:17:12
| |
LL | macro_rules! foo { LL | macro_rules! foo {
| ---------------- when calling this macro | ---------------- when calling this macro
@ -16,7 +16,7 @@ LL | foo!(a b);
| help: missing comma here | help: missing comma here
error: no rules expected the token `e` error: no rules expected the token `e`
--> $DIR/missing-comma.rs:14:21 --> $DIR/missing-comma.rs:19:21
| |
LL | macro_rules! foo { LL | macro_rules! foo {
| ---------------- when calling this macro | ---------------- when calling this macro
@ -27,7 +27,7 @@ LL | foo!(a, b, c, d e);
| help: missing comma here | help: missing comma here
error: no rules expected the token `d` error: no rules expected the token `d`
--> $DIR/missing-comma.rs:16:18 --> $DIR/missing-comma.rs:21:18
| |
LL | macro_rules! foo { LL | macro_rules! foo {
| ---------------- when calling this macro | ---------------- when calling this macro
@ -38,7 +38,7 @@ LL | foo!(a, b, c d, e);
| help: missing comma here | help: missing comma here
error: no rules expected the token `d` error: no rules expected the token `d`
--> $DIR/missing-comma.rs:18:18 --> $DIR/missing-comma.rs:23:18
| |
LL | macro_rules! foo { LL | macro_rules! foo {
| ---------------- when calling this macro | ---------------- when calling this macro
@ -46,5 +46,14 @@ LL | macro_rules! foo {
LL | foo!(a, b, c d e); LL | foo!(a, b, c d e);
| ^ no rules expected this token in macro call | ^ 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