Split up cmp_owned tests, add run-rustfix

Some of the cmp_owned tests emitted non-machine-applicable suggestions,
so I moved them to `tests/ui/cmp_owned/without_suggestion.rs` and added
`// run-rustfix` to the other half.

cc #3630
This commit is contained in:
Philipp Hansch 2019-08-24 09:23:06 +02:00
parent 6d9ee9e5eb
commit 9a0b598b73
No known key found for this signature in database
GPG Key ID: 82AA61CAA11397E6
5 changed files with 160 additions and 36 deletions

View File

@ -0,0 +1,72 @@
// run-rustfix
#[warn(clippy::cmp_owned)]
#[allow(clippy::unnecessary_operation, clippy::no_effect, unused_must_use, clippy::eq_op)]
fn main() {
fn with_to_string(x: &str) {
x != "foo";
"foo" != x;
}
let x = "oh";
with_to_string(x);
x != "foo";
x != "foo";
42.to_string() == "42";
Foo == Foo;
"abc".chars().filter(|c| *c != 'X');
"abc".chars().filter(|c| *c != 'X');
}
struct Foo;
impl PartialEq for Foo {
// Allow this here, because it emits the lint
// without a suggestion. This is tested in
// `tests/ui/cmp_owned_without_suggestion.rs`
#[allow(clippy::cmp_owned)]
fn eq(&self, other: &Self) -> bool {
self.to_owned() == *other
}
}
impl ToOwned for Foo {
type Owned = Bar;
fn to_owned(&self) -> Bar {
Bar
}
}
#[derive(PartialEq)]
struct Bar;
impl PartialEq<Foo> for Bar {
fn eq(&self, _: &Foo) -> bool {
true
}
}
impl std::borrow::Borrow<Foo> for Bar {
fn borrow(&self) -> &Foo {
static FOO: Foo = Foo;
&FOO
}
}
#[derive(PartialEq)]
struct Baz;
impl ToOwned for Baz {
type Owned = Baz;
fn to_owned(&self) -> Baz {
Baz
}
}

View File

