From aa8a82ec269a34d9bed7919ba8926c8551efdbeb Mon Sep 17 00:00:00 2001 From: "taiga.watanabe" Date: Tue, 20 Feb 2024 14:25:56 +0900 Subject: [PATCH 1/2] FIX: issue-12279 ---- UPDATE: add async block into test. FIX: no_effect Fixed asynchronous function parameter names with underscores so that warnings are not displayed when underscores are added to parameter names ADD: test case --- clippy_lints/src/no_effect.rs | 5 +-- tests/ui/no_effect_async_fn.rs | 50 ++++++++++++++++++++++++++++++ tests/ui/no_effect_async_fn.stderr | 29 +++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 tests/ui/no_effect_async_fn.rs create mode 100644 tests/ui/no_effect_async_fn.stderr diff --git a/clippy_lints/src/no_effect.rs b/clippy_lints/src/no_effect.rs index 580160efe..6adb5098e 100644 --- a/clippy_lints/src/no_effect.rs +++ b/clippy_lints/src/no_effect.rs @@ -5,8 +5,8 @@ use clippy_utils::{any_parent_is_automatically_derived, get_parent_node, is_lint use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{ - is_range_literal, BinOpKind, BlockCheckMode, Expr, ExprKind, HirId, HirIdMap, ItemKind, Node, PatKind, Stmt, - StmtKind, UnsafeSource, + is_range_literal, BinOpKind, BlockCheckMode, Expr, ExprKind, HirId, HirIdMap, ItemKind, LocalSource, Node, PatKind, + Stmt, StmtKind, UnsafeSource, }; use rustc_infer::infer::TyCtxtInferExt as _; use rustc_lint::{LateContext, LateLintPass, LintContext}; @@ -178,6 +178,7 @@ impl NoEffect { } } else if let StmtKind::Local(local) = stmt.kind { if !is_lint_allowed(cx, NO_EFFECT_UNDERSCORE_BINDING, local.hir_id) + && !matches!(local.source, LocalSource::AsyncFn) && let Some(init) = local.init && local.els.is_none() && !local.pat.span.from_expansion() diff --git a/tests/ui/no_effect_async_fn.rs b/tests/ui/no_effect_async_fn.rs new file mode 100644 index 000000000..ef0f3d1df --- /dev/null +++ b/tests/ui/no_effect_async_fn.rs @@ -0,0 +1,50 @@ +#![warn(clippy::no_effect_underscore_binding)] +#![no_main] + +trait AsyncTrait { + async fn bar(i: u64); +} + +struct Bar; + +impl AsyncTrait for Bar { + // Shouldn't lint `binding to `_` prefixed variable with no side-effect` + async fn bar(_i: u64) { + let _a = 0; + //~^ ERROR: binding to `_` prefixed variable with no side-effect + + // Shouldn't lint `binding to `_` prefixed variable with no side-effect` + let _b = num(); + + let _ = async { + let _c = 0; + //~^ ERROR: binding to `_` prefixed variable with no side-effect + + // Shouldn't lint `binding to `_` prefixed variable with no side-effect` + let _d = num(); + } + .await; + } +} + +// Shouldn't lint `binding to `_` prefixed variable with no side-effect` +async fn foo(_i: u64) { + let _a = 0; + //~^ ERROR: binding to `_` prefixed variable with no side-effect + + // Shouldn't lint `binding to `_` prefixed variable with no side-effect` + let _b = num(); + + let _ = async { + let _c = 0; + //~^ ERROR: binding to `_` prefixed variable with no side-effect + + // Shouldn't lint `binding to `_` prefixed variable with no side-effect` + let _d = num(); + } + .await; +} + +fn num() -> usize { + 0 +} diff --git a/tests/ui/no_effect_async_fn.stderr b/tests/ui/no_effect_async_fn.stderr new file mode 100644 index 000000000..2325eb9aa --- /dev/null +++ b/tests/ui/no_effect_async_fn.stderr @@ -0,0 +1,29 @@ +error: binding to `_` prefixed variable with no side-effect + --> tests/ui/no_effect_async_fn.rs:20:17 + | +LL | let _c = 0; + | ^^ + | + = note: `-D clippy::no-effect-underscore-binding` implied by `-D warnings` + = help: to override `-D warnings` add `#[allow(clippy::no_effect_underscore_binding)]` + +error: binding to `_` prefixed variable with no side-effect + --> tests/ui/no_effect_async_fn.rs:13:13 + | +LL | let _a = 0; + | ^^ + +error: binding to `_` prefixed variable with no side-effect + --> tests/ui/no_effect_async_fn.rs:39:13 + | +LL | let _c = 0; + | ^^ + +error: binding to `_` prefixed variable with no side-effect + --> tests/ui/no_effect_async_fn.rs:32:9 + | +LL | let _a = 0; + | ^^ + +error: aborting due to 4 previous errors + From 672bd5e3876290185e1e1b421ff0f0d50ea1e568 Mon Sep 17 00:00:00 2001 From: "taiga.watanabe" Date: Wed, 21 Feb 2024 10:42:45 +0900 Subject: [PATCH 2/2] DELETE: Known problems Section The `Known problems` section was removed because it is old information. --- clippy_lints/src/no_effect.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/clippy_lints/src/no_effect.rs b/clippy_lints/src/no_effect.rs index 6adb5098e..1b4e1ed06 100644 --- a/clippy_lints/src/no_effect.rs +++ b/clippy_lints/src/no_effect.rs @@ -43,10 +43,6 @@ declare_clippy_lint! { /// executed. However, as they have no effect and shouldn't be used further on, all they /// do is make the code less readable. /// - /// ### Known problems - /// Further usage of this variable is not checked, which can lead to false positives if it is - /// used later in the code. - /// /// ### Example /// ```rust,ignore /// let _i_serve_no_purpose = 1;