about summary refs log tree commit diff
path: root/tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2024-12-13 21:51:33 +0000
committerEsteban Küber <esteban@kuber.com.ar>2024-12-13 21:51:33 +0000
commit0f82cfffda97be546949f974586d007b51e2b36e (patch)
tree27e78cf27fae3181e422197ba0f1770be4a0d0aa /tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr
parent21fe748be15271ea5804e0507cd699b675efe038 (diff)
downloadrust-0f82cfffda97be546949f974586d007b51e2b36e.tar.gz
rust-0f82cfffda97be546949f974586d007b51e2b36e.zip
Keep track of patterns that could have introduced a binding, but didn't
When we recover from a pattern parse error, or a pattern uses `..`, we keep track of that and affect resolution error for missing bindings that could have been provided by that pattern. We differentiate between `..` and parse recovery. We silence resolution errors likely caused by the pattern parse error.

```
error[E0425]: cannot find value `title` in this scope
  --> $DIR/struct-pattern-with-missing-fields-resolve-error.rs:19:30
   |
LL |         println!("[{}]({})", title, url);
   |                              ^^^^^ not found in this scope
   |
note: `Website` has a field `title` which could have been included in this pattern, but it wasn't
  --> $DIR/struct-pattern-with-missing-fields-resolve-error.rs:17:12
   |
LL | / struct Website {
LL | |     url: String,
LL | |     title: Option<String> ,
   | |     ----- defined here
LL | | }
   | |_-
...
LL |       if let Website { url, .. } = website {
   |              ^^^^^^^^^^^^^^^^^^^ this pattern doesn't include `title`, which is available in `Website`
```

Fix #74863.
Diffstat (limited to 'tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr')
-rw-r--r--tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr b/tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr
new file mode 100644
index 00000000000..9d2fca8eab9
--- /dev/null
+++ b/tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr
@@ -0,0 +1,30 @@
+error: expected `,`
+  --> $DIR/struct-pattern-with-missing-fields-resolve-error.rs:12:31
+   |
+LL |     if let Website { url, Some(title) } = website {
+   |            -------            ^
+   |            |
+   |            while parsing the fields for this pattern
+
+error[E0425]: cannot find value `title` in this scope
+  --> $DIR/struct-pattern-with-missing-fields-resolve-error.rs:19:30
+   |
+LL |         println!("[{}]({})", title, url);
+   |                              ^^^^^ not found in this scope
+   |
+note: `Website` has a field `title` which could have been included in this pattern, but it wasn't
+  --> $DIR/struct-pattern-with-missing-fields-resolve-error.rs:17:12
+   |
+LL | / struct Website {
+LL | |     url: String,
+LL | |     title: Option<String> ,
+   | |     ----- defined here
+LL | | }
+   | |_-
+...
+LL |       if let Website { url, .. } = website {
+   |              ^^^^^^^^^^^^^^^^^^^ this pattern doesn't include `title`, which is available in `Website`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0425`.