From 0f82cfffda97be546949f974586d007b51e2b36e Mon Sep 17 00:00:00 2001 From: Esteban Küber Date: Fri, 13 Dec 2024 21:51:33 +0000 Subject: 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 , | | ----- defined here LL | | } | |_- ... LL | if let Website { url, .. } = website { | ^^^^^^^^^^^^^^^^^^^ this pattern doesn't include `title`, which is available in `Website` ``` Fix #74863. --- ...attern-with-missing-fields-resolve-error.stderr | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr (limited to 'tests/ui/pattern/struct-pattern-with-missing-fields-resolve-error.stderr') 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 , + | | ----- 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`. -- cgit 1.4.1-3-g733a5