Do not complain about unmentioned fields in recovered patterns

When the parser has to recover from malformed code in a pattern, do not
complain about missing fields.
This commit is contained in:
Esteban Küber 2019-03-14 18:28:24 -07:00
parent 7486b9c208
commit 6cd6759cfc
7 changed files with 5 additions and 28 deletions

View File

@ -4698,7 +4698,7 @@ impl<'a> Parser<'a> {
let (fields, etc) = self.parse_pat_fields().unwrap_or_else(|mut e| {
e.emit();
self.recover_stmt();
(vec![], false)
(vec![], true)
});
self.bump();
pat = PatKind::Struct(path, fields, etc);

View File

@ -2,7 +2,6 @@ fn main() {
struct Foo { x: isize }
match (Foo { x: 10 }) {
Foo { ref x: ref x } => {}, //~ ERROR expected `,`
//~| ERROR pattern does not mention field `x`
_ => {}
}
}

View File

@ -4,12 +4,5 @@ error: expected `,`
LL | Foo { ref x: ref x } => {},
| ^
error[E0027]: pattern does not mention field `x`
--> $DIR/bind-struct-early-modifiers.rs:4:9
|
LL | Foo { ref x: ref x } => {},
| ^^^^^^^^^^^^^^^^^^^^ missing field `x`
error: aborting due to previous error
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0027`.

View File

@ -4,5 +4,4 @@ fn a() -> A { panic!() }
fn main() {
let A { , } = a(); //~ ERROR expected ident
//~| ERROR pattern does not mention field `foo`
}

View File

@ -4,12 +4,5 @@ error: expected identifier, found `,`
LL | let A { , } = a();
| ^ expected identifier
error[E0027]: pattern does not mention field `foo`
--> $DIR/issue-10392.rs:6:9
|
LL | let A { , } = a();
| ^^^^^^^ missing field `foo`
error: aborting due to previous error
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0027`.

View File

@ -6,7 +6,7 @@ fn main() {
let thing = MyStruct { s1: None };
match thing {
MyStruct { .., Some(_) } => {}, //~ ERROR pattern does not mention field `s1`
MyStruct { .., Some(_) } => {},
//~^ ERROR expected `,`
//~| ERROR expected `}`, found `,`
_ => {}

View File

@ -13,12 +13,5 @@ error: expected `,`
LL | MyStruct { .., Some(_) } => {},
| ^^^^
error[E0027]: pattern does not mention field `s1`
--> $DIR/issue-54379.rs:9:9
|
LL | MyStruct { .., Some(_) } => {},
| ^^^^^^^^^^^^^^^^^^^^^^^^ missing field `s1`
error: aborting due to 2 previous errors
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0027`.