// run-rustfix #![allow(unused_imports)] #![warn(clippy::explicit_write)] fn stdout() -> String { String::new() } fn stderr() -> String { String::new() } macro_rules! one { () => { 1 }; } fn main() { // these should warn { use std::io::Write; print!("test"); eprint!("test"); println!("test"); eprintln!("test"); print!("test"); eprint!("test"); // including newlines println!("test\ntest"); eprintln!("test\ntest"); let value = 1; eprintln!("with {}", value); eprintln!("with {} {}", 2, value); eprintln!("with {value}"); eprintln!("macro arg {}", one!()); let width = 2; eprintln!("{:w$}", value, w = width); } // 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"); } }