Rollup merge of #146456 - IoaNNUwU:issue-146446, r=estebank

Fix panic and incorrectly suggested examples in `format_args` macro.

Follow up on rust-lang/rust#146123
Fixes: rust-lang/rust#146446
r? `@estebank`
This commit is contained in:
Jacob Pratt 2025-09-13 03:26:03 -04:00 committed by GitHub
commit c4539b2d58
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 87 additions and 5 deletions

View file

@ -569,6 +569,7 @@ fn make_format_args(
detect_foreign_fmt,
str_style,
fmt_str,
uncooked_fmt_str.1.as_str(),
fmt_span,
);
}
@ -650,6 +651,7 @@ fn report_missing_placeholders(
detect_foreign_fmt: bool,
str_style: Option<usize>,
fmt_str: &str,
uncooked_fmt_str: &str,
fmt_span: Span,
) {
let mut diag = if let &[(span, named)] = &unused[..] {
@ -773,16 +775,20 @@ fn report_missing_placeholders(
diag.note(format!("consider adding {} format specifiers", unused.len()));
}
} else {
let original_fmt_str =
if fmt_str.len() >= 1 { &fmt_str[..fmt_str.len() - 1] } else { "" };
let msg = if unused.len() == 1 {
"a format specifier".to_string()
} else {
format!("{} format specifiers", unused.len())
};
let sugg = format!("\"{}{}\"", original_fmt_str, "{}".repeat(unused.len()));
let sugg = match str_style {
None => format!("\"{}{}\"", uncooked_fmt_str, "{}".repeat(unused.len())),
Some(n_hashes) => format!(
"r{hashes}\"{uncooked_fmt_str}{fmt_specifiers}\"{hashes}",
hashes = "#".repeat(n_hashes),
fmt_specifiers = "{}".repeat(unused.len())
),
};
let msg = format!("format specifiers use curly braces, consider adding {msg}");
diag.span_suggestion_verbose(fmt_span, msg, sugg, Applicability::MaybeIncorrect);

View file

@ -32,4 +32,33 @@ fn missing_format_specifiers_multiple_unused_args() {
//~| NOTE consider adding 2 format specifiers
}
fn unicode_unused_args() {
panic!("👆", "👆", 1);
//~^ ERROR multiple unused formatting arguments
//~| NOTE multiple missing formatting specifiers
//~| NOTE argument never used
//~| NOTE argument never used
//~| HELP format specifiers use curly braces, consider adding 2 format specifiers
}
fn raw_str_unused_arg() {
format_args!(r##"lJ𐏿Æ<F0908FBF>.𐏿<>"##, r#"r}J𐏿Æ" {}"#, 1);
//~^ ERROR multiple unused formatting arguments
//~| NOTE multiple missing formatting specifiers
//~| NOTE argument never used
//~| NOTE argument never used
//~| HELP format specifiers use curly braces, consider adding 2 format specifiers
}
fn valid_new_lines_unused_args() {
panic!("Expect 2 newlines
", "👆", 1);
//~^ ERROR multiple unused formatting arguments
//~| NOTE argument never used
//~| NOTE argument never used
//~^^^^^^ NOTE multiple missing formatting specifiers
//~| HELP format specifiers use curly braces, consider adding 2 format specifiers
}
fn main() { }

View file

@ -45,5 +45,52 @@ LL | println!("list: {}", 1, 2, 3);
|
= note: consider adding 2 format specifiers
error: aborting due to 4 previous errors
error: multiple unused formatting arguments
--> $DIR/missing-format-specifiers-issue-68293.rs:36:17
|
LL | panic!("👆", "👆", 1);
| ---- ^^^^ ^ argument never used
| | |
| | argument never used
| multiple missing formatting specifiers
|
help: format specifiers use curly braces, consider adding 2 format specifiers
|
LL | panic!("👆{}{}", "👆", 1);
| ++++
error: multiple unused formatting arguments
--> $DIR/missing-format-specifiers-issue-68293.rs:45:35
|
LL | format_args!(r##"lJ𐏿Æ<F0908FBF>.𐏿<>"##, r#"r}J𐏿Æ" {}"#, 1);
| --------------- ^^^^^^^^^^^^^^ ^ argument never used
| | |
| | argument never used
| multiple missing formatting specifiers
|
help: format specifiers use curly braces, consider adding 2 format specifiers
|
LL | format_args!(r##"lJ𐏿Æ<F0908FBF>.𐏿<>{}{}"##, r#"r}J𐏿Æ" {}"#, 1);
| ++++
error: multiple unused formatting arguments
--> $DIR/missing-format-specifiers-issue-68293.rs:56:4
|
LL | panic!("Expect 2 newlines
| ____________-
LL | |
LL | | ", "👆", 1);
| | - ^^^^ ^ argument never used
| | | |
| |_| argument never used
| multiple missing formatting specifiers
|
help: format specifiers use curly braces, consider adding 2 format specifiers
|
LL | panic!("Expect 2 newlines
LL |
LL ~ {}{}", "👆", 1);
|
error: aborting due to 7 previous errors