2022-08-23 09:17:30 -05:00
|
|
|
#![warn(clippy::manual_string_new)]
|
2022-07-17 19:20:51 -05:00
|
|
|
|
|
|
|
macro_rules! create_strings_from_macro {
|
|
|
|
// When inside a macro, nothing should warn to prevent false positives.
|
|
|
|
($some_str:expr) => {
|
|
|
|
let _: String = $some_str.into();
|
|
|
|
let _ = $some_str.to_string();
|
2022-08-05 18:59:50 -05:00
|
|
|
};
|
2022-07-17 19:20:51 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
// Method calls
|
|
|
|
let _ = String::new();
|
|
|
|
let _ = "no warning".to_string();
|
|
|
|
|
|
|
|
let _ = String::new();
|
|
|
|
let _ = "no warning".to_owned();
|
|
|
|
|
|
|
|
let _: String = String::new();
|
|
|
|
let _: String = "no warning".into();
|
|
|
|
|
|
|
|
let _: SomeOtherStruct = "no warning".into();
|
|
|
|
let _: SomeOtherStruct = "".into(); // No warning too. We are not converting into String.
|
|
|
|
|
|
|
|
// Calls
|
|
|
|
let _ = String::new();
|
|
|
|
let _ = String::new();
|
|
|
|
let _ = String::from("no warning");
|
|
|
|
let _ = SomeOtherStruct::from("no warning");
|
|
|
|
let _ = SomeOtherStruct::from(""); // Again: no warning.
|
|
|
|
|
|
|
|
let _ = String::new();
|
|
|
|
let _ = String::try_from("no warning").unwrap();
|
|
|
|
let _ = String::try_from("no warning").expect("this should not warn");
|
|
|
|
let _ = SomeOtherStruct::try_from("no warning").unwrap();
|
|
|
|
let _ = SomeOtherStruct::try_from("").unwrap(); // Again: no warning.
|
|
|
|
|
|
|
|
let _: String = String::new();
|
|
|
|
let _: String = From::from("no warning");
|
|
|
|
let _: SomeOtherStruct = From::from("no warning");
|
|
|
|
let _: SomeOtherStruct = From::from(""); // Again: no warning.
|
|
|
|
|
|
|
|
let _: String = String::new();
|
|
|
|
let _: String = TryFrom::try_from("no warning").unwrap();
|
|
|
|
let _: String = TryFrom::try_from("no warning").expect("this should not warn");
|
|
|
|
let _: String = String::new();
|
|
|
|
let _: SomeOtherStruct = TryFrom::try_from("no_warning").unwrap();
|
|
|
|
let _: SomeOtherStruct = TryFrom::try_from("").unwrap(); // Again: no warning.
|
|
|
|
|
|
|
|
// Macros (never warn)
|
|
|
|
create_strings_from_macro!("");
|
|
|
|
create_strings_from_macro!("Hey");
|
|
|
|
}
|
|
|
|
|
|
|
|
struct SomeOtherStruct {}
|
|
|
|
|
|
|
|
impl From<&str> for SomeOtherStruct {
|
|
|
|
fn from(_value: &str) -> Self {
|
|
|
|
Self {}
|
|
|
|
}
|
|
|
|
}
|