Clippy lints / Suspicious
Clippy lint · Suspicious · checked with Clippy 0.1.99
clippy::infallible_try_from: infallible TryFrom impl; consider implementing From instead
What it meansFinds manual impls of TryFrom with infallible error types. It is in the suspicious group and warns by default.
What you see
warning: infallible TryFrom impl; consider implementing From instead --> main.rs:5:1 | 5 | impl TryFrom<i16> for MyStruct { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 6 | type Error = Infallible; | ---------- infallible error type | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#infallible_try_from = note: `#[warn(clippy::infallible_try_from)]` on by default
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
Infallible conversions should be implemented via From with the blanket conversion.
Code that is most likely wrong or useless. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
use std::convert::Infallible;
struct MyStruct(i16);
impl TryFrom<i16> for MyStruct {
type Error = Infallible;
fn try_from(other: i16) -> Result<Self, Infallible> {
Ok(Self(other.into()))
}
}
Write this instead
struct MyStruct(i16);
impl From<i16> for MyStruct {
fn from(other: i16) -> Self {
Self(other)
}
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::infallible_try_from)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
infallible_try_from = "allow"One run
cargo clippy -- -A clippy::infallible-try-fromThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Finds manual impls of TryFrom with infallible error types.
Why is this bad?
Infallible conversions should be implemented via From with the blanket conversion.
Example
use std::convert::Infallible;
struct MyStruct(i16);
impl TryFrom<i16> for MyStruct {
type Error = Infallible;
fn try_from(other: i16) -> Result<Self, Infallible> {
Ok(Self(other.into()))
}
}
Use instead:
struct MyStruct(i16);
impl From<i16> for MyStruct {
fn from(other: i16) -> Self {
Self(other)
}
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- from_raw_with_void_ptrChecks if we’re passing a c_void raw pointer to {Box,Rc,Arc,Weak}::from_raw(_)
- incompatible_msrvThis lint checks that no function newer than the defined MSRV (minimum supported rust version) is used in the crate
- ineffective_open_optionsChecks if both .write(true) and .append(true) methods are called on a same OpenOptions
- iter_out_of_boundsthis `.take()` call takes more items than the iterator will produce
- join_absolute_pathsChecks for calls to Path::join that start with a path separator (\\ or /)
- let_underscore_futurenon-binding `let` on a future
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::from_raw_with_void_ptrChecks if we’re passing a c_void raw pointer to {Box,Rc,Arc,Weak}::from_raw(_)Read it next →Did this answer your question?