don't add paren on occurrences that is in call args

This commit is contained in:
Kisaragi Marine 2023-11-28 00:27:51 +09:00
parent 40b6aa0e86
commit 33182495ac
No known key found for this signature in database
GPG key ID: C6631564CD2110E4
4 changed files with 49 additions and 30 deletions

View file

@ -5,7 +5,7 @@ use clippy_utils::sugg::Sugg;
use rustc_errors::Applicability; use rustc_errors::Applicability;
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::intravisit::{Visitor as HirVisitor, Visitor}; use rustc_hir::intravisit::{Visitor as HirVisitor, Visitor};
use rustc_hir::{intravisit as hir_visit, CoroutineKind, CoroutineSource}; use rustc_hir::{intravisit as hir_visit, CoroutineKind, CoroutineSource, Node};
use rustc_lint::{LateContext, LateLintPass}; use rustc_lint::{LateContext, LateLintPass};
use rustc_middle::hir::nested_filter; use rustc_middle::hir::nested_filter;
use rustc_middle::lint::in_external_macro; use rustc_middle::lint::in_external_macro;
@ -176,12 +176,19 @@ impl<'tcx> LateLintPass<'tcx> for RedundantClosureCall {
hint = hint.asyncify(); hint = hint.asyncify();
} }
diag.span_suggestion( let is_in_fn_call_arg = clippy_utils::get_parent_node(cx.tcx, expr.hir_id)
full_expr.span, .map(|x| match x {
"try doing something like", Node::Expr(expr) => matches!(expr.kind, hir::ExprKind::Call(_, _)),
hint.maybe_par(), _ => false,
applicability, })
); .unwrap_or(false);
// avoid clippy::double_parens
if !is_in_fn_call_arg {
hint = hint.maybe_par()
};
diag.span_suggestion(full_expr.span, "try doing something like", hint, applicability);
} }
}, },
); );

View file

