#![warn(clippy::explicit_write)] fn stdout() -> String { String::new() } fn stderr() -> String { String::new() } fn main() { // these should warn { use std::io::Write; write!(std::io::stdout(), "test").unwrap(); write!(std::io::stderr(), "test").unwrap(); writeln!(std::io::stdout(), "test").unwrap(); writeln!(std::io::stderr(), "test").unwrap(); std::io::stdout().write_fmt(format_args!("test")).unwrap(); std::io::stderr().write_fmt(format_args!("test")).unwrap(); // including newlines writeln!(std::io::stdout(), "test\ntest").unwrap(); writeln!(std::io::stderr(), "test\ntest").unwrap(); } // these should not warn, different destination { use std::fmt::Write; let mut s = String::new(); write!(s, "test").unwrap(); write!(s, "test").unwrap(); writeln!(s, "test").unwrap(); writeln!(s, "test").unwrap(); s.write_fmt(format_args!("test")).unwrap(); s.write_fmt(format_args!("test")).unwrap(); write!(stdout(), "test").unwrap(); write!(stderr(), "test").unwrap(); writeln!(stdout(), "test").unwrap(); writeln!(stderr(), "test").unwrap(); stdout().write_fmt(format_args!("test")).unwrap(); stderr().write_fmt(format_args!("test")).unwrap(); } // these should not warn, no unwrap { use std::io::Write; std::io::stdout().write_fmt(format_args!("test")).expect("no stdout"); std::io::stderr().write_fmt(format_args!("test")).expect("no stderr"); } }