#![feature(type_alias_impl_trait)] #![warn(clippy::from_over_into)] #![allow(unused)] // this should throw an error struct StringWrapper(String); impl From for StringWrapper { fn from(val: String) -> Self { StringWrapper(val) } } struct SelfType(String); impl From for SelfType { fn from(val: String) -> Self { SelfType(String::new()) } } #[derive(Default)] struct X; impl X { const FOO: &'static str = "a"; } struct SelfKeywords; impl From for SelfKeywords { fn from(val: X) -> Self { let _ = X; let _ = X::FOO; let _: X = val; SelfKeywords } } struct ExplicitPaths(bool); impl core::convert::From for bool { fn from(mut val: crate::ExplicitPaths) -> Self { let in_closure = || val.0; val.0 = false; val.0 } } // this is fine struct A(String); impl From for A { fn from(s: String) -> A { A(s) } } struct PathInExpansion; impl From for String { fn from(val: PathInExpansion) -> Self { // non self/Self paths in expansions are fine panic!() } } #[clippy::msrv = "1.40"] fn msrv_1_40() { struct FromOverInto(Vec); impl Into> for Vec { fn into(self) -> FromOverInto { FromOverInto(self) } } } #[clippy::msrv = "1.41"] fn msrv_1_41() { struct FromOverInto(Vec); impl From> for FromOverInto { fn from(val: Vec) -> Self { FromOverInto(val) } } } fn issue_12138() { struct Hello; impl From for () { fn from(val: Hello) {} } } fn main() {}