diff options
| author | bors <bors@rust-lang.org> | 2024-10-14 16:38:40 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-10-14 16:38:40 +0000 |
| commit | 9322d183f45e0fd5a509820874cc5ff27744a479 (patch) | |
| tree | 1a426b7f4794666ac3e1b2e9739c812b3b3fd211 /compiler/rustc_builtin_macros/src | |
| parent | 17a19e684cdf3ca088af8b4da6a6209d128913f4 (diff) | |
| parent | ac9b21281e7f133c9a92a6a5d6ef7c8f3d61f0b9 (diff) | |
| download | rust-9322d183f45e0fd5a509820874cc5ff27744a479.tar.gz rust-9322d183f45e0fd5a509820874cc5ff27744a479.zip | |
Auto merge of #131690 - matthiaskrgr:rollup-mcau4ol, r=matthiaskrgr
Rollup of 8 pull requests Successful merges: - #129424 (Stabilize `Pin::as_deref_mut()`) - #131332 (Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly) - #131384 (Update precondition tests (especially for zero-size access to null)) - #131430 (Special treatment empty tuple when suggest adding a string literal in format macro.) - #131550 (Make some tweaks to extern block diagnostics) - #131667 (Fix AArch64InlineAsmReg::emit) - #131679 (compiletest: Document various parts of compiletest's `lib.rs`) - #131682 (Tag PRs affecting compiletest with `A-compiletest`) Failed merges: - #131496 (Stabilise `const_make_ascii`.) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_builtin_macros/src')
| -rw-r--r-- | compiler/rustc_builtin_macros/src/format.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/compiler/rustc_builtin_macros/src/format.rs b/compiler/rustc_builtin_macros/src/format.rs index 9501e93bad5..32730ac3867 100644 --- a/compiler/rustc_builtin_macros/src/format.rs +++ b/compiler/rustc_builtin_macros/src/format.rs @@ -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", |
