From 38b8056fc652ed822c959d45486683147e24f103 Mon Sep 17 00:00:00 2001 From: Mariana Miranda Date: Thu, 4 Apr 2024 10:24:25 +0100 Subject: [PATCH] Fix: #12268: Correct parentheses for needless_borrow suggestion Clippy no longer adds unnecessary parentheses in suggestion when the expression is a part of a tuple. --- clippy_lints/src/dereference.rs | 6 ++++++ tests/ui/needless_borrow.fixed | 7 +++++++ tests/ui/needless_borrow.rs | 7 +++++++ tests/ui/needless_borrow.stderr | 8 +++++++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/clippy_lints/src/dereference.rs b/clippy_lints/src/dereference.rs index 560b2acc1c702..f63413bd575ab 100644 --- a/clippy_lints/src/dereference.rs +++ b/clippy_lints/src/dereference.rs @@ -1014,9 +1014,15 @@ fn report<'tcx>( }, _ => (0, false), }; + let is_in_tuple = match cx.tcx.parent_hir_node(data.first_expr.hir_id) { + Node::Expr(e) => matches!(e.kind, ExprKind::Tup(_)), + _ => false, + }; + let sugg = if !snip_is_macro && (calls_field || expr.precedence().order() < precedence) && !has_enclosing_paren(&snip) + && !is_in_tuple { format!("({snip})") } else { diff --git a/tests/ui/needless_borrow.fixed b/tests/ui/needless_borrow.fixed index 998f5430fdf05..adc92be0e1ab3 100644 --- a/tests/ui/needless_borrow.fixed +++ b/tests/ui/needless_borrow.fixed @@ -251,3 +251,10 @@ mod issue_10253 { (&S).f::<()>(); } } + +fn issue_12268() { + let option = Some((&1,)); + let x = (&1,); + // Lint here. + option.unwrap_or((x.0,)); +} diff --git a/tests/ui/needless_borrow.rs b/tests/ui/needless_borrow.rs index acb2c74d849a2..b1f51a2997874 100644 --- a/tests/ui/needless_borrow.rs +++ b/tests/ui/needless_borrow.rs @@ -251,3 +251,10 @@ mod issue_10253 { (&S).f::<()>(); } } + +fn issue_12268() { + let option = Some((&1,)); + let x = (&1,); + // Lint here. + option.unwrap_or((&x.0,)); +} diff --git a/tests/ui/needless_borrow.stderr b/tests/ui/needless_borrow.stderr index 5f02833876422..56fcf1268a17a 100644 --- a/tests/ui/needless_borrow.stderr +++ b/tests/ui/needless_borrow.stderr @@ -163,5 +163,11 @@ error: this expression borrows a value the compiler would automatically borrow LL | let _ = &mut (&mut { x.u }).x; | ^^^^^^^^^^^^^^ help: change this to: `{ x.u }` -error: aborting due to 27 previous errors +error: this expression creates a reference which is immediately dereferenced by the compiler + --> tests/ui/needless_borrow.rs:259:23 + | +LL | option.unwrap_or((&x.0,)); + | ^^^^ help: change this to: `x.0` + +error: aborting due to 28 previous errors