1
Fork 0

diagnostics: mention the : token when struct fields fail to parse

This commit is contained in:
Michael Howell 2022-07-07 14:59:54 -07:00
parent 0f573a0c54
commit d496a4f8bb
5 changed files with 12 additions and 7 deletions

View file

@ -3012,6 +3012,11 @@ impl<'a> Parser<'a> {
} }
}; };
let is_shorthand = parsed_field.as_ref().map_or(false, |f| f.ident.span == f.expr.span);
// A shorthand field can be turned into a full field with `:`.
// We should point this out.
self.check_or_expected(!is_shorthand, TokenType::Token(token::Colon));
match self.expect_one_of(&[token::Comma], &[token::CloseDelim(close_delim)]) { match self.expect_one_of(&[token::Comma], &[token::CloseDelim(close_delim)]) {
Ok(_) => { Ok(_) => {
if let Some(f) = parsed_field.or(recovery_field) { if let Some(f) = parsed_field.or(recovery_field) {

View file

@ -4,11 +4,11 @@ error: float literals must have an integer part
LL | let _ = Foo { bar: .5, baz: 42 }; LL | let _ = Foo { bar: .5, baz: 42 };
| ^^ help: must have an integer part: `0.5` | ^^ help: must have an integer part: `0.5`
error: expected one of `,` or `}`, found `.` error: expected one of `,`, `:`, or `}`, found `.`
--> $DIR/issue-52496.rs:8:22 --> $DIR/issue-52496.rs:8:22
| |
LL | let _ = Foo { bar.into(), bat: -1, . }; LL | let _ = Foo { bar.into(), bat: -1, . };
| --- ^ expected one of `,` or `}` | --- ^ expected one of `,`, `:`, or `}`
| | | |
| while parsing this struct | while parsing this struct

View file

@ -20,11 +20,11 @@ LL |
LL | LL |
| ^ | ^
error: expected one of `,` or `}`, found `{` error: expected one of `,`, `:`, or `}`, found `{`
--> $DIR/issue-62973.rs:6:8 --> $DIR/issue-62973.rs:6:8
| |
LL | fn p() { match s { v, E { [) {) } LL | fn p() { match s { v, E { [) {) }
| ^ - -^ expected one of `,` or `}` | ^ - -^ expected one of `,`, `:`, or `}`
| | | | | | | |
| | | help: `}` may belong here | | | help: `}` may belong here
| | while parsing this struct | | while parsing this struct

View file

@ -6,6 +6,6 @@ fn main() {
let a = S { foo: (), bar: () }; let a = S { foo: (), bar: () };
let b = S { foo: (), with a }; let b = S { foo: (), with a };
//~^ ERROR expected one of `,` or `}`, found `a` //~^ ERROR expected one of `,`, `:`, or `}`, found `a`
//~| ERROR missing field `bar` in initializer of `S` //~| ERROR missing field `bar` in initializer of `S`
} }

View file

@ -1,8 +1,8 @@
error: expected one of `,` or `}`, found `a` error: expected one of `,`, `:`, or `}`, found `a`
--> $DIR/removed-syntax-with-2.rs:8:31 --> $DIR/removed-syntax-with-2.rs:8:31
| |
LL | let b = S { foo: (), with a }; LL | let b = S { foo: (), with a };
| - ^ expected one of `,` or `}` | - ^ expected one of `,`, `:`, or `}`
| | | |
| while parsing this struct | while parsing this struct