]> git.lizzy.rs Git - rust.git/commitdiff
Rollup merge of #82287 - r00ster91:field_name_and, r=petrochenkov
authorYuki Okushi <huyuumi.dev@gmail.com>
Mon, 22 Feb 2021 09:26:07 +0000 (18:26 +0900)
committerGitHub <noreply@github.com>
Mon, 22 Feb 2021 09:26:07 +0000 (18:26 +0900)
Make "missing field" error message more natural

```rust
struct A {
    x: i32,
    y: i32,
    z: i32,
}

fn main() {
    A { };
}
```
```
error[E0063]: missing fields `x`, `y`, `z` in initializer of `A`
 --> src/main.rs:8:5
  |
8 |     A { };
  |     ^ missing `x`, `y`, `z`
```
This error is now:
```
error[E0063]: missing fields `x`, `y` and `z` in initializer of `A`
 --> src/main.rs:8:5
  |
8 |     A { };
  |     ^ missing `x`, `y` and `z`
```
I thought it looked nicer and more natural this way. Also, if there is >3 fields missing, there is an "and" as well ("missing \`x\`, \`y\`, \`z\` *and* 1 other field"), but for <=3 there is not. As such it improves consistency too.

As for the implementation, originally I ended up with a chunky `push_str` algorithm but then I figured I could just do the formatting manually since it's just 3 field names at maximum. It is comparatively readable.

As a sidenote, one thing I was wondering about is, isn't there more cases where you have a list of things like field names? Maybe this whole thing can at some point later be made into a more general function to be used in multiple areas.

1  2 
compiler/rustc_typeck/src/check/expr.rs