pub static RUST_2021_PRELUDE_COLLISIONS: &LintExpand description
The rust_2021_prelude_collisions lint detects the usage of trait methods which are ambiguous
with traits added to the prelude in future editions.
§Example
ⓘ
#![deny(rust_2021_prelude_collisions)]
trait Foo {
fn try_into(self) -> Result<String, !>;
}
impl Foo for &str {
fn try_into(self) -> Result<String, !> {
Ok(String::from(self))
}
}
fn main() {
let x: String = "3".try_into().unwrap();
// ^^^^^^^^
// This call to try_into matches both Foo::try_into and TryInto::try_into as
// `TryInto` has been added to the Rust prelude in 2021 edition.
println!("{x}");
}{{produces}}
§Explanation
In Rust 2021, one of the important introductions is the prelude changes, which add
TryFrom, TryInto, and FromIterator into the standard library’s prelude. Since this
results in an ambiguity as to which method/function to call when an existing try_into
method is called via dot-call syntax or a try_from/from_iter associated function
is called directly on a type.