about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-09-12 02:05:07 +0200
committerFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-09-12 02:05:07 +0200
commit2bff77d255b9960489459157900a95a6e5a8279f (patch)
treeacb1df952727728eb624c3493e99cd77dcdabd3b /src/test
parent497ee321af3b8496eaccd7af7b437f18bab81abf (diff)
downloadrust-2bff77d255b9960489459157900a95a6e5a8279f.tar.gz
rust-2bff77d255b9960489459157900a95a6e5a8279f.zip
Fix suggestion for nested struct patterns
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/suggestions/ignore-nested-field-binding.fixed20
-rw-r--r--src/test/ui/suggestions/ignore-nested-field-binding.rs20
-rw-r--r--src/test/ui/suggestions/ignore-nested-field-binding.stderr20
3 files changed, 60 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/ignore-nested-field-binding.fixed b/src/test/ui/suggestions/ignore-nested-field-binding.fixed
new file mode 100644
index 00000000000..1dc44838e8b
--- /dev/null
+++ b/src/test/ui/suggestions/ignore-nested-field-binding.fixed
@@ -0,0 +1,20 @@
+// Regression test for #88403, where prefixing with an underscore was
+// erroneously suggested for a nested shorthand struct field binding.
+
+// run-rustfix
+#![allow(unused)]
+#![forbid(unused_variables)]
+
+struct Inner { i: i32 }
+struct Outer { o: Inner }
+
+fn foo(Outer { o: Inner { i: _ } }: Outer) {}
+//~^ ERROR: unused variable: `i`
+//~| HELP: try ignoring the field
+
+fn main() {
+    let s = Outer { o: Inner { i: 42 } };
+    let Outer { o: Inner { i: _ } } = s;
+    //~^ ERROR: unused variable: `i`
+    //~| HELP: try ignoring the field
+}
diff --git a/src/test/ui/suggestions/ignore-nested-field-binding.rs b/src/test/ui/suggestions/ignore-nested-field-binding.rs
new file mode 100644
index 00000000000..6dc0263ec9f
--- /dev/null
+++ b/src/test/ui/suggestions/ignore-nested-field-binding.rs
@@ -0,0 +1,20 @@
+// Regression test for #88403, where prefixing with an underscore was
+// erroneously suggested for a nested shorthand struct field binding.
+
+// run-rustfix
+#![allow(unused)]
+#![forbid(unused_variables)]
+
+struct Inner { i: i32 }
+struct Outer { o: Inner }
+
+fn foo(Outer { o: Inner { i } }: Outer) {}
+//~^ ERROR: unused variable: `i`
+//~| HELP: try ignoring the field
+
+fn main() {
+    let s = Outer { o: Inner { i: 42 } };
+    let Outer { o: Inner { i } } = s;
+    //~^ ERROR: unused variable: `i`
+    //~| HELP: try ignoring the field
+}
diff --git a/src/test/ui/suggestions/ignore-nested-field-binding.stderr b/src/test/ui/suggestions/ignore-nested-field-binding.stderr
new file mode 100644
index 00000000000..b2936a22a22
--- /dev/null
+++ b/src/test/ui/suggestions/ignore-nested-field-binding.stderr
@@ -0,0 +1,20 @@
+error: unused variable: `i`
+  --> $DIR/ignore-nested-field-binding.rs:11:27
+   |
+LL | fn foo(Outer { o: Inner { i } }: Outer) {}
+   |                           ^ help: try ignoring the field: `i: _`
+   |
+note: the lint level is defined here
+  --> $DIR/ignore-nested-field-binding.rs:6:11
+   |
+LL | #![forbid(unused_variables)]
+   |           ^^^^^^^^^^^^^^^^
+
+error: unused variable: `i`
+  --> $DIR/ignore-nested-field-binding.rs:17:28
+   |
+LL |     let Outer { o: Inner { i } } = s;
+   |                            ^ help: try ignoring the field: `i: _`
+
+error: aborting due to 2 previous errors
+