Add suggestion to write_literal and print_literal

Don't lint on a mixture of raw and regular strings
Fix spans in format strings
This commit is contained in:
Jason Newcomb 2021-03-01 16:31:04 -05:00
parent 4c1047167d
commit a7fa2a6fa8
No known key found for this signature in database
GPG key ID: DA59E8643A37ED06
5 changed files with 305 additions and 30 deletions

View file

@ -5,66 +5,120 @@ LL | print!("Hello {}", "world");
| ^^^^^^^
|
= note: `-D clippy::print-literal` implied by `-D warnings`
help: try this
|
LL | print!("Hello world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/print_literal.rs:26:36
|
LL | println!("Hello {} {}", world, "world");
| ^^^^^^^
|
help: try this
|
LL | println!("Hello {} world", world);
| ^^^^^ --
error: literal with an empty format string
--> $DIR/print_literal.rs:27:26
|
LL | println!("Hello {}", "world");
| ^^^^^^^
|
help: try this
|
LL | println!("Hello world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/print_literal.rs:32:25
|
LL | println!("{0} {1}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | println!("hello {1}", "world");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/print_literal.rs:32:34
|
LL | println!("{0} {1}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | println!("{0} world", "hello");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/print_literal.rs:33:25
|
LL | println!("{1} {0}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | println!("{1} hello", "world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/print_literal.rs:33:34
|
LL | println!("{1} {0}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | println!("world {0}", "hello");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/print_literal.rs:36:35
--> $DIR/print_literal.rs:36:29
|
LL | println!("{foo} {bar}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | println!("hello {bar}", bar = "world");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/print_literal.rs:36:50
--> $DIR/print_literal.rs:36:44
|
LL | println!("{foo} {bar}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | println!("{foo} world", foo = "hello");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/print_literal.rs:37:35
--> $DIR/print_literal.rs:37:29
|
LL | println!("{bar} {foo}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | println!("{bar} hello", bar = "world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/print_literal.rs:37:50
--> $DIR/print_literal.rs:37:44
|
LL | println!("{bar} {foo}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | println!("world {foo}", foo = "hello");
| ^^^^^ --
error: aborting due to 11 previous errors

View file

@ -5,66 +5,120 @@ LL | write!(&mut v, "Hello {}", "world");
| ^^^^^^^
|
= note: `-D clippy::write-literal` implied by `-D warnings`
help: try this
|
LL | write!(&mut v, "Hello world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/write_literal.rs:31:44
|
LL | writeln!(&mut v, "Hello {} {}", world, "world");
| ^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "Hello {} world", world);
| ^^^^^ --
error: literal with an empty format string
--> $DIR/write_literal.rs:32:34
|
LL | writeln!(&mut v, "Hello {}", "world");
| ^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "Hello world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/write_literal.rs:37:33
|
LL | writeln!(&mut v, "{0} {1}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "hello {1}", "world");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/write_literal.rs:37:42
|
LL | writeln!(&mut v, "{0} {1}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "{0} world", "hello");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/write_literal.rs:38:33
|
LL | writeln!(&mut v, "{1} {0}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "{1} hello", "world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/write_literal.rs:38:42
|
LL | writeln!(&mut v, "{1} {0}", "hello", "world");
| ^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "world {0}", "hello");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/write_literal.rs:41:43
--> $DIR/write_literal.rs:41:37
|
LL | writeln!(&mut v, "{foo} {bar}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "hello {bar}", bar = "world");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/write_literal.rs:41:58
--> $DIR/write_literal.rs:41:52
|
LL | writeln!(&mut v, "{foo} {bar}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "{foo} world", foo = "hello");
| ^^^^^ --
error: literal with an empty format string
--> $DIR/write_literal.rs:42:43
--> $DIR/write_literal.rs:42:37
|
LL | writeln!(&mut v, "{bar} {foo}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "{bar} hello", bar = "world");
| ^^^^^--
error: literal with an empty format string
--> $DIR/write_literal.rs:42:58
--> $DIR/write_literal.rs:42:52
|
LL | writeln!(&mut v, "{bar} {foo}", foo = "hello", bar = "world");
| ^^^^^^^
| ^^^^^^^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, "world {foo}", foo = "hello");
| ^^^^^ --
error: aborting due to 11 previous errors

View file

@ -0,0 +1,27 @@
#![allow(unused_must_use)]
#![warn(clippy::write_literal)]
use std::io::Write;
fn main() {
let mut v = Vec::new();
writeln!(&mut v, "{}", "{hello}");
writeln!(&mut v, r"{}", r"{hello}");
writeln!(&mut v, "{}", '\'');
writeln!(&mut v, "{}", '"');
writeln!(&mut v, r"{}", '"'); // don't lint
writeln!(&mut v, r"{}", '\'');
writeln!(
&mut v,
"some {}",
"hello \
world!"
);
writeln!(
&mut v,
"some {}\
{} \\ {}",
"1", "2", "3",
);
}

View file

@ -0,0 +1,106 @@
error: literal with an empty format string
--> $DIR/write_literal_2.rs:9:28
|
LL | writeln!(&mut v, "{}", "{hello}");
| ^^^^^^^^^
|
= note: `-D clippy::write-literal` implied by `-D warnings`
help: try this
|
LL | writeln!(&mut v, "{{hello}}");
| ^^^^^^^^^--
error: literal with an empty format string
--> $DIR/write_literal_2.rs:10:29
|
LL | writeln!(&mut v, r"{}", r"{hello}");
| ^^^^^^^^^^
|
help: try this
|
LL | writeln!(&mut v, r"{{hello}}");
| ^^^^^^^^^--
error: literal with an empty format string
--> $DIR/write_literal_2.rs:11:28
|
LL | writeln!(&mut v, "{}", '/'');
| ^^^^
|
help: try this
|
LL | writeln!(&mut v, "'");
| ^--
error: literal with an empty format string
--> $DIR/write_literal_2.rs:12:28
|
LL | writeln!(&mut v, "{}", '"');
| ^^^
|
help: try this
|
LL | writeln!(&mut v, "/"");
| ^^--
error: literal with an empty format string
--> $DIR/write_literal_2.rs:14:29
|
LL | writeln!(&mut v, r"{}", '/'');
| ^^^^
|
help: try this
|
LL | writeln!(&mut v, r"'");
| ^--
error: literal with an empty format string
--> $DIR/write_literal_2.rs:18:9
|
LL | / "hello /
LL | | world!"
| |_______________^
|
help: try this
|
LL | "some hello /
LL | world!"
|
error: literal with an empty format string
--> $DIR/write_literal_2.rs:25:9
|
LL | "1", "2", "3",
| ^^^
|
help: try this
|
LL | "some 1{} / {}", "2", "3",
| ^ --
error: literal with an empty format string
--> $DIR/write_literal_2.rs:25:14
|
LL | "1", "2", "3",
| ^^^
|
help: try this
|
LL | 2 / {}",
LL | "1", "3",
|
error: literal with an empty format string
--> $DIR/write_literal_2.rs:25:19
|
LL | "1", "2", "3",
| ^^^
|
help: try this
|
LL | {} / 3",
LL | "1", "2",
|
error: aborting due to 9 previous errors