Skip to content

Commit 35aff1a

Browse files
committed
refactor
1 parent c1c134a commit 35aff1a

File tree

3 files changed

+10
-14
lines changed

3 files changed

+10
-14
lines changed

clippy_lints/src/mixed_read_write_in_expression.rs

+7-13
Original file line numberDiff line numberDiff line change
@@ -138,19 +138,13 @@ impl<'a, 'tcx> Visitor<'tcx> for DivergenceVisitor<'a, 'tcx> {
138138
fn visit_expr(&mut self, e: &'tcx Expr<'_>) {
139139
match e.kind {
140140
// fix #10776
141-
ExprKind::Block(block, ..) => {
142-
if let Some(e) = block.expr && block.stmts.is_empty() {
143-
self.visit_expr(e);
144-
145-
return;
146-
}
147-
148-
if let [stmt, rest @ ..] = block.stmts && rest.is_empty() {
149-
match stmt.kind {
150-
StmtKind::Expr(e) | StmtKind::Semi(e) => self.visit_expr(e),
151-
_ => {},
152-
}
153-
}
141+
ExprKind::Block(block, ..) => match (block.stmts, block.expr) {
142+
([], Some(e)) => self.visit_expr(e),
143+
([stmt], None) => match stmt.kind {
144+
StmtKind::Expr(e) | StmtKind::Semi(e) => self.visit_expr(e),
145+
_ => {},
146+
},
147+
_ => {},
154148
},
155149
ExprKind::Continue(_) | ExprKind::Break(_, _) | ExprKind::Ret(_) => self.report_diverging_sub_expr(e),
156150
ExprKind::Call(func, _) => {

tests/ui/diverging_sub_expression.rs

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ fn foobar() {
4949
// ... or multiple statements
5050
21 => true || { _ = 1; return; },
5151
22 => false || { _ = 1; return; },
52+
23 => true || { return; true },
53+
24 => true || { return; true },
5254
_ => true || break,
5355
};
5456
}

tests/ui/diverging_sub_expression.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ LL | 18 => false || { return },
6363
| ^^^^^^
6464

6565
error: sub-expression diverges
66-
--> $DIR/diverging_sub_expression.rs:52:26
66+
--> $DIR/diverging_sub_expression.rs:54:26
6767
|
6868
LL | _ => true || break,
6969
| ^^^^^

0 commit comments

Comments
 (0)