| //@aux-build:proc_macros.rs |
| //@no-rustfix |
| #![warn(clippy::unnecessary_fallible_conversions)] |
| |
| extern crate proc_macros; |
| |
| struct Foo; |
| impl TryFrom<i32> for Foo { |
| type Error = (); |
| fn try_from(_: i32) -> Result<Self, Self::Error> { |
| Ok(Foo) |
| } |
| } |
| impl From<i64> for Foo { |
| fn from(_: i64) -> Self { |
| Foo |
| } |
| } |
| |
| fn main() { |
| // `Foo` only implements `TryFrom<i32>` and not `From<i32>`, so don't lint |
| let _: Result<Foo, _> = 0i32.try_into(); |
| let _: Result<Foo, _> = i32::try_into(0i32); |
| let _: Result<Foo, _> = Foo::try_from(0i32); |
| |
| // ... it does impl From<i64> however |
| let _: Result<Foo, _> = 0i64.try_into(); |
| //~^ ERROR: use of a fallible conversion when an infallible one could be used |
| let _: Result<Foo, _> = i64::try_into(0i64); |
| //~^ ERROR: use of a fallible conversion when an infallible one could be used |
| let _: Result<Foo, _> = Foo::try_from(0i64); |
| //~^ ERROR: use of a fallible conversion when an infallible one could be used |
| |
| let _: Result<i64, _> = 0i32.try_into(); |
| //~^ ERROR: use of a fallible conversion when an infallible one could be used |
| let _: Result<i64, _> = i32::try_into(0i32); |
| //~^ ERROR: use of a fallible conversion when an infallible one could be used |
| let _: Result<i64, _> = <_>::try_from(0i32); |
| //~^ ERROR: use of a fallible conversion when an infallible one could be used |
| |
| // From a macro |
| let _: Result<i64, _> = proc_macros::external!(0i32).try_into(); |
| } |