Skip to content

Commit

Permalink
Fix: #12268: Correct parentheses for needless_borrow suggestion
Browse files Browse the repository at this point in the history
Clippy no longer adds unnecessary parentheses in suggestion when the expression is a part of a tuple.
  • Loading branch information
mira-eanda committed Apr 4, 2024
1 parent e80ca2f commit 38b8056
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 1 deletion.
6 changes: 6 additions & 0 deletions clippy_lints/src/dereference.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
7 changes: 7 additions & 0 deletions tests/ui/needless_borrow.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -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,));
}
7 changes: 7 additions & 0 deletions tests/ui/needless_borrow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,));
}
8 changes: 7 additions & 1 deletion tests/ui/needless_borrow.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 38b8056

Please sign in to comment.