use if_chain::if_chain;
-use rustc_hir::{PatKind, Stmt, StmtKind};
+use rustc_hir::{Local, PatKind};
use rustc_lint::{LateContext, LateLintPass};
use rustc_middle::lint::in_external_macro;
use rustc_session::{declare_lint_pass, declare_tool_lint};
];
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for LetUnderscore {
- fn check_stmt(&mut self, cx: &LateContext<'_, '_>, stmt: &Stmt<'_>) {
- if in_external_macro(cx.tcx.sess, stmt.span) {
+ fn check_local(&mut self, cx: &LateContext<'_, '_>, local: &Local<'_>) {
+ if in_external_macro(cx.tcx.sess, local.span) {
return;
}
if_chain! {
- if let StmtKind::Local(ref local) = stmt.kind;
if let PatKind::Wild = local.pat.kind;
if let Some(ref init) = local.init;
then {
span_lint_and_help(
cx,
LET_UNDERSCORE_LOCK,
- stmt.span,
+ local.span,
"non-binding let on a synchronization lock",
"consider using an underscore-prefixed named \
binding or dropping explicitly with `std::mem::drop`"
span_lint_and_help(
cx,
LET_UNDERSCORE_MUST_USE,
- stmt.span,
+ local.span,
"non-binding let on an expression with `#[must_use]` type",
"consider explicitly using expression value"
)
span_lint_and_help(
cx,
LET_UNDERSCORE_MUST_USE,
- stmt.span,
+ local.span,
"non-binding let on a result of a `#[must_use]` function",
"consider explicitly using function result"
)