PR fixing wrong order of format parameters in strings. Issue #106572
Adding Adding Fixing small issues for PR Adding tests Removing unused binding Changing the wording on note Fixing PR comment
This commit is contained in:
parent
0b90256ada
commit
f922c8395d
3 changed files with 97 additions and 1 deletions
|
@ -271,7 +271,13 @@ impl<'a> Iterator for Parser<'a> {
|
|||
);
|
||||
}
|
||||
} else {
|
||||
self.suggest_positional_arg_instead_of_captured_arg(arg);
|
||||
if let Some(&(_, maybe)) = self.cur.peek() {
|
||||
if maybe == '?' {
|
||||
self.suggest_format();
|
||||
} else {
|
||||
self.suggest_positional_arg_instead_of_captured_arg(arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
Some(NextArgument(Box::new(arg)))
|
||||
}
|
||||
|
@ -823,6 +829,27 @@ impl<'a> Parser<'a> {
|
|||
if found { Some(cur) } else { None }
|
||||
}
|
||||
|
||||
fn suggest_format(&mut self) {
|
||||
if let (Some(pos), Some(_)) = (self.consume_pos('?'), self.consume_pos(':')) {
|
||||
let word = self.word();
|
||||
let _end = self.current_pos();
|
||||
let pos = self.to_span_index(pos);
|
||||
self.errors.insert(
|
||||
0,
|
||||
ParseError {
|
||||
description: "expected format parameter to occur after `:`".to_owned(),
|
||||
note: Some(
|
||||
format!("`?` comes after `:`, try `{}:{}` instead", word, "?").to_owned(),
|
||||
),
|
||||
label: "expected `?` to occur after `:`".to_owned(),
|
||||
span: pos.to(pos),
|
||||
secondary_label: None,
|
||||
should_be_replaced_with_positional_argument: false,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn suggest_positional_arg_instead_of_captured_arg(&mut self, arg: Argument<'a>) {
|
||||
if let Some(end) = self.consume_pos('.') {
|
||||
let byte_pos = self.to_span_index(end);
|
||||
|
|
15
tests/ui/fmt/format-string-wrong-order.rs
Normal file
15
tests/ui/fmt/format-string-wrong-order.rs
Normal file
|
@ -0,0 +1,15 @@
|
|||
fn main() {
|
||||
let bar = 3;
|
||||
format!("{?:}", bar);
|
||||
//~^ ERROR invalid format string: expected format parameter to occur after `:`
|
||||
format!("{?:bar}");
|
||||
//~^ ERROR invalid format string: expected format parameter to occur after `:`
|
||||
format!("{?:?}", bar);
|
||||
//~^ ERROR invalid format string: expected format parameter to occur after `:`
|
||||
format!("{??}", bar);
|
||||
//~^ ERROR invalid format string: expected `'}'`, found `'?'`
|
||||
format!("{?;bar}");
|
||||
//~^ ERROR invalid format string: expected `'}'`, found `'?'`
|
||||
format!("{?:#?}", bar);
|
||||
//~^ ERROR invalid format string: expected format parameter to occur after `:`
|
||||
}
|
54
tests/ui/fmt/format-string-wrong-order.stderr
Normal file
54
tests/ui/fmt/format-string-wrong-order.stderr
Normal file
|
@ -0,0 +1,54 @@
|
|||
error: invalid format string: expected format parameter to occur after `:`
|
||||
--> $DIR/format-string-wrong-order.rs:3:15
|
||||
|
|
||||
LL | format!("{?:}", bar);
|
||||
| ^ expected `?` to occur after `:` in format string
|
||||
|
|
||||
= note: `?` comes after `:`, try `:?` instead
|
||||
|
||||
error: invalid format string: expected format parameter to occur after `:`
|
||||
--> $DIR/format-string-wrong-order.rs:5:15
|
||||
|
|
||||
LL | format!("{?:bar}");
|
||||
| ^ expected `?` to occur after `:` in format string
|
||||
|
|
||||
= note: `?` comes after `:`, try `bar:?` instead
|
||||
|
||||
error: invalid format string: expected format parameter to occur after `:`
|
||||
--> $DIR/format-string-wrong-order.rs:7:15
|
||||
|
|
||||
LL | format!("{?:?}", bar);
|
||||
| ^ expected `?` to occur after `:` in format string
|
||||
|
|
||||
= note: `?` comes after `:`, try `:?` instead
|
||||
|
||||
error: invalid format string: expected `'}'`, found `'?'`
|
||||
--> $DIR/format-string-wrong-order.rs:9:15
|
||||
|
|
||||
LL | format!("{??}", bar);
|
||||
| -^ expected `}` in format string
|
||||
| |
|
||||
| because of this opening brace
|
||||
|
|
||||
= note: if you intended to print `{`, you can escape it using `{{`
|
||||
|
||||
error: invalid format string: expected `'}'`, found `'?'`
|
||||
--> $DIR/format-string-wrong-order.rs:11:15
|
||||
|
|
||||
LL | format!("{?;bar}");
|
||||
| -^ expected `}` in format string
|
||||
| |
|
||||
| because of this opening brace
|
||||
|
|
||||
= note: if you intended to print `{`, you can escape it using `{{`
|
||||
|
||||
error: invalid format string: expected format parameter to occur after `:`
|
||||
--> $DIR/format-string-wrong-order.rs:13:15
|
||||
|
|
||||
LL | format!("{?:#?}", bar);
|
||||
| ^ expected `?` to occur after `:` in format string
|
||||
|
|
||||
= note: `?` comes after `:`, try `:?` instead
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
Loading…
Add table
Reference in a new issue