Special treatment empty tuple when suggest adding a string literal in format macro.
For example: ```rust let s = "123"; println!({}, "sss", s); ``` Suggest: `println!("{:?} {} {}", {}, "sss", s);` fixes #130170
This commit is contained in:
parent
1b5aa96d60
commit
ceced5322c
4 changed files with 90 additions and 4 deletions
|
@ -195,12 +195,26 @@ fn make_format_args(
|
|||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
} else {
|
||||
let sugg_fmt = match args.explicit_args().len() {
|
||||
0 => "{}".to_string(),
|
||||
count => {
|
||||
format!("{}{{}}", "{} ".repeat(count))
|
||||
// `{}` or `()`
|
||||
let should_suggest = |kind: &ExprKind| -> bool {
|
||||
match kind {
|
||||
ExprKind::Block(b, None) if b.stmts.is_empty() => true,
|
||||
ExprKind::Tup(v) if v.is_empty() => true,
|
||||
_ => false,
|
||||
}
|
||||
};
|
||||
|
||||
let mut sugg_fmt = String::new();
|
||||
for kind in std::iter::once(&efmt.kind)
|
||||
.chain(args.explicit_args().into_iter().map(|a| &a.expr.kind))
|
||||
{
|
||||
sugg_fmt.push_str(if should_suggest(kind) {
|
||||
"{:?} "
|
||||
} else {
|
||||
"{} "
|
||||
});
|
||||
}
|
||||
sugg_fmt = sugg_fmt.trim_end().to_string();
|
||||
err.span_suggestion(
|
||||
unexpanded_fmt_span.shrink_to_lo(),
|
||||
"you might be missing a string literal to format with",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue