Skip to content

Commit 5ddfaee

Browse files
committed
Ignore fake read access
1 parent 04687b5 commit 5ddfaee

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

clippy_lints/src/collection_is_never_read.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,15 @@ fn has_no_read_access<'tcx>(cx: &LateContext<'tcx>, id: HirId, block: &'tcx Bloc
114114
if let Some(Node::Stmt(..)) = get_parent_node(cx.tcx, parent.hir_id) {
115115
return ControlFlow::Continue(());
116116
}
117+
118+
// The method call is not a stement, so its return value is used somehow but its type is the
119+
// unit type, so this is not a real read access. Examples:
120+
//
121+
// let y = x.clear();
122+
// println!("{:?}", x.clear());
123+
if cx.typeck_results().expr_ty(parent).is_unit() {
124+
return ControlFlow::Continue(());
125+
}
117126
}
118127

119128
// 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: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,34 @@ 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

51-
error: aborting due to 8 previous errors
57+
error: aborting due to 9 previous errors
5258

0 commit comments

Comments
 (0)