Skip to content

Commit 008ba73

Browse files
committed
Ignore fake read access
1 parent 63030ac commit 008ba73

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

clippy_lints/src/collection_is_never_read.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,15 @@ fn has_no_read_access<'tcx>(cx: &LateContext<'tcx>, id: HirId, block: &'tcx Bloc
120120
if let Some(Node::Stmt(..)) = get_parent_node(cx.tcx, parent.hir_id) {
121121
return ControlFlow::Continue(());
122122
}
123+
124+
// The method call is not a statement, so its return value is used somehow but its type is the
125+
// unit type, so this is not a real read access. Examples:
126+
//
127+
// let y = x.clear();
128+
// println!("{:?}", x.clear());
129+
if cx.typeck_results().expr_ty(parent).is_unit() {
130+
return ControlFlow::Continue(());
131+
}
123132
}
124133

125134
// Any other access to `id` is a read access. Stop searching.

tests/ui/collection_is_never_read.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,8 @@ fn shadowing_2() {
8585

8686
#[allow(clippy::let_unit_value)]
8787
fn fake_read() {
88-
let mut x = vec![1, 2, 3]; // Ok
88+
let mut x = vec![1, 2, 3]; // WARNING
8989
x.reverse();
90-
// `collection_is_never_read` gets fooled, but other lints should catch this.
9190
let _: () = x.clear();
9291
}
9392

tests/ui/collection_is_never_read.stderr

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,40 +25,46 @@ LL | let mut x = HashMap::new(); // WARNING
2525
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2626

2727
error: collection is never read
28-
--> $DIR/collection_is_never_read.rs:95:5
28+
--> $DIR/collection_is_never_read.rs:88:5
2929
|
3030
LL | let mut x = vec![1, 2, 3]; // WARNING
3131
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
3232

3333
error: collection is never read
34-
--> $DIR/collection_is_never_read.rs:102:5
34+
--> $DIR/collection_is_never_read.rs:94:5
3535
|
3636
LL | let mut x = vec![1, 2, 3]; // WARNING
3737
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
3838

3939
error: collection is never read
40-
--> $DIR/collection_is_never_read.rs:119:5
40+
--> $DIR/collection_is_never_read.rs:101:5
41+
|
42+
LL | let mut x = vec![1, 2, 3]; // WARNING
43+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
44+
45+
error: collection is never read
46+
--> $DIR/collection_is_never_read.rs:118:5
4147
|
4248
LL | let mut x = HashSet::new(); // WARNING
4349
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
4450

4551
error: collection is never read
46-
--> $DIR/collection_is_never_read.rs:133:5
52+
--> $DIR/collection_is_never_read.rs:132:5
4753
|
4854
LL | let x = vec![1, 2, 3]; // WARNING
4955
| ^^^^^^^^^^^^^^^^^^^^^^
5056

5157
error: collection is never read
52-
--> $DIR/collection_is_never_read.rs:169:5
58+
--> $DIR/collection_is_never_read.rs:168:5
5359
|
5460
LL | let mut s = String::new();
5561
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
5662

5763
error: collection is never read
58-
--> $DIR/collection_is_never_read.rs:182:5
64+
--> $DIR/collection_is_never_read.rs:181:5
5965
|
6066
LL | let mut s = String::from("Hello, World!");
6167
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6268

63-
error: aborting due to 10 previous errors
69+
error: aborting due to 11 previous errors
6470

0 commit comments

Comments
 (0)