diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-10-24 20:20:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-24 20:20:05 +0200 |
| commit | 1e4a2ee6d5b7b353d5d0956882dabc89c15ecbb6 (patch) | |
| tree | e1f72da4abf9d64687cff291b6c126b16e4c41cf /src/libsyntax_ext/format.rs | |
| parent | efa50378d592b8fdc0eeb8ac48a453e0f1babacf (diff) | |
| parent | 8467ceff22477fe567883e6fbd810e0f9e220686 (diff) | |
| download | rust-1e4a2ee6d5b7b353d5d0956882dabc89c15ecbb6.tar.gz rust-1e4a2ee6d5b7b353d5d0956882dabc89c15ecbb6.zip | |
Rollup merge of #65746 - estebank:newcomer-format, r=Centril
Tweak format string error to point at arguments always
Add secondary span labels with no text to make it clear when there's a
mismatch bewteen the positional arguments in a format string and the
arguments to the macro. This shouldn't affect experienced users, but it
should make it easier for newcomers to more clearly understand how
`format!()` and `println!()` are supposed to be used.
```
error: 2 positional arguments in format string, but there is 1 argument
--> file8.rs:2:14
|
2 | format!("{} {}", 1);
| ^^ ^^ -
```
instead of
```
error: 2 positional arguments in format string, but there is 1 argument
--> file8.rs:2:14
|
2 | format!("{} {}", 1);
| ^^ ^^
```
r? @Centril
Diffstat (limited to 'src/libsyntax_ext/format.rs')
| -rw-r--r-- | src/libsyntax_ext/format.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libsyntax_ext/format.rs b/src/libsyntax_ext/format.rs index 45d9f79c28f..37310f46f7e 100644 --- a/src/libsyntax_ext/format.rs +++ b/src/libsyntax_ext/format.rs @@ -278,7 +278,7 @@ impl<'a, 'b> Context<'a, 'b> { /// format string. fn report_invalid_references(&self, numbered_position_args: bool) { let mut e; - let sp = if self.is_literal { + let sp = if self.is_literal { // Point at the formatting arguments. MultiSpan::from_spans(self.arg_spans.clone()) } else { MultiSpan::from_span(self.fmtsp) @@ -304,6 +304,9 @@ impl<'a, 'b> Context<'a, 'b> { self.describe_num_args(), ), ); + for arg in &self.args { // Point at the arguments that will be formatted. + e.span_label(arg.span, ""); + } } else { let (mut refs, spans): (Vec<_>, Vec<_>) = refs.unzip(); // Avoid `invalid reference to positional arguments 7 and 7 (there is 1 argument)` |
