about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-12-15 04:40:26 +0100
committerMazdak Farrokhzad <twingoow@gmail.com>2019-12-23 14:47:20 +0100
commitc37bd26eaa350d2837dfc50412a823142405307f (patch)
treedfa9011e8239d8741c6c388c473f33dcbd8c410e
parente39abcfad905ec8002e826f57656b82475b60c5a (diff)
downloadrust-c37bd26eaa350d2837dfc50412a823142405307f.tar.gz
rust-c37bd26eaa350d2837dfc50412a823142405307f.zip
Test that `_ @ subpat` is syntactically rejected.
-rw-r--r--src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.rs16
-rw-r--r--src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.stderr43
2 files changed, 59 insertions, 0 deletions
diff --git a/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.rs b/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.rs
new file mode 100644
index 00000000000..50ac0ef2783
--- /dev/null
+++ b/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.rs
@@ -0,0 +1,16 @@
+// Here we check that `_ @ sub` is syntactically invalid
+// and comes with a nice actionable suggestion.
+
+fn main() {}
+
+#[cfg(FALSE)]
+fn wild_before_at_is_bad_syntax() {
+    let _ @ a = 0;
+    //~^ ERROR pattern on wrong side of `@`
+    let _ @ ref a = 0;
+    //~^ ERROR pattern on wrong side of `@`
+    let _ @ ref mut a = 0;
+    //~^ ERROR pattern on wrong side of `@`
+    let _ @ (a, .., b) = (0, 1, 2, 3);
+    //~^ ERROR left-hand side of `@` must be a binding
+}
diff --git a/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.stderr b/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.stderr
new file mode 100644
index 00000000000..2f45415844d
--- /dev/null
+++ b/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.stderr
@@ -0,0 +1,43 @@
+error: pattern on wrong side of `@`
+  --> $DIR/wild-before-at-syntactically-rejected.rs:8:9
+   |
+LL |     let _ @ a = 0;
+   |         -^^^-
+   |         |   |
+   |         |   binding on the right, should be on the left
+   |         pattern on the left, should be on the right
+   |         help: switch the order: `a @ _`
+
+error: pattern on wrong side of `@`
+  --> $DIR/wild-before-at-syntactically-rejected.rs:10:9
+   |
+LL |     let _ @ ref a = 0;
+   |         -^^^-----
+   |         |   |
+   |         |   binding on the right, should be on the left
+   |         pattern on the left, should be on the right
+   |         help: switch the order: `ref a @ _`
+
+error: pattern on wrong side of `@`
+  --> $DIR/wild-before-at-syntactically-rejected.rs:12:9
+   |
+LL |     let _ @ ref mut a = 0;
+   |         -^^^---------
+   |         |   |
+   |         |   binding on the right, should be on the left
+   |         pattern on the left, should be on the right
+   |         help: switch the order: `ref mut a @ _`
+
+error: left-hand side of `@` must be a binding
+  --> $DIR/wild-before-at-syntactically-rejected.rs:14:9
+   |
+LL |     let _ @ (a, .., b) = (0, 1, 2, 3);
+   |         -^^^----------
+   |         |   |
+   |         |   also a pattern
+   |         interpreted as a pattern, not a binding
+   |
+   = note: bindings are `x`, `mut x`, `ref x`, and `ref mut x`
+
+error: aborting due to 4 previous errors
+