Skip to content

Commit a56a0d9

Browse files
committed
Use {:?} spans in use_debug
1 parent a95d135 commit a56a0d9

File tree

2 files changed

+20
-32
lines changed

2 files changed

+20
-32
lines changed

clippy_lints/src/write.rs

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use clippy_utils::diagnostics::{span_lint, span_lint_and_then};
2-
use clippy_utils::macros::{root_macro_call_first_node, FormatArgsExpn, MacroCall};
2+
use clippy_utils::macros::{root_macro_call_first_node, FormatArgsArg, FormatArgsExpn, MacroCall};
33
use clippy_utils::source::snippet_opt;
44
use rustc_ast::LitKind;
55
use rustc_errors::Applicability;
@@ -275,6 +275,9 @@ impl<'tcx> LateLintPass<'tcx> for Write {
275275
}
276276

277277
let Some(format_args) = FormatArgsExpn::find_nested(cx, expr, macro_call.expn) else { return };
278+
if format_args.format_string_span.from_expansion() {
279+
return;
280+
}
278281

279282
match diag_name {
280283
sym::print_macro | sym::eprint_macro | sym::write_macro => {
@@ -286,20 +289,15 @@ impl<'tcx> LateLintPass<'tcx> for Write {
286289
_ => {},
287290
}
288291

289-
check_literal(cx, &format_args, name);
292+
let Some(args) = format_args.args(cx) else { return };
293+
check_literal(cx, &args, name, format_args.is_raw(cx));
290294

291-
if !self.in_debug_impl
292-
&& format_args
293-
.formatters
294-
.iter()
295-
.any(|&(_, formatter)| formatter == sym::Debug)
296-
{
297-
span_lint(
298-
cx,
299-
USE_DEBUG,
300-
format_args.format_string_span,
301-
"use of `Debug`-based formatting",
302-
);
295+
if !self.in_debug_impl {
296+
for arg in args {
297+
if arg.format_trait == sym::Debug {
298+
span_lint(cx, USE_DEBUG, arg.span, "use of `Debug`-based formatting");
299+
}
300+
}
303301
}
304302
}
305303
}
@@ -335,7 +333,6 @@ fn check_newline(cx: &LateContext<'_>, format_args: &FormatArgsExpn<'_>, macro_c
335333
};
336334

337335
if_chain! {
338-
if !format_string_span.from_expansion();
339336
if last.as_str().ends_with('\n');
340337

341338
// ignore format strings with other internal vertical whitespace
@@ -401,9 +398,6 @@ fn check_empty_string(cx: &LateContext<'_>, format_args: &FormatArgsExpn<'_>, ma
401398
let mut span = format_args.format_string_span;
402399

403400
if part.as_str() == "\n";
404-
// `println!()` is also represented with an "\n" format string part, but
405-
// its span is from an expansion
406-
if !span.from_expansion();
407401
then {
408402
let lint = if name == "writeln" {
409403
span = expand_past_previous_comma(cx, span);
@@ -432,15 +426,9 @@ fn check_empty_string(cx: &LateContext<'_>, format_args: &FormatArgsExpn<'_>, ma
432426
}
433427
}
434428

435-
fn check_literal<'tcx>(cx: &LateContext<'tcx>, format_args: &FormatArgsExpn<'tcx>, name: &str) {
436-
if format_args.format_string_span.from_expansion() {
437-
return;
438-
}
439-
let raw = format_args.is_raw(cx);
440-
441-
let Some(args) = format_args.args(cx) else { return };
429+
fn check_literal(cx: &LateContext<'_>, args: &[FormatArgsArg<'_>], name: &str, raw: bool) {
442430
let mut counts = HirIdMap::<usize>::default();
443-
for arg in &args {
431+
for arg in args {
444432
*counts.entry(arg.value.hir_id).or_default() += 1;
445433
}
446434

tests/ui/print.stderr

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
error: use of `Debug`-based formatting
2-
--> $DIR/print.rs:11:19
2+
--> $DIR/print.rs:11:20
33
|
44
LL | write!(f, "{:?}", 43.1415)
5-
| ^^^^^^
5+
| ^^^^
66
|
77
= note: `-D clippy::use-debug` implied by `-D warnings`
88

@@ -33,10 +33,10 @@ LL | print!("Hello {:?}", "World");
3333
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3434

3535
error: use of `Debug`-based formatting
36-
--> $DIR/print.rs:28:12
36+
--> $DIR/print.rs:28:19
3737
|
3838
LL | print!("Hello {:?}", "World");
39-
| ^^^^^^^^^^^^
39+
| ^^^^
4040

4141
error: use of `print!`
4242
--> $DIR/print.rs:30:5
@@ -45,10 +45,10 @@ LL | print!("Hello {:#?}", "#orld");
4545
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4646

4747
error: use of `Debug`-based formatting
48-
--> $DIR/print.rs:30:12
48+
--> $DIR/print.rs:30:19
4949
|
5050
LL | print!("Hello {:#?}", "#orld");
51-
| ^^^^^^^^^^^^^
51+
| ^^^^^
5252

5353
error: aborting due to 8 previous errors
5454

0 commit comments

Comments
 (0)