Previously:
error: invalid format string: invalid argument name `_x`
--> src/main.rs:2:16
|
2 | println!("{_x}", a=0);
| ^^ invalid argument name in format string
|
= note: argument names cannot start with an underscore
Not supporting identifiers starting with underscore appears to have been
an arbitrary limitation from 2013 in code that was most likely never
reviewed:
https://github.com/rust-lang/rust/pull/8245/files#diff-0347868ef389c805e97636623e4a4ea6R277
The error message was dutifully improved in #50610 but is there any
reason that leading underscore would be a special case?
This commit updates the format_args parser to accept identifiers with
leading underscores.
56 lines
1.3 KiB
Rust
56 lines
1.3 KiB
Rust
// ignore-tidy-tab
|
|
|
|
fn main() {
|
|
println!("{");
|
|
//~^ ERROR invalid format string: expected `'}'` but string was terminated
|
|
println!("{{}}");
|
|
println!("}");
|
|
//~^ ERROR invalid format string: unmatched `}` found
|
|
let _ = format!("{_}", _ = 6usize);
|
|
//~^ ERROR invalid format string: invalid argument name `_`
|
|
let _ = format!("{a:_}", a = "", _ = 0);
|
|
//~^ ERROR invalid format string: invalid argument name `_`
|
|
let _ = format!("{a:._$}", a = "", _ = 0);
|
|
//~^ ERROR invalid format string: invalid argument name `_`
|
|
let _ = format!("{");
|
|
//~^ ERROR invalid format string: expected `'}'` but string was terminated
|
|
let _ = format!("}");
|
|
//~^ ERROR invalid format string: unmatched `}` found
|
|
let _ = format!("{\\}");
|
|
//~^ ERROR invalid format string: expected `'}'`, found `'\\'`
|
|
let _ = format!("\n\n\n{\n\n\n");
|
|
//~^ ERROR invalid format string
|
|
let _ = format!(r###"
|
|
|
|
|
|
|
|
{"###);
|
|
//~^ ERROR invalid format string
|
|
let _ = format!(r###"
|
|
|
|
|
|
|
|
{
|
|
|
|
"###);
|
|
//~^ ERROR invalid format string
|
|
let _ = format!(r###"
|
|
|
|
|
|
|
|
}
|
|
|
|
"###);
|
|
//~^^^ ERROR invalid format string
|
|
let _ = format!(r###"
|
|
|
|
|
|
|
|
}
|
|
|
|
"###);
|
|
//~^^^ ERROR invalid format string: unmatched `}` found
|
|
println!("{} {} {}", 1, 2);
|
|
//~^ ERROR 3 positional arguments in format string, but there are 2 arguments
|
|
}
|