29 lines
981 B
Rust
29 lines
981 B
Rust
|
use clippy_utils::diagnostics::span_lint_and_help;
|
||
|
use clippy_utils::is_trait_method;
|
||
|
use clippy_utils::ty::is_type_diagnostic_item;
|
||
|
use rustc_hir::{Expr, ExprKind, QPath};
|
||
|
use rustc_lint::LateContext;
|
||
|
use rustc_span::sym;
|
||
|
|
||
|
use super::VERBOSE_FILE_READS;
|
||
|
|
||
|
pub(super) const READ_TO_END_MSG: (&str, &str) = ("use of `File::read_to_end`", "consider using `fs::read` instead");
|
||
|
pub(super) const READ_TO_STRING_MSG: (&str, &str) = (
|
||
|
"use of `File::read_to_string`",
|
||
|
"consider using `fs::read_to_string` instead",
|
||
|
);
|
||
|
|
||
|
pub(super) fn check<'tcx>(
|
||
|
cx: &LateContext<'tcx>,
|
||
|
expr: &'tcx Expr<'_>,
|
||
|
recv: &'tcx Expr<'_>,
|
||
|
(msg, help): (&str, &str),
|
||
|
) {
|
||
|
if is_trait_method(cx, expr, sym::IoRead)
|
||
|
&& matches!(recv.kind, ExprKind::Path(QPath::Resolved(None, _)))
|
||
|
&& is_type_diagnostic_item(cx, cx.typeck_results().expr_ty_adjusted(recv).peel_refs(), sym::File)
|
||
|
{
|
||
|
span_lint_and_help(cx, VERBOSE_FILE_READS, expr.span, msg, None, help);
|
||
|
}
|
||
|
}
|