Add UI tests for future_prelude_collision lint

This commit is contained in:
jam1garner 2021-05-27 00:30:55 -04:00 committed by Niko Matsakis
parent c341d5b9d7
commit 35af38353e
4 changed files with 143 additions and 1 deletions

View file

@ -535,7 +535,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let trait_name = tcx.def_path_str(pick.item.container.assert_trait());
let mut lint = lint.build(&format!(
"trait method `{}` will become ambiguous in Rust 2021",
"trait-associated function `{}` will become ambiguous in Rust 2021",
method_name.name
));

View file

@ -0,0 +1,57 @@
// run-rustfix
// edition:2018
// check-pass
trait TryIntoU32 {
fn try_into(self) -> Result<u32, ()>;
}
impl TryIntoU32 for u8 {
fn try_into(self) -> Result<u32, ()> {
Ok(self as u32)
}
}
trait TryFromU8: Sized {
fn try_from(x: u8) -> Result<Self, ()>;
}
impl TryFromU8 for u32 {
fn try_from(x: u8) -> Result<Self, ()> {
Ok(x as u32)
}
}
trait FromByteIterator {
fn from_iter<T>(iter: T) -> Self
where T: Iterator<Item = u8>;
}
impl FromByteIterator for Vec<u8> {
fn from_iter<T>(iter: T) -> Self
where T: Iterator<Item = u8>
{
iter.collect()
}
}
fn main() {
// test dot-call that will break in 2021 edition
let _: u32 = TryIntoU32::try_into(3u8).unwrap();
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
// test associated function call that will break in 2021 edition
let _ = <u32 as TryFromU8>::try_from(3u8).unwrap();
//~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021
// test reverse turbofish too
let _ = <Vec<u8> as FromByteIterator>::from_iter(vec![1u8, 2, 3, 4, 5, 6].into_iter());
//~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021
// negative testing lint (this line should *not* emit a warning)
let _: u32 = TryFromU8::try_from(3u8).unwrap();
// test type omission
let _: u32 = <_ as TryFromU8>::try_from(3u8).unwrap();
//~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021
}

View file

@ -0,0 +1,57 @@
// run-rustfix
// edition:2018
// check-pass
trait TryIntoU32 {
fn try_into(self) -> Result<u32, ()>;
}
impl TryIntoU32 for u8 {
fn try_into(self) -> Result<u32, ()> {
Ok(self as u32)
}
}
trait TryFromU8: Sized {
fn try_from(x: u8) -> Result<Self, ()>;
}
impl TryFromU8 for u32 {
fn try_from(x: u8) -> Result<Self, ()> {
Ok(x as u32)
}
}
trait FromByteIterator {
fn from_iter<T>(iter: T) -> Self
where T: Iterator<Item = u8>;
}
impl FromByteIterator for Vec<u8> {
fn from_iter<T>(iter: T) -> Self
where T: Iterator<Item = u8>
{
iter.collect()
}
}
fn main() {
// test dot-call that will break in 2021 edition
let _: u32 = 3u8.try_into().unwrap();
//~^ WARNING trait method `try_into` will become ambiguous in Rust 2021
// test associated function call that will break in 2021 edition
let _ = u32::try_from(3u8).unwrap();
//~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021
// test reverse turbofish too
let _ = <Vec<u8>>::from_iter(vec![1u8, 2, 3, 4, 5, 6].into_iter());
//~^ WARNING trait-associated function `from_iter` will become ambiguous in Rust 2021
// negative testing lint (this line should *not* emit a warning)
let _: u32 = TryFromU8::try_from(3u8).unwrap();
// test type omission
let _: u32 = <_>::try_from(3u8).unwrap();
//~^ WARNING trait-associated function `try_from` will become ambiguous in Rust 2021
}

View file

@ -0,0 +1,28 @@
warning: trait method `try_into` will become ambiguous in Rust 2021
--> $DIR/future-prelude-collision.rs:40:18
|
LL | let _: u32 = 3u8.try_into().unwrap();
| ^^^^^^^^^^^^^^ help: disambiguate the associated function: `TryIntoU32::try_into(3u8)`
|
= note: `#[warn(future_prelude_collision)]` on by default
warning: trait-associated function `try_from` will become ambiguous in Rust 2021
--> $DIR/future-prelude-collision.rs:44:13
|
LL | let _ = u32::try_from(3u8).unwrap();
| ^^^^^^^^^^^^^ help: disambiguate the associated function: `<u32 as TryFromU8>::try_from`
warning: trait-associated function `from_iter` will become ambiguous in Rust 2021
--> $DIR/future-prelude-collision.rs:48:13
|
LL | let _ = <Vec<u8>>::from_iter(vec![1u8, 2, 3, 4, 5, 6].into_iter());
| ^^^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `<Vec<u8> as FromByteIterator>::from_iter`
warning: trait-associated function `try_from` will become ambiguous in Rust 2021
--> $DIR/future-prelude-collision.rs:55:18
|
LL | let _: u32 = <_>::try_from(3u8).unwrap();
| ^^^^^^^^^^^^^ help: disambiguate the associated function: `<_ as TryFromU8>::try_from`
warning: 4 warnings emitted