Skip to content

Commit bbc659d

Browse files
committed
Fix format string grammar in docs and improve alignment error message
1 parent f56eafa commit bbc659d

File tree

6 files changed

+36
-9
lines changed

6 files changed

+36
-9
lines changed

compiler/rustc_parse_format/src/lib.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -858,8 +858,14 @@ impl<'input> Parser<'input> {
858858
self.errors.insert(
859859
0,
860860
ParseError {
861-
description: "expected format parameter to occur after `:`".to_owned(),
862-
note: None,
861+
description: format!(
862+
"expected `{}` (alignment specifier) after `:` in format string; example: `{{:>#X5}}`",
863+
alignment
864+
),
865+
note: Some(
866+
"alignment must be one of `<` (left), `^` (center), or `>` (right)"
867+
.to_string(),
868+
),
863869
label: format!("expected `{}` to occur after `:`", alignment),
864870
span: range,
865871
secondary_label: None,

library/alloc/src/fmt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@
354354
//! sign := '+' | '-'
355355
//! width := count
356356
//! precision := count | '*'
357-
//! type := '?' | 'x?' | 'X?' | identifier
357+
//! type := '?' | 'x' | 'X' | 'x?' | 'X?' | 'o' | 'b' | 'e' | 'E' | 'p'
358358
//! count := parameter | integer
359359
//! parameter := argument '$'
360360
//! ```
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fn main() {
2+
// INVALID: alignment (`>18`) comes after `#X`, should be `:>#18X`
3+
println!("{0:#X>18}", 12345);
4+
//~^ ERROR invalid format string: expected `>` (alignment specifier) after `:` in format string
5+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
error: invalid format string: expected `>` (alignment specifier) after `:` in format string; example: `{:>#X5}`
2+
--> $DIR/format-alignment-hash.rs:3:20
3+
|
4+
LL | println!("{0:#X>18}", 12345);
5+
| ^ expected `>` to occur after `:` in format string
6+
|
7+
= note: alignment must be one of `<` (left), `^` (center), or `>` (right)
8+
9+
error: aborting due to 1 previous error
10+

tests/ui/fmt/format-string-wrong-order.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ fn main() {
1313
format!("{?:#?}", bar);
1414
//~^ ERROR invalid format string: expected format parameter to occur after `:`
1515
format!("Hello {<5:}!", "x");
16-
//~^ ERROR invalid format string: expected format parameter to occur after `:`
16+
//~^ ERROR invalid format string: expected `<` (alignment specifier) after `:` in format string; example: `{:>#X5}`
1717
format!("Hello {^5:}!", "x");
18-
//~^ ERROR invalid format string: expected format parameter to occur after `:`
18+
//~^ ERROR invalid format string: expected `^` (alignment specifier) after `:` in format string; example: `{:>#X5}`
1919
format!("Hello {>5:}!", "x");
20-
//~^ ERROR invalid format string: expected format parameter to occur after `:`
20+
//~^ ERROR invalid format string: expected `>` (alignment specifier) after `:` in format string; example: `{:>#X5}`
2121
}

tests/ui/fmt/format-string-wrong-order.stderr

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,29 @@ LL | format!("{?:#?}", bar);
5050
|
5151
= note: `?` comes after `:`, try `:?` instead
5252

53-
error: invalid format string: expected format parameter to occur after `:`
53+
error: invalid format string: expected `<` (alignment specifier) after `:` in format string; example: `{:>#X5}`
5454
--> $DIR/format-string-wrong-order.rs:15:21
5555
|
5656
LL | format!("Hello {<5:}!", "x");
5757
| ^ expected `<` to occur after `:` in format string
58+
|
59+
= note: alignment must be one of `<` (left), `^` (center), or `>` (right)
5860

59-
error: invalid format string: expected format parameter to occur after `:`
61+
error: invalid format string: expected `^` (alignment specifier) after `:` in format string; example: `{:>#X5}`
6062
--> $DIR/format-string-wrong-order.rs:17:21
6163
|
6264
LL | format!("Hello {^5:}!", "x");
6365
| ^ expected `^` to occur after `:` in format string
66+
|
67+
= note: alignment must be one of `<` (left), `^` (center), or `>` (right)
6468

65-
error: invalid format string: expected format parameter to occur after `:`
69+
error: invalid format string: expected `>` (alignment specifier) after `:` in format string; example: `{:>#X5}`
6670
--> $DIR/format-string-wrong-order.rs:19:21
6771
|
6872
LL | format!("Hello {>5:}!", "x");
6973
| ^ expected `>` to occur after `:` in format string
74+
|
75+
= note: alignment must be one of `<` (left), `^` (center), or `>` (right)
7076

7177
error: aborting due to 9 previous errors
7278

0 commit comments

Comments
 (0)