Rollup merge of #104504 - compiler-errors:fru-syntax-note, r=estebank
Add a detailed note for missing comma typo w/ FRU syntax Thanks to `@pierwill` for working on this with me! Fixes #104373, perhaps `@alice-i-cecile` can comment on the new error for the example provided on that issue -- feedback is welcome. ``` error[E0063]: missing field `defaulted` in initializer of `Outer` --> $DIR/multi-line-fru-suggestion.rs:14:5 | LL | Outer { | ^^^^^ missing `defaulted` | note: this expression may have been misinterpreted as a `..` range expression --> $DIR/multi-line-fru-suggestion.rs:16:16 | LL | inner: Inner { | ________________^ LL | | a: 1, LL | | b: 2, LL | | } | |_________^ this expression does not end in a comma... LL | ..Default::default() | ^^^^^^^^^^^^^^^^^^^^ ... so this is interpreted as a `..` range expression, instead of functional record update syntax help: to set the remaining fields from `Default::default()`, separate the last named field with a comma | LL | }, | + error: aborting due to previous error For more information about this error, try `rustc --explain E0063`. ```
This commit is contained in:
commit
fce077b053
10 changed files with 155 additions and 31 deletions
22
src/test/ui/structs/multi-line-fru-suggestion.rs
Normal file
22
src/test/ui/structs/multi-line-fru-suggestion.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#[derive(Default)]
|
||||
struct Inner {
|
||||
a: u8,
|
||||
b: u8,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct Outer {
|
||||
inner: Inner,
|
||||
defaulted: u8,
|
||||
}
|
||||
|
||||
fn main(){
|
||||
Outer {
|
||||
//~^ ERROR missing field `defaulted` in initializer of `Outer`
|
||||
inner: Inner {
|
||||
a: 1,
|
||||
b: 2,
|
||||
}
|
||||
..Default::default()
|
||||
};
|
||||
}
|
||||
25
src/test/ui/structs/multi-line-fru-suggestion.stderr
Normal file
25
src/test/ui/structs/multi-line-fru-suggestion.stderr
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
error[E0063]: missing field `defaulted` in initializer of `Outer`
|
||||
--> $DIR/multi-line-fru-suggestion.rs:14:5
|
||||
|
|
||||
LL | Outer {
|
||||
| ^^^^^ missing `defaulted`
|
||||
|
|
||||
note: this expression may have been misinterpreted as a `..` range expression
|
||||
--> $DIR/multi-line-fru-suggestion.rs:16:16
|
||||
|
|
||||
LL | inner: Inner {
|
||||
| ________________^
|
||||
LL | | a: 1,
|
||||
LL | | b: 2,
|
||||
LL | | }
|
||||
| |_________^ this expression does not end in a comma...
|
||||
LL | ..Default::default()
|
||||
| ^^^^^^^^^^^^^^^^^^^^ ... so this is interpreted as a `..` range expression, instead of functional record update syntax
|
||||
help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
|
||||
|
|
||||
LL | },
|
||||
| +
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0063`.
|
||||
|
|
@ -7,9 +7,8 @@ struct A {
|
|||
}
|
||||
|
||||
fn a() {
|
||||
let q = A { c: 5,..Default::default() };
|
||||
//~^ ERROR mismatched types
|
||||
//~| ERROR missing fields
|
||||
let q = A { c: 5, ..Default::default() };
|
||||
//~^ ERROR missing fields
|
||||
//~| HELP separate the last named field with a comma
|
||||
let r = A { c: 5, ..Default::default() };
|
||||
assert_eq!(q, r);
|
||||
|
|
@ -21,7 +20,7 @@ struct B {
|
|||
}
|
||||
|
||||
fn b() {
|
||||
let q = B { b: 1,..Default::default() };
|
||||
let q = B { b: 1, ..Default::default() };
|
||||
//~^ ERROR mismatched types
|
||||
//~| HELP separate the last named field with a comma
|
||||
let r = B { b: 1 };
|
||||
|
|
|
|||
|
|
@ -8,8 +8,7 @@ struct A {
|
|||
|
||||
fn a() {
|
||||
let q = A { c: 5..Default::default() };
|
||||
//~^ ERROR mismatched types
|
||||
//~| ERROR missing fields
|
||||
//~^ ERROR missing fields
|
||||
//~| HELP separate the last named field with a comma
|
||||
let r = A { c: 5, ..Default::default() };
|
||||
assert_eq!(q, r);
|
||||
|
|
|
|||
|
|
@ -1,37 +1,38 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/struct-record-suggestion.rs:10:20
|
||||
|
|
||||
LL | let q = A { c: 5..Default::default() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ expected `u64`, found struct `std::ops::Range`
|
||||
|
|
||||
= note: expected type `u64`
|
||||
found struct `std::ops::Range<{integer}>`
|
||||
|
||||
error[E0063]: missing fields `b` and `d` in initializer of `A`
|
||||
--> $DIR/struct-record-suggestion.rs:10:13
|
||||
|
|
||||
LL | let q = A { c: 5..Default::default() };
|
||||
| ^ missing `b` and `d`
|
||||
|
|
||||
note: this expression may have been misinterpreted as a `..` range expression
|
||||
--> $DIR/struct-record-suggestion.rs:10:20
|
||||
|
|
||||
LL | let q = A { c: 5..Default::default() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
|
||||
|
|
||||
LL | let q = A { c: 5,..Default::default() };
|
||||
LL | let q = A { c: 5, ..Default::default() };
|
||||
| +
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/struct-record-suggestion.rs:24:20
|
||||
--> $DIR/struct-record-suggestion.rs:23:20
|
||||
|
|
||||
LL | let q = B { b: 1..Default::default() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ expected `u32`, found struct `std::ops::Range`
|
||||
|
|
||||
= note: expected type `u32`
|
||||
found struct `std::ops::Range<{integer}>`
|
||||
note: this expression may have been misinterpreted as a `..` range expression
|
||||
--> $DIR/struct-record-suggestion.rs:23:20
|
||||
|
|
||||
LL | let q = B { b: 1..Default::default() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
|
||||
|
|
||||
LL | let q = B { b: 1,..Default::default() };
|
||||
LL | let q = B { b: 1, ..Default::default() };
|
||||
| +
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0063, E0308.
|
||||
For more information about an error, try `rustc --explain E0063`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue