| #![warn(clippy::io_other_error)] |
| use std::fmt; |
| |
| #[derive(Debug)] |
| struct E; |
| |
| impl std::error::Error for E {} |
| impl fmt::Display for E { |
| fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| f.write_str("E") |
| } |
| } |
| |
| macro_rules! o { |
| {} => { std::io::ErrorKind::Other }; |
| } |
| |
| macro_rules! e { |
| { $kind:expr } => { std::io::Error::new($kind, E) }; |
| } |
| |
| fn main() { |
| let _err = std::io::Error::other(E); |
| //~^ ERROR: this can be `std::io::Error::other(_)` |
| let other = std::io::ErrorKind::Other; |
| let _err = std::io::Error::other(E); |
| //~^ ERROR: this can be `std::io::Error::other(_)` |
| |
| // not other |
| let _err = std::io::Error::new(std::io::ErrorKind::TimedOut, E); |
| |
| // from expansion |
| let _err = e!(other); |
| let _err = std::io::Error::new(o!(), E); |
| let _err = e!(o!()); |
| |
| paths::short(); |
| under_msrv(); |
| } |
| |
| mod paths { |
| use std::io::{self, Error, ErrorKind}; |
| |
| pub fn short() { |
| let _err = Error::other(super::E); |
| //~^ ERROR: this can be `std::io::Error::other(_)` |
| let _err = io::Error::other(super::E); |
| //~^ ERROR: this can be `std::io::Error::other(_)` |
| } |
| } |
| |
| #[clippy::msrv = "1.73"] |
| fn under_msrv() { |
| let _err = std::io::Error::new(std::io::ErrorKind::Other, E); |
| } |
| |
| pub fn issue14346(x: i32) -> std::io::Error { |
| std::io::Error::other(format!("{x}")) |
| //~^ ERROR: this can be `std::io::Error::other(_)` |
| } |