Fix unused_parens false positive when using binary operations
This commit is contained in:
parent
d626e4dadc
commit
3471bc8306
@ -380,11 +380,19 @@ fn check_unused_delims_expr(
|
||||
);
|
||||
|
||||
fn is_expr_delims_necessary(inner: &ast::Expr, followed_by_block: bool) -> bool {
|
||||
followed_by_block
|
||||
&& match inner.kind {
|
||||
ExprKind::Ret(_) | ExprKind::Break(..) => true,
|
||||
_ => parser::contains_exterior_struct_lit(&inner),
|
||||
// Prevent false-positives in cases like `fn x() -> u8 { ({ 0 } + 1) }`
|
||||
let lhs_needs_parens = match &inner.kind {
|
||||
ExprKind::Binary(_, lhs, _rhs) => {
|
||||
!rustc_ast::util::classify::expr_requires_semi_to_be_stmt(&*lhs)
|
||||
}
|
||||
_ => false,
|
||||
};
|
||||
lhs_needs_parens
|
||||
|| (followed_by_block
|
||||
&& match inner.kind {
|
||||
ExprKind::Ret(_) | ExprKind::Break(..) => true,
|
||||
_ => parser::contains_exterior_struct_lit(&inner),
|
||||
})
|
||||
}
|
||||
|
||||
fn emit_unused_delims_expr(
|
||||
|
17
src/test/ui/lint/issue-71290-unused-paren-binop.rs
Normal file
17
src/test/ui/lint/issue-71290-unused-paren-binop.rs
Normal file
@ -0,0 +1,17 @@
|
||||
// check-pass
|
||||
// Make sure unused parens lint doesn't emit a false positive.
|
||||
// See https://github.com/rust-lang/rust/issues/71290 for details.
|
||||
|
||||
fn x() -> u8 {
|
||||
({ 0 }) + 1
|
||||
}
|
||||
|
||||
fn y() -> u8 {
|
||||
({ 0 } + 1)
|
||||
}
|
||||
|
||||
pub fn foo(a: bool, b: bool) -> u8 {
|
||||
(if a { 1 } else { 0 } + if b { 1 } else { 0 })
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user