Skip to content

Commit

Permalink
Fix unused_parens false positive when using binary operations
Browse files Browse the repository at this point in the history
  • Loading branch information
mibac138 committed May 5, 2020
1 parent d626e4d commit 3471bc8
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/librustc_lint/unused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -380,11 +380,19 @@ trait UnusedDelimLint {
);

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(
Expand Down
17 changes: 17 additions & 0 deletions src/test/ui/lint/issue-71290-unused-paren-binop.rs
Original file line number Diff line number Diff line change
@@ -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() {}

0 comments on commit 3471bc8

Please sign in to comment.