let mut parser = parse::Parser::new(fmt_str);
let mut pieces = vec![];
- loop {
- match parser.next() {
- Some(mut piece) => {
- if !parser.errors.is_empty() {
- break;
- }
- cx.verify_piece(&piece);
- cx.resolve_name_inplace(&mut piece);
- pieces.push(piece);
- }
- None => break,
+ while let Some(mut piece) = parser.next() {
+ if !parser.errors.is_empty() {
+ break;
}
+ cx.verify_piece(&piece);
+ cx.resolve_name_inplace(&mut piece);
+ pieces.push(piece);
}
let numbered_position_args = pieces.iter().any(|arg: &parse::Piece| {
let (sp, msg) = errs.into_iter().next().unwrap();
cx.ecx.struct_span_err(sp, msg)
} else {
- let mut diag = cx.ecx.struct_span_err(cx.fmtsp,
- "multiple unused formatting arguments");
-
- // Ignoring message, as it gets repetitive
- // Then use MultiSpan to not clutter up errors
- for (sp, _) in errs {
- diag.span_label(sp, "unused");
- }
-
+ let mut diag = cx.ecx.struct_span_err(
+ errs.iter().map(|&(sp, _)| sp).collect::<Vec<Span>>(),
+ "multiple unused formatting arguments"
+ );
+ diag.span_label(cx.fmtsp, "multiple unused arguments in this statement");
diag
}
};