RUST_2021_PRELUDE_COLLISIONS in rustc_lint_defs::builtin - Rust
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.

Skip to main content

## RUST_2021_PRELUDE_COLLISIONS

# Static RUST_2021_PRELUDE_COLLISIONS

Source

    pub static RUST_2021_PRELUDE_COLLISIONS: &Lint

Expand 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.