| #![warn(clippy::write_with_newline)] | |
| #![expect(clippy::write_literal)] | |
| use std::io::Write; | |
| fn main() { | |
| let mut v = Vec::new(); | |
| // These should fail | |
| writeln!(v, "Hello"); | |
| //~^ write_with_newline | |
| writeln!(v, "Hello {}", "world"); | |
| //~^ write_with_newline | |
| writeln!(v, "Hello {} {}", "world", "#2"); | |
| //~^ write_with_newline | |
| writeln!(v, "{}", 1265); | |
| //~^ write_with_newline | |
| writeln!(v); | |
| //~^ write_with_newline | |
| // These should be fine | |
| write!(v, ""); | |
| write!(v, "Hello"); | |
| writeln!(v, "Hello"); | |
| writeln!(v, "Hello\n"); | |
| writeln!(v, "Hello {}\n", "world"); | |
| write!(v, "Issue\n{}", 1265); | |
| write!(v, "{}", 1265); | |
| write!(v, "\n{}", 1275); | |
| write!(v, "\n\n"); | |
| write!(v, "like eof\n\n"); | |
| write!(v, "Hello {} {}\n\n", "world", "#2"); | |
| // #3126 | |
| writeln!(v, "\ndon't\nwarn\nfor\nmultiple\nnewlines\n"); | |
| // #3126 | |
| writeln!(v, "\nbla\n\n"); | |
| // Escaping | |
| // #3514 | |
| write!(v, "\\n"); | |
| writeln!(v, "\\"); | |
| //~^ write_with_newline | |
| write!(v, "\\\\n"); | |
| // Raw strings | |
| // #3778 | |
| write!(v, r"\n"); | |
| // Literal newlines should also fail | |
| writeln!( | |
| //~^ write_with_newline | |
| v | |
| ); | |
| writeln!( | |
| //~^ write_with_newline | |
| v | |
| ); | |
| // Don't warn on CRLF (#4208) | |
| write!(v, "\r\n"); | |
| write!(v, "foo\r\n"); | |
| writeln!(v, "\\r"); | |
| //~^ write_with_newline | |
| write!(v, "foo\rbar\n"); | |
| // Ignore expanded format strings | |
| macro_rules! newline { | |
| () => { | |
| "\n" | |
| }; | |
| } | |
| write!(v, newline!()); | |
| } |