@ -1,5 +1,7 @@
// run-rustfix
#[warn(clippy::cmp_owned)] #[warn(clippy::cmp_owned)]
#[allow(clippy::unnecessary_operation)] #[allow(clippy::unnecessary_operation, clippy::no_effect, unused_must_use, clippy::eq_op)]
fn main() { fn main() {
fn with_to_string(x: &str) { fn with_to_string(x: &str) {
x != "foo".to_string(); x != "foo".to_string();
@ -22,21 +24,15 @@ fn main() {
"abc".chars().filter(|c| c.to_owned() != 'X'); "abc".chars().filter(|c| c.to_owned() != 'X');
"abc".chars().filter(|c| *c != 'X'); "abc".chars().filter(|c| *c != 'X');
let x = &Baz;
let y = &Baz;
y.to_owned() == *x;
let x = &&Baz;
let y = &Baz;
y.to_owned() == **x;
} }
struct Foo; struct Foo;
impl PartialEq for Foo { impl PartialEq for Foo {
// Allow this here, because it emits the lint
// without a suggestion. This is tested in
// `tests/ui/cmp_owned_without_suggestion.rs`
#[allow(clippy::cmp_owned)]
fn eq(&self, other: &Self) -> bool { fn eq(&self, other: &Self) -> bool {
self.to_owned() == *other self.to_owned() == *other
} }

View File

@ -1,5 +1,5 @@
error: this creates an owned instance just for comparison error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:5:14 --> $DIR/with_suggestion.rs:7:14
| |
LL | x != "foo".to_string(); LL | x != "foo".to_string();
| ^^^^^^^^^^^^^^^^^ help: try: `"foo"` | ^^^^^^^^^^^^^^^^^ help: try: `"foo"`
@ -7,52 +7,34 @@ LL | x != "foo".to_string();
= note: `-D clippy::cmp-owned` implied by `-D warnings` = note: `-D clippy::cmp-owned` implied by `-D warnings`
error: this creates an owned instance just for comparison error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:7:9 --> $DIR/with_suggestion.rs:9:9
| |
LL | "foo".to_string() != x; LL | "foo".to_string() != x;
| ^^^^^^^^^^^^^^^^^ help: try: `"foo"` | ^^^^^^^^^^^^^^^^^ help: try: `"foo"`
error: this creates an owned instance just for comparison error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:14:10 --> $DIR/with_suggestion.rs:16:10
| |
LL | x != "foo".to_owned(); LL | x != "foo".to_owned();
| ^^^^^^^^^^^^^^^^ help: try: `"foo"` | ^^^^^^^^^^^^^^^^ help: try: `"foo"`
error: this creates an owned instance just for comparison error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:16:10 --> $DIR/with_suggestion.rs:18:10
| |
LL | x != String::from("foo"); LL | x != String::from("foo");
| ^^^^^^^^^^^^^^^^^^^ help: try: `"foo"` | ^^^^^^^^^^^^^^^^^^^ help: try: `"foo"`
error: this creates an owned instance just for comparison error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:20:5 --> $DIR/with_suggestion.rs:22:5
| |
LL | Foo.to_owned() == Foo; LL | Foo.to_owned() == Foo;
| ^^^^^^^^^^^^^^ help: try: `Foo` | ^^^^^^^^^^^^^^ help: try: `Foo`
error: this creates an owned instance just for comparison error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:22:30 --> $DIR/with_suggestion.rs:24:30
| |
LL | "abc".chars().filter(|c| c.to_owned() != 'X'); LL | "abc".chars().filter(|c| c.to_owned() != 'X');
| ^^^^^^^^^^^^ help: try: `*c` | ^^^^^^^^^^^^ help: try: `*c`
error: this creates an owned instance just for comparison error: aborting due to 6 previous errors
--> $DIR/cmp_owned.rs:29:5
|
LL | y.to_owned() == *x;
| ^^^^^^^^^^^^^^^^^^ try implementing the comparison without allocating
error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:34:5
|
LL | y.to_owned() == **x;
| ^^^^^^^^^^^^^^^^^^^ try implementing the comparison without allocating
error: this creates an owned instance just for comparison
--> $DIR/cmp_owned.rs:41:9
|
LL | self.to_owned() == *other
| ^^^^^^^^^^^^^^^^^^^^^^^^^ try implementing the comparison without allocating
error: aborting due to 9 previous errors

View File

@ -0,0 +1,52 @@
#[allow(clippy::unnecessary_operation)]
fn main() {
let x = &Baz;
let y = &Baz;
y.to_owned() == *x;
let x = &&Baz;
let y = &Baz;
y.to_owned() == **x;
}
struct Foo;
impl PartialEq for Foo {
fn eq(&self, other: &Self) -> bool {
self.to_owned() == *other
}
}
impl ToOwned for Foo {
type Owned = Bar;
fn to_owned(&self) -> Bar {
Bar
}
}
#[derive(PartialEq)]
struct Baz;
impl ToOwned for Baz {
type Owned = Baz;
fn to_owned(&self) -> Baz {
Baz
}
}
#[derive(PartialEq)]
struct Bar;
impl PartialEq<Foo> for Bar {
fn eq(&self, _: &Foo) -> bool {
true
}
}
impl std::borrow::Borrow<Foo> for Bar {
fn borrow(&self) -> &Foo {
static FOO: Foo = Foo;
&FOO
}
}

View File

@ -0,0 +1,22 @@
error: this creates an owned instance just for comparison
--> $DIR/without_suggestion.rs:6:5
|
LL | y.to_owned() == *x;
| ^^^^^^^^^^^^^^^^^^ try implementing the comparison without allocating
|
= note: `-D clippy::cmp-owned` implied by `-D warnings`
error: this creates an owned instance just for comparison
--> $DIR/without_suggestion.rs:10:5
|
LL | y.to_owned() == **x;
| ^^^^^^^^^^^^^^^^^^^ try implementing the comparison without allocating
error: this creates an owned instance just for comparison
--> $DIR/without_suggestion.rs:17:9
|
LL | self.to_owned() == *other
| ^^^^^^^^^^^^^^^^^^^^^^^^^ try implementing the comparison without allocating
error: aborting due to 3 previous errors