rust/compiler
Manish Goregaokar d388428aaa
Rollup merge of #89340 - FabianWolff:issue-89173, r=petrochenkov
Improve error message for `printf`-style format strings

Fixes #89173. The following is actually supported today:
```rust
fn main() {
    let num = 5;
    let width = 20;
    print!("%*2$x", num, width);
}
```
```
error: multiple unused formatting arguments
 --> src/main.rs:4:21
  |
4 |     print!("%*2$x", num, width);
  |            -------  ^^^  ^^^^^ argument never used
  |            ||       |
  |            ||       argument never used
  |            |help: format specifiers use curly braces: `{:1$x}`
  |            multiple missing formatting specifiers
  |
  = note: printf formatting not supported; see the documentation for `std::fmt`
```
However, as noted in #89173, something like
```rust
    print!("%0*x", width, num);
```
does not give a helpful suggestion. I think this is partly intended, because there actually _is_ no Rust equivalent to this; you always have to use a positional or named argument to specify the width (instead of just using the "next" argument, as `printf` or even `.*` as a precision specifier in Rust would). Therefore, I have added a note:
```
[...]
note: format specifiers use curly braces, and you have to use a positional or named parameter for the width
 --> t2.rs:4:13
  |
4 |     print!("%0*x", width, num);
  |             ^^^^
  = note: printf formatting not supported; see the documentation for `std::fmt`
```
This is not perfect, but it should at least point the user in the right direction, instead of issuing no explanation at all.

cc ```@lcnr```
2021-10-01 09:18:19 -07:00
..
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-30 20:22:42 +02:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-28 12:28:22 +00:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00
2021-09-20 22:21:42 -04:00