@ -3,7 +3,6 @@
#![allow(clippy::redundant_async_block)] #![allow(clippy::redundant_async_block)]
#![allow(clippy::type_complexity)] #![allow(clippy::type_complexity)]
#![allow(unused)] #![allow(unused)]
#![allow(clippy::double_parens)]
async fn something() -> u32 { async fn something() -> u32 {
21 21
@ -87,7 +86,7 @@ fn issue9956() {
} }
async fn issue11357() { async fn issue11357() {
(async {}).await; async {}.await;
} }
mod issue11707 { mod issue11707 {
@ -96,6 +95,10 @@ mod issue11707 {
fn spawn_on(fut: impl Future<Output = ()>) {} fn spawn_on(fut: impl Future<Output = ()>) {}
fn demo() { fn demo() {
spawn_on((async move {})); spawn_on(async move {});
} }
} }
fn avoid_double_parens() {
std::convert::identity(13_i32 + 36_i32).leading_zeros();
}

View file

@ -3,7 +3,6 @@
#![allow(clippy::redundant_async_block)] #![allow(clippy::redundant_async_block)]
#![allow(clippy::type_complexity)] #![allow(clippy::type_complexity)]
#![allow(unused)] #![allow(unused)]
#![allow(clippy::double_parens)]
async fn something() -> u32 { async fn something() -> u32 {
21 21
@ -99,3 +98,7 @@ mod issue11707 {
spawn_on((|| async move {})()); spawn_on((|| async move {})());
} }
} }
fn avoid_double_parens() {
std::convert::identity((|| 13_i32 + 36_i32)()).leading_zeros();
}

View file

@ -1,5 +1,5 @@
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:17:13 --> $DIR/redundant_closure_call_fixable.rs:16:13
| |
LL | let a = (|| 42)(); LL | let a = (|| 42)();
| ^^^^^^^^^ help: try doing something like: `42` | ^^^^^^^^^ help: try doing something like: `42`
@ -8,7 +8,7 @@ LL | let a = (|| 42)();
= help: to override `-D warnings` add `#[allow(clippy::redundant_closure_call)]` = help: to override `-D warnings` add `#[allow(clippy::redundant_closure_call)]`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:18:13 --> $DIR/redundant_closure_call_fixable.rs:17:13
| |
LL | let b = (async || { LL | let b = (async || {
| _____________^ | _____________^
@ -28,7 +28,7 @@ LL ~ };
| |
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:23:13 --> $DIR/redundant_closure_call_fixable.rs:22:13
| |
LL | let c = (|| { LL | let c = (|| {
| _____________^ | _____________^
@ -48,13 +48,13 @@ LL ~ };
| |
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:28:13 --> $DIR/redundant_closure_call_fixable.rs:27:13
| |
LL | let d = (async || something().await)(); LL | let d = (async || something().await)();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `async { something().await }` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `async { something().await }`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:37:13 --> $DIR/redundant_closure_call_fixable.rs:36:13
| |
LL | (|| m!())() LL | (|| m!())()
| ^^^^^^^^^^^ help: try doing something like: `m!()` | ^^^^^^^^^^^ help: try doing something like: `m!()`
@ -65,7 +65,7 @@ LL | m2!();
= note: this error originates in the macro `m2` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `m2` (in Nightly builds, run with -Z macro-backtrace for more info)
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:32:13 --> $DIR/redundant_closure_call_fixable.rs:31:13
| |
LL | (|| 0)() LL | (|| 0)()
| ^^^^^^^^ help: try doing something like: `0` | ^^^^^^^^ help: try doing something like: `0`
@ -76,64 +76,70 @@ LL | m2!();
= note: this error originates in the macro `m` which comes from the expansion of the macro `m2` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `m` which comes from the expansion of the macro `m2` (in Nightly builds, run with -Z macro-backtrace for more info)
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:45:16 --> $DIR/redundant_closure_call_fixable.rs:44:16
| |
LL | assert_eq!((|| || 43)()(), 42); LL | assert_eq!((|| || 43)()(), 42);
| ^^^^^^^^^^^^^^ help: try doing something like: `43` | ^^^^^^^^^^^^^^ help: try doing something like: `43`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:54:10 --> $DIR/redundant_closure_call_fixable.rs:53:10
| |
LL | dbg!((|| 42)()); LL | dbg!((|| 42)());
| ^^^^^^^^^ help: try doing something like: `42` | ^^^^^^^^^ help: try doing something like: `42`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:57:13 --> $DIR/redundant_closure_call_fixable.rs:56:13
| |
LL | let a = (|| || || 123)(); LL | let a = (|| || || 123)();
| ^^^^^^^^^^^^^^^^ help: try doing something like: `(|| || 123)` | ^^^^^^^^^^^^^^^^ help: try doing something like: `(|| || 123)`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:61:13 --> $DIR/redundant_closure_call_fixable.rs:60:13
| |
LL | let a = (|| || || || async || 1)()()()()(); LL | let a = (|| || || || async || 1)()()()()();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `async { 1 }` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `async { 1 }`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:70:13 --> $DIR/redundant_closure_call_fixable.rs:69:13
| |
LL | let a = (|| echo!(|| echo!(|| 1)))()()(); LL | let a = (|| echo!(|| echo!(|| 1)))()()();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `1` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `1`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:72:13 --> $DIR/redundant_closure_call_fixable.rs:71:13
| |
LL | let a = (|| echo!((|| 123)))()(); LL | let a = (|| echo!((|| 123)))()();
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `123` | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `123`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:85:11 --> $DIR/redundant_closure_call_fixable.rs:84:11
| |
LL | bar()((|| || 42)()(), 5); LL | bar()((|| || 42)()(), 5);
| ^^^^^^^^^^^^^^ help: try doing something like: `42` | ^^^^^^^^^^^^^^ help: try doing something like: `42`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:86:9 --> $DIR/redundant_closure_call_fixable.rs:85:9
| |
LL | foo((|| || 42)()(), 5); LL | foo((|| || 42)()(), 5);
| ^^^^^^^^^^^^^^ help: try doing something like: `42` | ^^^^^^^^^^^^^^ help: try doing something like: `42`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:90:5 --> $DIR/redundant_closure_call_fixable.rs:89:5
| |
LL | (|| async {})().await; LL | (|| async {})().await;
| ^^^^^^^^^^^^^^^ help: try doing something like: `(async {})` | ^^^^^^^^^^^^^^^ help: try doing something like: `async {}`
error: try not to call a closure in the expression where it is declared error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:99:18 --> $DIR/redundant_closure_call_fixable.rs:98:18
| |
LL | spawn_on((|| async move {})()); LL | spawn_on((|| async move {})());
| ^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `(async move {})` | ^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `async move {}`
error: aborting due to 16 previous errors error: try not to call a closure in the expression where it is declared
--> $DIR/redundant_closure_call_fixable.rs:103:28
|
LL | std::convert::identity((|| 13_i32 + 36_i32)()).leading_zeros();
| ^^^^^^^^^^^^^^^^^^^^^^ help: try doing something like: `13_i32 + 36_i32`
error: aborting due to 17 previous errors