Add UI tests for future_prelude_collision
lint
This commit is contained in:
parent
c341d5b9d7
commit
35af38353e
4 changed files with 143 additions and 1 deletions
|
@ -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
|
||||
));
|
||||
|
||||
|
|
57
src/test/ui/lint/future-prelude-collision.fixed
Normal file
57
src/test/ui/lint/future-prelude-collision.fixed
Normal 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
|
||||
}
|
57
src/test/ui/lint/future-prelude-collision.rs
Normal file
57
src/test/ui/lint/future-prelude-collision.rs
Normal 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
|
||||
}
|
28
src/test/ui/lint/future-prelude-collision.stderr
Normal file
28
src/test/ui/lint/future-prelude-collision.stderr
Normal 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
|
||||
|
Loading…
Add table
Reference in a new issue