-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Parser: better error messages for
@
in struct patterns
- Loading branch information
1 parent
8ed95d1
commit 9cd668b
Showing
5 changed files
with
150 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
struct Foo { | ||
field1: u8, | ||
field2: u8, | ||
} | ||
|
||
fn main() { | ||
let foo = Foo { field1: 1, field2: 2 }; | ||
let Foo { var @ field1, .. } = foo; //~ ERROR Unexpected `@` in struct pattern | ||
dbg!(var); //~ ERROR cannot find value `var` in this scope | ||
let Foo { field1: _, bar @ .. } = foo; //~ ERROR `@ ..` is not supported in struct patterns | ||
let Foo { bar @ .. } = foo; //~ ERROR `@ ..` is not supported in struct patterns | ||
let Foo { @ } = foo; //~ ERROR expected identifier, found `@` | ||
let Foo { @ .. } = foo; //~ ERROR expected identifier, found `@` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
error: Unexpected `@` in struct pattern | ||
--> $DIR/at-in-struct-patterns.rs:8:15 | ||
| | ||
LL | let Foo { var @ field1, .. } = foo; | ||
| --- ^^^^^ | ||
| | | ||
| while parsing the fields for this pattern | ||
| | ||
= note: struct patterns use `field: pattern` syntax to bind to fields | ||
= help: consider replacing `new_name @ field_name` with `field_name: new_name` if that is what you intended | ||
|
||
error: `@ ..` is not supported in struct patterns | ||
--> $DIR/at-in-struct-patterns.rs:10:26 | ||
| | ||
LL | let Foo { field1: _, bar @ .. } = foo; | ||
| --- ^^^^^^^^ | ||
| | | ||
| while parsing the fields for this pattern | ||
| | ||
help: bind to each field separately or, if you don't need them, just remove `bar @` | ||
| | ||
LL - let Foo { field1: _, bar @ .. } = foo; | ||
LL + let Foo { field1: _, .. } = foo; | ||
| | ||
|
||
error: `@ ..` is not supported in struct patterns | ||
--> $DIR/at-in-struct-patterns.rs:11:15 | ||
| | ||
LL | let Foo { bar @ .. } = foo; | ||
| --- ^^^^^^^^ | ||
| | | ||
| while parsing the fields for this pattern | ||
| | ||
help: bind to each field separately or, if you don't need them, just remove `bar @` | ||
| | ||
LL - let Foo { bar @ .. } = foo; | ||
LL + let Foo { .. } = foo; | ||
| | ||
|
||
error: expected identifier, found `@` | ||
--> $DIR/at-in-struct-patterns.rs:12:15 | ||
| | ||
LL | let Foo { @ } = foo; | ||
| --- ^ expected identifier | ||
| | | ||
| while parsing the fields for this pattern | ||
|
||
error: expected identifier, found `@` | ||
--> $DIR/at-in-struct-patterns.rs:13:15 | ||
| | ||
LL | let Foo { @ .. } = foo; | ||
| --- ^ expected identifier | ||
| | | ||
| while parsing the fields for this pattern | ||
|
||
error[E0425]: cannot find value `var` in this scope | ||
--> $DIR/at-in-struct-patterns.rs:9:10 | ||
| | ||
LL | dbg!(var); | ||
| ^^^ not found in this scope | ||
| | ||
help: consider importing this function | ||
| | ||
LL + use std::env::var; | ||
| | ||
|
||
error: aborting due to 6 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0425`. |