fix RedundantLocals clippy caused by async and await
This commit is contained in:
parent
b0e64a9c09
commit
0ff6579eac
@ -2,9 +2,11 @@
|
|||||||
use clippy_utils::is_from_proc_macro;
|
use clippy_utils::is_from_proc_macro;
|
||||||
use clippy_utils::ty::needs_ordered_drop;
|
use clippy_utils::ty::needs_ordered_drop;
|
||||||
use rustc_hir::def::Res;
|
use rustc_hir::def::Res;
|
||||||
use rustc_hir::{BindingAnnotation, ByRef, Expr, ExprKind, HirId, Local, Node, Pat, PatKind, QPath};
|
use rustc_hir::{
|
||||||
|
BindingAnnotation, ByRef, Expr, ExprKind, HirId, Local, Node, Pat, PatKind, QPath,
|
||||||
|
};
|
||||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||||
use rustc_middle::lint::in_external_macro;
|
use rustc_middle::lint::{in_external_macro, is_from_async_await};
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_span::symbol::Ident;
|
use rustc_span::symbol::Ident;
|
||||||
|
|
||||||
@ -65,6 +67,9 @@ fn check_local(&mut self, cx: &LateContext<'tcx>, local: &'tcx Local<'tcx>) {
|
|||||||
// the local is user-controlled
|
// the local is user-controlled
|
||||||
if !in_external_macro(cx.sess(), local.span);
|
if !in_external_macro(cx.sess(), local.span);
|
||||||
if !is_from_proc_macro(cx, expr);
|
if !is_from_proc_macro(cx, expr);
|
||||||
|
// Async function parameters are lowered into the closure body, so we can't lint them.
|
||||||
|
// see `lower_maybe_async_body` in `rust_ast_lowering`
|
||||||
|
if !is_from_async_await(local.span);
|
||||||
then {
|
then {
|
||||||
span_lint_and_help(
|
span_lint_and_help(
|
||||||
cx,
|
cx,
|
||||||
@ -93,7 +98,12 @@ fn find_binding(pat: &Pat<'_>, name: Ident) -> Option<BindingAnnotation> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Check if a rebinding of a local affects the code's drop behavior.
|
/// Check if a rebinding of a local affects the code's drop behavior.
|
||||||
fn affects_drop_behavior<'tcx>(cx: &LateContext<'tcx>, bind: HirId, rebind: HirId, rebind_expr: &Expr<'tcx>) -> bool {
|
fn affects_drop_behavior<'tcx>(
|
||||||
|
cx: &LateContext<'tcx>,
|
||||||
|
bind: HirId,
|
||||||
|
rebind: HirId,
|
||||||
|
rebind_expr: &Expr<'tcx>,
|
||||||
|
) -> bool {
|
||||||
let hir = cx.tcx.hir();
|
let hir = cx.tcx.hir();
|
||||||
|
|
||||||
// the rebinding is in a different scope than the original binding
|
// the rebinding is in a different scope than the original binding
|
||||||
|
Loading…
Reference in New Issue
Block a user