Fix diagnostics being cancelled even with unused arguments

This commit is contained in:
francorbacho 2023-10-05 14:23:02 +02:00
parent dc75c99226
commit 4a7a98cf30

View File

@ -8,7 +8,9 @@
FormatDebugHex, FormatOptions, FormatPlaceholder, FormatSign, FormatTrait,
};
use rustc_data_structures::fx::FxHashSet;
use rustc_errors::{Applicability, MultiSpan, PResult, SingleLabelManySpans};
use rustc_errors::{
Applicability, DiagnosticBuilder, ErrorGuaranteed, MultiSpan, PResult, SingleLabelManySpans,
};
use rustc_expand::base::{self, *};
use rustc_parse_format as parse;
use rustc_span::symbol::{Ident, Symbol};
@ -616,10 +618,14 @@ fn report_missing_placeholders(
.collect::<Vec<_>>();
if !placeholders.is_empty() {
report_redundant_format_arguments(ecx, fmt_span, &args, used, placeholders);
if let Some(mut new_diag) =
report_redundant_format_arguments(ecx, fmt_span, &args, used, placeholders)
{
diag.cancel();
new_diag.emit();
return;
}
}
// Used to ensure we only report translations for *one* kind of foreign format.
let mut found_foreign = false;
@ -710,13 +716,13 @@ macro_rules! check_foreign {
/// This function detects and reports unused format!() arguments that are
/// redundant due to implicit captures (e.g. `format!("{x}", x)`).
fn report_redundant_format_arguments(
ecx: &mut ExtCtxt<'_>,
fn report_redundant_format_arguments<'a>(
ecx: &mut ExtCtxt<'a>,
fmt_span: Span,
args: &FormatArguments,
used: &[bool],
placeholders: Vec<(Span, &str)>,
) {
) -> Option<DiagnosticBuilder<'a, ErrorGuaranteed>> {
let mut fmt_arg_indices = vec![];
let mut args_spans = vec![];
let mut fmt_spans = vec![];
@ -762,15 +768,15 @@ fn report_redundant_format_arguments(
suggestion_spans.push(span);
}
let mut diag = ecx.create_err(errors::FormatRedundantArgs {
return Some(ecx.create_err(errors::FormatRedundantArgs {
fmt_span,
note: multispan,
n: args_spans.len(),
sugg: errors::FormatRedundantArgsSugg { spans: suggestion_spans },
});
diag.emit();
}));
}
None
}
/// Handle invalid references to positional arguments. Output different