Auto merge of #10096 - feniljain:fix-seek-rewind, r=xFrednet

fix: not suggest seek_to_start_instead_of_rewind when expr is used

changelog: [`seek_to_start_instead_of_rewind`]: No longer lints, if the return of `seek` is used.
[#10096](https://github.com/rust-lang/rust-clippy/pull/10096)
<!-- changelog_checked -->

Fixes #10065
This commit is contained in:
bors 2022-12-17 12:35:26 +00:00
commit 391b2a6fac
4 changed files with 18 additions and 2 deletions

View file

@ -1,6 +1,6 @@
use clippy_utils::diagnostics::span_lint_and_then;
use clippy_utils::ty::implements_trait;
use clippy_utils::{get_trait_def_id, match_def_path, paths};
use clippy_utils::{get_trait_def_id, is_expr_used_or_unified, match_def_path, paths};
use rustc_ast::ast::{LitIntType, LitKind};
use rustc_errors::Applicability;
use rustc_hir::{Expr, ExprKind};
@ -19,6 +19,10 @@ pub(super) fn check<'tcx>(
// Get receiver type
let ty = cx.typeck_results().expr_ty(recv).peel_refs();
if is_expr_used_or_unified(cx.tcx, expr) {
return;
}
if let Some(seek_trait_id) = get_trait_def_id(cx, &paths::STD_IO_SEEK) &&
implements_trait(cx, ty, seek_trait_id, &[]) &&
let ExprKind::Call(func, args1) = arg.kind &&

View file

@ -70,6 +70,12 @@ fn seek_to_end<T: Seek>(t: &mut T) {
t.seek(SeekFrom::End(0));
}
// This should NOT trigger clippy warning because
// expr is used here
fn seek_to_start_in_let<T: Seek>(t: &mut T) {
let a = t.seek(SeekFrom::Start(0)).unwrap();
}
fn main() {
let mut f = OpenOptions::new()
.write(true)

View file

@ -70,6 +70,12 @@ fn seek_to_end<T: Seek>(t: &mut T) {
t.seek(SeekFrom::End(0));
}
// This should NOT trigger clippy warning because
// expr is used here
fn seek_to_start_in_let<T: Seek>(t: &mut T) {
let a = t.seek(SeekFrom::Start(0)).unwrap();
}
fn main() {
let mut f = OpenOptions::new()
.write(true)

View file

@ -13,7 +13,7 @@ LL | t.seek(SeekFrom::Start(0));
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `rewind()`
error: used `seek` to go to the start of the stream
--> $DIR/seek_to_start_instead_of_rewind.rs:128:7
--> $DIR/seek_to_start_instead_of_rewind.rs:134:7
|
LL | f.seek(SeekFrom::Start(0));
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `rewind()`