From 7ac124803f696b7e28d9fdae2f676093024de378 Mon Sep 17 00:00:00 2001
From: Takayuki Maeda <takoyaki0316@gmail.com>
Date: Wed, 7 Sep 2022 03:59:47 +0900
Subject: [PATCH] do not suggest a semicolon for a macro without `!`

---
 compiler/rustc_parse/src/parser/expr.rs                   | 3 +++
 ...-array.rs => do-not-suggest-semicolon-before-array.rs} | 0
 ...tderr => do-not-suggest-semicolon-before-array.stderr} | 2 +-
 ...on-between-macro-without-exclamation-mark-and-array.rs | 3 +++
 ...etween-macro-without-exclamation-mark-and-array.stderr | 8 ++++++++
 ...e-array.fixed => suggest-semicolon-before-array.fixed} | 0
 ...-before-array.rs => suggest-semicolon-before-array.rs} | 0
 ...array.stderr => suggest-semicolon-before-array.stderr} | 2 +-
 8 files changed, 16 insertions(+), 2 deletions(-)
 rename src/test/ui/parser/{do-not-suggest-suggest-semicolon-before-array.rs => do-not-suggest-semicolon-before-array.rs} (100%)
 rename src/test/ui/parser/{do-not-suggest-suggest-semicolon-before-array.stderr => do-not-suggest-semicolon-before-array.stderr} (76%)
 create mode 100644 src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.rs
 create mode 100644 src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.stderr
 rename src/test/ui/parser/{suggest-suggest-semicolon-before-array.fixed => suggest-semicolon-before-array.fixed} (100%)
 rename src/test/ui/parser/{suggest-suggest-semicolon-before-array.rs => suggest-semicolon-before-array.rs} (100%)
 rename src/test/ui/parser/{suggest-suggest-semicolon-before-array.stderr => suggest-semicolon-before-array.stderr} (75%)

diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs
index d4828a201207b..10cd353062e87 100644
--- a/compiler/rustc_parse/src/parser/expr.rs
+++ b/compiler/rustc_parse/src/parser/expr.rs
@@ -1977,6 +1977,9 @@ impl<'a> Parser<'a> {
         open_delim_span: Span,
     ) -> PResult<'a, ()> {
         if self.token.kind == token::Comma {
+            if !self.sess.source_map().is_multiline(prev_span.until(self.token.span)) {
+                return Ok(());
+            }
             let mut snapshot = self.create_snapshot_for_diagnostic();
             snapshot.bump();
             match snapshot.parse_seq_to_before_end(
diff --git a/src/test/ui/parser/do-not-suggest-suggest-semicolon-before-array.rs b/src/test/ui/parser/do-not-suggest-semicolon-before-array.rs
similarity index 100%
rename from src/test/ui/parser/do-not-suggest-suggest-semicolon-before-array.rs
rename to src/test/ui/parser/do-not-suggest-semicolon-before-array.rs
diff --git a/src/test/ui/parser/do-not-suggest-suggest-semicolon-before-array.stderr b/src/test/ui/parser/do-not-suggest-semicolon-before-array.stderr
similarity index 76%
rename from src/test/ui/parser/do-not-suggest-suggest-semicolon-before-array.stderr
rename to src/test/ui/parser/do-not-suggest-semicolon-before-array.stderr
index d6e8db803299c..a9dd526321f5c 100644
--- a/src/test/ui/parser/do-not-suggest-suggest-semicolon-before-array.stderr
+++ b/src/test/ui/parser/do-not-suggest-semicolon-before-array.stderr
@@ -1,5 +1,5 @@
 error: expected one of `.`, `?`, `]`, or an operator, found `,`
-  --> $DIR/do-not-suggest-suggest-semicolon-before-array.rs:5:5
+  --> $DIR/do-not-suggest-semicolon-before-array.rs:5:5
    |
 LL |     [1, 3)
    |     ^ ^ help: `]` may belong here
diff --git a/src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.rs b/src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.rs
new file mode 100644
index 0000000000000..d6f7981813fc5
--- /dev/null
+++ b/src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.rs
@@ -0,0 +1,3 @@
+fn main() {
+    let _x = vec[1, 2, 3]; //~ ERROR expected one of `.`, `?`, `]`, or an operator
+}
diff --git a/src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.stderr b/src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.stderr
new file mode 100644
index 0000000000000..2fe6a28eeb412
--- /dev/null
+++ b/src/test/ui/parser/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.stderr
@@ -0,0 +1,8 @@
+error: expected one of `.`, `?`, `]`, or an operator, found `,`
+  --> $DIR/do-not-suggest-semicolon-between-macro-without-exclamation-mark-and-array.rs:2:19
+   |
+LL |     let _x = vec[1, 2, 3];
+   |                   ^ expected one of `.`, `?`, `]`, or an operator
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/parser/suggest-suggest-semicolon-before-array.fixed b/src/test/ui/parser/suggest-semicolon-before-array.fixed
similarity index 100%
rename from src/test/ui/parser/suggest-suggest-semicolon-before-array.fixed
rename to src/test/ui/parser/suggest-semicolon-before-array.fixed
diff --git a/src/test/ui/parser/suggest-suggest-semicolon-before-array.rs b/src/test/ui/parser/suggest-semicolon-before-array.rs
similarity index 100%
rename from src/test/ui/parser/suggest-suggest-semicolon-before-array.rs
rename to src/test/ui/parser/suggest-semicolon-before-array.rs
diff --git a/src/test/ui/parser/suggest-suggest-semicolon-before-array.stderr b/src/test/ui/parser/suggest-semicolon-before-array.stderr
similarity index 75%
rename from src/test/ui/parser/suggest-suggest-semicolon-before-array.stderr
rename to src/test/ui/parser/suggest-semicolon-before-array.stderr
index bf86b43554d1a..8a33321fbd563 100644
--- a/src/test/ui/parser/suggest-suggest-semicolon-before-array.stderr
+++ b/src/test/ui/parser/suggest-semicolon-before-array.stderr
@@ -1,5 +1,5 @@
 error: expected `;`, found `[`
-  --> $DIR/suggest-suggest-semicolon-before-array.rs:8:5
+  --> $DIR/suggest-semicolon-before-array.rs:8:5
    |
 LL |     [1, 3]
    |     ^