Skip to content

Commit 6f88cda

Browse files
committed
Fix to_string_in_format_args in parens
Fix suggestions like ``` print!("error: something failed at {}", (Location::caller().to_string())); ``` where the parenthesis enclose some portion of the value.
1 parent e8c1b54 commit 6f88cda

File tree

4 files changed

+74
-26
lines changed

4 files changed

+74
-26
lines changed

clippy_lints/src/format_args.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ fn check_format_in_format_args(cx: &LateContext<'_>, call_site: Span, name: Symb
251251
fn check_to_string_in_format_args(cx: &LateContext<'_>, name: Symbol, value: &Expr<'_>) {
252252
if_chain! {
253253
if !value.span.from_expansion();
254-
if let ExprKind::MethodCall(_, receiver, [], _) = value.kind;
254+
if let ExprKind::MethodCall(_, receiver, [], to_string_span) = value.kind;
255255
if let Some(method_def_id) = cx.typeck_results().type_dependent_def_id(value.hir_id);
256256
if is_diag_trait_item(cx, method_def_id, sym::ToString);
257257
let receiver_ty = cx.typeck_results().expr_ty(receiver);
@@ -267,7 +267,7 @@ fn check_to_string_in_format_args(cx: &LateContext<'_>, name: Symbol, value: &Ex
267267
span_lint_and_sugg(
268268
cx,
269269
TO_STRING_IN_FORMAT_ARGS,
270-
value.span.with_lo(receiver.span.hi()),
270+
to_string_span.with_lo(receiver.span.hi()),
271271
&format!(
272272
"`to_string` applied to a type that implements `Display` in `{name}!` args"
273273
),

tests/ui/format_args.fixed

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#![allow(clippy::assertions_on_constants)]
55
#![allow(clippy::eq_op)]
66
#![allow(clippy::print_literal)]
7+
#![allow(clippy::double_parens)]
78
#![warn(clippy::to_string_in_format_args)]
89

910
use std::io::{stdout, Write};
@@ -112,6 +113,12 @@ fn main() {
112113
println!("error: something failed at {}", my_other_macro!());
113114
// https://github.com/rust-lang/rust-clippy/issues/7903
114115
println!("{foo}{foo:?}", foo = "foo".to_string());
116+
print!("{}", (Location::caller()));
117+
print!("{}", ((Location::caller())));
118+
#[rustfmt::skip]
119+
print!("{}", (Location::caller()));
120+
#[rustfmt::skip]
121+
print!("{}", ((Location::caller())));
115122
}
116123

117124
fn issue8643(vendor_id: usize, product_id: usize, name: &str) {

tests/ui/format_args.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#![allow(clippy::assertions_on_constants)]
55
#![allow(clippy::eq_op)]
66
#![allow(clippy::print_literal)]
7+
#![allow(clippy::double_parens)]
78
#![warn(clippy::to_string_in_format_args)]
89

910
use std::io::{stdout, Write};
@@ -112,6 +113,16 @@ fn main() {
112113
println!("error: something failed at {}", my_other_macro!());
113114
// https://github.com/rust-lang/rust-clippy/issues/7903
114115
println!("{foo}{foo:?}", foo = "foo".to_string());
116+
print!("{}", (Location::caller().to_string()));
117+
print!("{}", ((Location::caller()).to_string()));
118+
#[rustfmt::skip]
119+
print!("{}", (Location::caller()
120+
.
121+
to_string()));
122+
#[rustfmt::skip]
123+
print!("{}", ((Location::caller())
124+
.
125+
to_string()));
115126
}
116127

117128
fn issue8643(vendor_id: usize, product_id: usize, name: &str) {

tests/ui/format_args.stderr

Lines changed: 54 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,172 @@
11
error: `to_string` applied to a type that implements `Display` in `format!` args
2-
--> $DIR/format_args.rs:74:72
2+
--> $DIR/format_args.rs:75:72
33
|
44
LL | let _ = format!("error: something failed at {}", Location::caller().to_string());
55
| ^^^^^^^^^^^^ help: remove this
66
|
77
= note: `-D clippy::to-string-in-format-args` implied by `-D warnings`
88

99
error: `to_string` applied to a type that implements `Display` in `write!` args
10-
--> $DIR/format_args.rs:78:27
10+
--> $DIR/format_args.rs:79:27
1111
|
1212
LL | Location::caller().to_string()
1313
| ^^^^^^^^^^^^ help: remove this
1414

1515
error: `to_string` applied to a type that implements `Display` in `writeln!` args
16-
--> $DIR/format_args.rs:83:27
16+
--> $DIR/format_args.rs:84:27
1717
|
1818
LL | Location::caller().to_string()
1919
| ^^^^^^^^^^^^ help: remove this
2020

2121
error: `to_string` applied to a type that implements `Display` in `print!` args
22-
--> $DIR/format_args.rs:85:63
22+
--> $DIR/format_args.rs:86:63
2323
|
2424
LL | print!("error: something failed at {}", Location::caller().to_string());
2525
| ^^^^^^^^^^^^ help: remove this
2626

2727
error: `to_string` applied to a type that implements `Display` in `println!` args
28-
--> $DIR/format_args.rs:86:65
28+
--> $DIR/format_args.rs:87:65
2929
|
3030
LL | println!("error: something failed at {}", Location::caller().to_string());
3131
| ^^^^^^^^^^^^ help: remove this
3232

3333
error: `to_string` applied to a type that implements `Display` in `eprint!` args
34-
--> $DIR/format_args.rs:87:64
34+
--> $DIR/format_args.rs:88:64
3535
|
3636
LL | eprint!("error: something failed at {}", Location::caller().to_string());
3737
| ^^^^^^^^^^^^ help: remove this
3838

3939
error: `to_string` applied to a type that implements `Display` in `eprintln!` args
40-
--> $DIR/format_args.rs:88:66
40+
--> $DIR/format_args.rs:89:66
4141
|
4242
LL | eprintln!("error: something failed at {}", Location::caller().to_string());
4343
| ^^^^^^^^^^^^ help: remove this
4444

4545
error: `to_string` applied to a type that implements `Display` in `format_args!` args
46-
--> $DIR/format_args.rs:89:77
46+
--> $DIR/format_args.rs:90:77
4747
|
4848
LL | let _ = format_args!("error: something failed at {}", Location::caller().to_string());
4949
| ^^^^^^^^^^^^ help: remove this
5050

5151
error: `to_string` applied to a type that implements `Display` in `assert!` args
52-
--> $DIR/format_args.rs:90:70
52+
--> $DIR/format_args.rs:91:70
5353
|
5454
LL | assert!(true, "error: something failed at {}", Location::caller().to_string());
5555
| ^^^^^^^^^^^^ help: remove this
5656

5757
error: `to_string` applied to a type that implements `Display` in `assert_eq!` args
58-
--> $DIR/format_args.rs:91:73
58+
--> $DIR/format_args.rs:92:73
5959
|
6060
LL | assert_eq!(0, 0, "error: something failed at {}", Location::caller().to_string());
6161
| ^^^^^^^^^^^^ help: remove this
6262

6363
error: `to_string` applied to a type that implements `Display` in `assert_ne!` args
64-
--> $DIR/format_args.rs:92:73
64+
--> $DIR/format_args.rs:93:73
6565
|
6666
LL | assert_ne!(0, 0, "error: something failed at {}", Location::caller().to_string());
6767
| ^^^^^^^^^^^^ help: remove this
6868

6969
error: `to_string` applied to a type that implements `Display` in `panic!` args
70-
--> $DIR/format_args.rs:93:63
70+
--> $DIR/format_args.rs:94:63
7171
|
7272
LL | panic!("error: something failed at {}", Location::caller().to_string());
7373
| ^^^^^^^^^^^^ help: remove this
7474

7575
error: `to_string` applied to a type that implements `Display` in `println!` args
76-
--> $DIR/format_args.rs:94:20
76+
--> $DIR/format_args.rs:95:20
7777
|
7878
LL | println!("{}", X(1).to_string());
7979
| ^^^^^^^^^^^^^^^^ help: use this: `*X(1)`
8080

8181
error: `to_string` applied to a type that implements `Display` in `println!` args
82-
--> $DIR/format_args.rs:95:20
82+
--> $DIR/format_args.rs:96:20
8383
|
8484
LL | println!("{}", Y(&X(1)).to_string());
8585
| ^^^^^^^^^^^^^^^^^^^^ help: use this: `***Y(&X(1))`
8686

8787
error: `to_string` applied to a type that implements `Display` in `println!` args
88-
--> $DIR/format_args.rs:96:24
88+
--> $DIR/format_args.rs:97:24
8989
|
9090
LL | println!("{}", Z(1).to_string());
9191
| ^^^^^^^^^^^^ help: remove this
9292

9393
error: `to_string` applied to a type that implements `Display` in `println!` args
94-
--> $DIR/format_args.rs:97:20
94+
--> $DIR/format_args.rs:98:20
9595
|
9696
LL | println!("{}", x.to_string());
9797
| ^^^^^^^^^^^^^ help: use this: `**x`
9898

9999
error: `to_string` applied to a type that implements `Display` in `println!` args
100-
--> $DIR/format_args.rs:98:20
100+
--> $DIR/format_args.rs:99:20
101101
|
102102
LL | println!("{}", x_ref.to_string());
103103
| ^^^^^^^^^^^^^^^^^ help: use this: `***x_ref`
104104

105105
error: `to_string` applied to a type that implements `Display` in `println!` args
106-
--> $DIR/format_args.rs:100:39
106+
--> $DIR/format_args.rs:101:39
107107
|
108108
LL | println!("{foo}{bar}", foo = "foo".to_string(), bar = "bar");
109109
| ^^^^^^^^^^^^ help: remove this
110110

111111
error: `to_string` applied to a type that implements `Display` in `println!` args
112-
--> $DIR/format_args.rs:101:52
112+
--> $DIR/format_args.rs:102:52
113113
|
114114
LL | println!("{foo}{bar}", foo = "foo", bar = "bar".to_string());
115115
| ^^^^^^^^^^^^ help: remove this
116116

117117
error: `to_string` applied to a type that implements `Display` in `println!` args
118-
--> $DIR/format_args.rs:102:39
118+
--> $DIR/format_args.rs:103:39
119119
|
120120
LL | println!("{foo}{bar}", bar = "bar".to_string(), foo = "foo");
121121
| ^^^^^^^^^^^^ help: remove this
122122

123123
error: `to_string` applied to a type that implements `Display` in `println!` args
124-
--> $DIR/format_args.rs:103:52
124+
--> $DIR/format_args.rs:104:52
125125
|
126126
LL | println!("{foo}{bar}", bar = "bar", foo = "foo".to_string());
127127
| ^^^^^^^^^^^^ help: remove this
128128

129+
error: `to_string` applied to a type that implements `Display` in `print!` args
130+
--> $DIR/format_args.rs:116:37
131+
|
132+
LL | print!("{}", (Location::caller().to_string()));
133+
| ^^^^^^^^^^^^ help: remove this
134+
135+
error: `to_string` applied to a type that implements `Display` in `print!` args
136+
--> $DIR/format_args.rs:117:39
137+
|
138+
LL | print!("{}", ((Location::caller()).to_string()));
139+
| ^^^^^^^^^^^^ help: remove this
140+
141+
error: `to_string` applied to a type that implements `Display` in `print!` args
142+
--> $DIR/format_args.rs:119:37
143+
|
144+
LL | print!("{}", (Location::caller()
145+
| _____________________________________^
146+
LL | | .
147+
LL | | to_string()));
148+
| |___________________^ help: remove this
149+
150+
error: `to_string` applied to a type that implements `Display` in `print!` args
151+
--> $DIR/format_args.rs:123:39
152+
|
153+
LL | print!("{}", ((Location::caller())
154+
| _______________________________________^
155+
LL | | .
156+
LL | | to_string()));
157+
| |___________________^ help: remove this
158+
129159
error: `to_string` applied to a type that implements `Display` in `format!` args
130-
--> $DIR/format_args.rs:142:38
160+
--> $DIR/format_args.rs:153:38
131161
|
132162
LL | let x = format!("{} {}", a, b.to_string());
133163
| ^^^^^^^^^^^^ help: remove this
134164

135165
error: `to_string` applied to a type that implements `Display` in `println!` args
136-
--> $DIR/format_args.rs:156:24
166+
--> $DIR/format_args.rs:167:24
137167
|
138168
LL | println!("{}", original[..10].to_string());
139169
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this: `&original[..10]`
140170

141-
error: aborting due to 23 previous errors
171+
error: aborting due to 27 previous errors
142172

0 commit comments

Comments
 (0)