Skip to content

Commit 622b167

Browse files
committed
needless_borrow: allow other lints, make fixable
1 parent 0d8e4d7 commit 622b167

File tree

3 files changed

+70
-20
lines changed

3 files changed

+70
-20
lines changed

tests/ui/needless_borrow.fixed

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// run-rustfix
2+
3+
#![allow(clippy::needless_borrowed_reference)]
4+
5+
#[allow(clippy::trivially_copy_pass_by_ref)]
6+
fn x(y: &i32) -> i32 {
7+
*y
8+
}
9+
10+
#[warn(clippy::all, clippy::needless_borrow)]
11+
#[allow(unused_variables)]
12+
fn main() {
13+
let a = 5;
14+
let b = x(&a);
15+
let c = x(&a);
16+
let s = &String::from("hi");
17+
let s_ident = f(&s); // should not error, because `&String` implements Copy, but `String` does not
18+
let g_val = g(&Vec::new()); // should not error, because `&Vec<T>` derefs to `&[T]`
19+
let vec = Vec::new();
20+
let vec_val = g(&vec); // should not error, because `&Vec<T>` derefs to `&[T]`
21+
h(&"foo"); // should not error, because the `&&str` is required, due to `&Trait`
22+
if let Some(cake) = Some(&5) {}
23+
let garbl = match 42 {
24+
44 => &a,
25+
45 => {
26+
println!("foo");
27+
&&a // FIXME: this should lint, too
28+
},
29+
46 => &a,
30+
_ => panic!(),
31+
};
32+
}
33+
34+
fn f<T: Copy>(y: &T) -> T {
35+
*y
36+
}
37+
38+
fn g(y: &[u8]) -> u8 {
39+
y[0]
40+
}
41+
42+
trait Trait {}
43+
44+
impl<'a> Trait for &'a str {}
45+
46+
fn h(_: &dyn Trait) {}
47+
#[warn(clippy::needless_borrow)]
48+
#[allow(dead_code)]
49+
fn issue_1432() {
50+
let mut v = Vec::<String>::new();
51+
let _ = v.iter_mut().filter(|&ref a| a.is_empty());
52+
let _ = v.iter().filter(|&a| a.is_empty());
53+
54+
let _ = v.iter().filter(|&a| a.is_empty());
55+
}
56+
57+
#[allow(dead_code)]
58+
#[warn(clippy::needless_borrow)]
59+
#[derive(Debug)]
60+
enum Foo<'a> {
61+
Str(&'a str),
62+
}

tests/ui/needless_borrow.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use std::borrow::Cow;
1+
// run-rustfix
2+
3+
#![allow(clippy::needless_borrowed_reference)]
24

35
#[allow(clippy::trivially_copy_pass_by_ref)]
46
fn x(y: &i32) -> i32 {

tests/ui/needless_borrow.stderr

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,28 @@
11
error: this expression borrows a reference that is immediately dereferenced by the compiler
2-
--> $DIR/needless_borrow.rs:13:15
2+
--> $DIR/needless_borrow.rs:15:15
33
|
44
LL | let c = x(&&a);
55
| ^^^ help: change this to: `&a`
66
|
77
= note: `-D clippy::needless-borrow` implied by `-D warnings`
88

99
error: this pattern creates a reference to a reference
10-
--> $DIR/needless_borrow.rs:20:17
10+
--> $DIR/needless_borrow.rs:22:17
1111
|
1212
LL | if let Some(ref cake) = Some(&5) {}
1313
| ^^^^^^^^ help: change this to: `cake`
1414

1515
error: this expression borrows a reference that is immediately dereferenced by the compiler
16-
--> $DIR/needless_borrow.rs:27:15
16+
--> $DIR/needless_borrow.rs:29:15
1717
|
1818
LL | 46 => &&a,
1919
| ^^^ help: change this to: `&a`
2020

21-
error: this pattern takes a reference on something that is being de-referenced
22-
--> $DIR/needless_borrow.rs:49:34
23-
|
24-
LL | let _ = v.iter_mut().filter(|&ref a| a.is_empty());
25-
| ^^^^^^ help: try removing the `&ref` part and just keep: `a`
26-
|
27-
= note: `-D clippy::needless-borrowed-reference` implied by `-D warnings`
28-
29-
error: this pattern takes a reference on something that is being de-referenced
30-
--> $DIR/needless_borrow.rs:50:30
31-
|
32-
LL | let _ = v.iter().filter(|&ref a| a.is_empty());
33-
| ^^^^^^ help: try removing the `&ref` part and just keep: `a`
34-
3521
error: this pattern creates a reference to a reference
36-
--> $DIR/needless_borrow.rs:50:31
22+
--> $DIR/needless_borrow.rs:52:31
3723
|
3824
LL | let _ = v.iter().filter(|&ref a| a.is_empty());
3925
| ^^^^^ help: change this to: `a`
4026

41-
error: aborting due to 6 previous errors
27+
error: aborting due to 4 previous errors
4228

0 commit comments

Comments
 (0)