ef72b2cac0
Both regular strings and raw strings can contain literal newlines. This commit extends the lint to also warn about terminating strings with these. Behaviour handling for raw strings is also moved into `check_newlines` by passing in the `is_raw` boolean from `check_tts` as [suggested](https://github.com/rust-lang/rust-clippy/pull/3781#pullrequestreview-204663732)
50 lines
1.1 KiB
Rust
50 lines
1.1 KiB
Rust
#![allow(clippy::write_literal)]
|
|
#![warn(clippy::write_with_newline)]
|
|
|
|
use std::io::Write;
|
|
|
|
fn main() {
|
|
let mut v = Vec::new();
|
|
|
|
// These should fail
|
|
write!(&mut v, "Hello\n");
|
|
write!(&mut v, "Hello {}\n", "world");
|
|
write!(&mut v, "Hello {} {}\n", "world", "#2");
|
|
write!(&mut v, "{}\n", 1265);
|
|
|
|
// These should be fine
|
|
write!(&mut v, "");
|
|
write!(&mut v, "Hello");
|
|
writeln!(&mut v, "Hello");
|
|
writeln!(&mut v, "Hello\n");
|
|
writeln!(&mut v, "Hello {}\n", "world");
|
|
write!(&mut v, "Issue\n{}", 1265);
|
|
write!(&mut v, "{}", 1265);
|
|
write!(&mut v, "\n{}", 1275);
|
|
write!(&mut v, "\n\n");
|
|
write!(&mut v, "like eof\n\n");
|
|
write!(&mut v, "Hello {} {}\n\n", "world", "#2");
|
|
writeln!(&mut v, "\ndon't\nwarn\nfor\nmultiple\nnewlines\n"); // #3126
|
|
writeln!(&mut v, "\nbla\n\n"); // #3126
|
|
|
|
// Escaping
|
|
write!(&mut v, "\\n"); // #3514
|
|
write!(&mut v, "\\\n"); // should fail
|
|
write!(&mut v, "\\\\n");
|
|
|
|
// Raw strings
|
|
write!(&mut v, r"\n"); // #3778
|
|
|
|
// Literal newlines should also fail
|
|
write!(
|
|
&mut v,
|
|
"
|
|
"
|
|
);
|
|
write!(
|
|
&mut v,
|
|
r"
|
|
"
|
|
);
|
|
}
|