These were probably added automatically to avoid code churn. I'd like to get rid of them bit by bit, so here's the first bit
77 lines
2.4 KiB
Rust
77 lines
2.4 KiB
Rust
#![warn(clippy::explicit_write)]
|
|
#![allow(unused_imports)]
|
|
|
|
fn stdout() -> String {
|
|
String::new()
|
|
}
|
|
|
|
fn stderr() -> String {
|
|
String::new()
|
|
}
|
|
|
|
macro_rules! one {
|
|
() => {
|
|
1
|
|
};
|
|
}
|
|
|
|
fn main() {
|
|
// these should warn
|
|
{
|
|
use std::io::Write;
|
|
write!(std::io::stdout(), "test").unwrap();
|
|
//~^ explicit_write
|
|
write!(std::io::stderr(), "test").unwrap();
|
|
//~^ explicit_write
|
|
writeln!(std::io::stdout(), "test").unwrap();
|
|
//~^ explicit_write
|
|
writeln!(std::io::stderr(), "test").unwrap();
|
|
//~^ explicit_write
|
|
std::io::stdout().write_fmt(format_args!("test")).unwrap();
|
|
//~^ explicit_write
|
|
std::io::stderr().write_fmt(format_args!("test")).unwrap();
|
|
//~^ explicit_write
|
|
|
|
// including newlines
|
|
writeln!(std::io::stdout(), "test\ntest").unwrap();
|
|
//~^ explicit_write
|
|
writeln!(std::io::stderr(), "test\ntest").unwrap();
|
|
//~^ explicit_write
|
|
|
|
let value = 1;
|
|
writeln!(std::io::stderr(), "with {value}").unwrap();
|
|
//~^ explicit_write
|
|
writeln!(std::io::stderr(), "with {} {}", 2, value).unwrap();
|
|
//~^ explicit_write
|
|
writeln!(std::io::stderr(), "with {value}").unwrap();
|
|
//~^ explicit_write
|
|
writeln!(std::io::stderr(), "macro arg {}", one!()).unwrap();
|
|
//~^ explicit_write
|
|
let width = 2;
|
|
writeln!(std::io::stderr(), "{value:w$}", w = width).unwrap();
|
|
//~^ explicit_write
|
|
}
|
|
// 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");
|
|
}
|
|
}
|