]> git.lizzy.rs Git - rust.git/commitdiff
Add guard for missing comma in macro call suggestion
authorEsteban Küber <esteban@kuber.com.ar>
Wed, 24 Apr 2019 23:45:29 +0000 (16:45 -0700)
committerEsteban Küber <esteban@kuber.com.ar>
Wed, 24 Apr 2019 23:45:29 +0000 (16:45 -0700)
src/libsyntax/tokenstream.rs
src/test/ui/macros/missing-comma.rs
src/test/ui/macros/missing-comma.stderr

index 2d47b982ebdd9b7140d1760d0206cc6cd3a1278b..93b5ecadd148f1f64ec62b1ba666fc2f2829d44f 100644 (file)
@@ -182,8 +182,10 @@ pub(crate) fn add_comma(&self) -> Option<(TokenStream, Span)> {
                         (_, (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,
+                        if ((token_left.is_ident() && !token_left.is_reserved_ident())
+                            || token_left.is_lit()) &&
+                            ((token_right.is_ident() && !token_right.is_reserved_ident())
+                            || token_right.is_lit()) => *sp,
                         ((TokenTree::Delimited(sp, ..), NonJoint), _) => sp.entire(),
                         _ => continue,
                     };
index 2b411aba8a2eec557600f12c66343cb4c56da8e7..2002fed6c93aa8d15841071cb9005b6328269830 100644 (file)
@@ -10,6 +10,10 @@ macro_rules! bar {
     ($lvl:expr, $($arg:tt)+) => {}
 }
 
+macro_rules! check {
+    ($ty:ty, $expected:expr) => {};
+    ($ty_of:expr, $expected:expr) => {};
+}
 
 fn main() {
     println!("{}" a);
@@ -24,4 +28,7 @@ fn main() {
     //~^ ERROR no rules expected the token `d`
     bar!(Level::Error, );
     //~^ ERROR unexpected end of macro invocation
+    check!(<str as Debug>::fmt, "fmt");
+    check!(<str as Debug>::fmt, "fmt",);
+    //~^ ERROR no rules expected the token `,`
 }
index 424fefd00f87381e7fa0944fa8838a4de51801b4..d5b6d86b20ff16c394ef599fb7d425c89fe3d17f 100644 (file)
@@ -1,11 +1,11 @@
 error: expected token: `,`
-  --> $DIR/missing-comma.rs:15:19
+  --> $DIR/missing-comma.rs:19:19
    |
 LL |     println!("{}" a);
    |                   ^
 
 error: no rules expected the token `b`
-  --> $DIR/missing-comma.rs:17:12
+  --> $DIR/missing-comma.rs:21: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:19:21
+  --> $DIR/missing-comma.rs:23: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:21:18
+  --> $DIR/missing-comma.rs:25: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:23:18
+  --> $DIR/missing-comma.rs:27:18
    |
 LL | macro_rules! foo {
    | ---------------- when calling this macro
@@ -47,7 +47,7 @@ LL |     foo!(a, b, c d e);
    |                  ^ no rules expected this token in macro call
 
 error: unexpected end of macro invocation
-  --> $DIR/missing-comma.rs:25:23
+  --> $DIR/missing-comma.rs:29:23
    |
 LL | macro_rules! bar {
    | ---------------- when calling this macro
@@ -55,5 +55,14 @@ LL | macro_rules! bar {
 LL |     bar!(Level::Error, );
    |                       ^ missing tokens in macro arguments
 
-error: aborting due to 6 previous errors
+error: no rules expected the token `,`
+  --> $DIR/missing-comma.rs:32:38
+   |
+LL | macro_rules! check {
+   | ------------------ when calling this macro
+...
+LL |     check!(<str as Debug>::fmt, "fmt",);
+   |                                      ^ no rules expected this token in macro call
+
+error: aborting due to 7 previous errors