Skip to content

Commit 4eb9253

Browse files
authored
Rollup merge of #75083 - JohnTitor:follow-up-unused-braces, r=lcnr
Do not trigger `unused_braces` for `while let` Follow-up for #75031 r? @lcnr
2 parents c2bc733 + 2e5c501 commit 4eb9253

4 files changed

+21
-25
lines changed

src/librustc_lint/unused.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,10 @@ trait UnusedDelimLint {
536536
(cond, UnusedDelimsCtx::IfCond, true, Some(left), Some(right))
537537
}
538538

539-
While(ref cond, ref block, ..) => {
539+
// Do not lint `unused_braces` in `while let` expressions.
540+
While(ref cond, ref block, ..)
541+
if !matches!(cond.kind, Let(_, _)) || Self::LINT_EXPR_IN_PATTERN_MATCHING_CTX =>
542+
{
540543
let left = e.span.lo() + rustc_span::BytePos(5);
541544
let right = block.span.lo();
542545
(cond, UnusedDelimsCtx::WhileCond, true, Some(left), Some(right))

src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs

+2-9
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,8 @@ fn main() {
1515
while let Some(_) = ((yield)) {} //~ ERROR: unnecessary parentheses
1616
{{yield}}; //~ ERROR: unnecessary braces
1717
{( yield )}; //~ ERROR: unnecessary parentheses
18-
19-
// FIXME: Reduce duplicate warnings.
20-
// Perhaps we should tweak checks in `BlockRetValue`?
21-
while let Some(_) = {(yield)} {}
22-
//~^ ERROR: unnecessary braces
23-
//~| ERROR: unnecessary parentheses
24-
while let Some(_) = {{yield}} {}
25-
//~^ ERROR: unnecessary braces
26-
//~| ERROR: unnecessary braces
18+
while let Some(_) = {(yield)} {} //~ ERROR: unnecessary parentheses
19+
while let Some(_) = {{yield}} {} //~ ERROR: unnecessary braces
2720

2821
// FIXME: It'd be great if we could also warn them.
2922
((yield));

src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr

+3-15
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,17 @@ error: unnecessary parentheses around block return value
3434
LL | {( yield )};
3535
| ^^^^^^^^^ help: remove these parentheses
3636

37-
error: unnecessary braces around `let` scrutinee expression
38-
--> $DIR/issue-74883-unused-paren-baren-yield.rs:21:29
39-
|
40-
LL | while let Some(_) = {(yield)} {}
41-
| ^^^^^^^^^ help: remove these braces
42-
4337
error: unnecessary parentheses around block return value
44-
--> $DIR/issue-74883-unused-paren-baren-yield.rs:21:30
38+
--> $DIR/issue-74883-unused-paren-baren-yield.rs:18:30
4539
|
4640
LL | while let Some(_) = {(yield)} {}
4741
| ^^^^^^^ help: remove these parentheses
4842

49-
error: unnecessary braces around `let` scrutinee expression
50-
--> $DIR/issue-74883-unused-paren-baren-yield.rs:24:29
51-
|
52-
LL | while let Some(_) = {{yield}} {}
53-
| ^^^^^^^^^ help: remove these braces
54-
5543
error: unnecessary braces around block return value
56-
--> $DIR/issue-74883-unused-paren-baren-yield.rs:24:30
44+
--> $DIR/issue-74883-unused-paren-baren-yield.rs:19:30
5745
|
5846
LL | while let Some(_) = {{yield}} {}
5947
| ^^^^^^^ help: remove these braces
6048

61-
error: aborting due to 8 previous errors
49+
error: aborting due to 6 previous errors
6250

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// check-pass
2+
3+
#![deny(unused_braces)]
4+
5+
fn main() {
6+
let mut a = Some(3);
7+
// Shouldn't warn below `a`.
8+
while let Some(ref mut v) = {a} {
9+
a.as_mut().map(|a| std::mem::swap(a, v));
10+
break;
11+
}
12+
}

0 commit comments

Comments
 (0)