From 2e7ba785b34b040154761d42bdd4a208707e0d29 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 3 Aug 2020 01:31:21 +0900 Subject: [PATCH] Recover strictness for `yield` --- src/librustc_lint/unused.rs | 3 +- .../issue-74883-unused-paren-baren-yield.rs | 18 ++++++- ...ssue-74883-unused-paren-baren-yield.stderr | 48 ++++++++++++++++--- 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs index ee27b35844922..a33f920603592 100644 --- a/src/librustc_lint/unused.rs +++ b/src/librustc_lint/unused.rs @@ -422,10 +422,9 @@ trait UnusedDelimLint { lhs_needs_parens || (followed_by_block && match inner.kind { - ExprKind::Ret(_) | ExprKind::Break(..) => true, + ExprKind::Ret(_) | ExprKind::Break(..) | ExprKind::Yield(..) => true, _ => parser::contains_exterior_struct_lit(&inner), }) - || if let ExprKind::Yield(..) = inner.kind { true } else { false } } fn emit_unused_delims_expr( diff --git a/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs index 3d9eebe65c096..02182ec299321 100644 --- a/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs +++ b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs @@ -9,9 +9,25 @@ fn main() { let mut x = |_| { while let Some(_) = (yield) {} while let Some(_) = {yield} {} + // Only warn these cases while let Some(_) = ({yield}) {} //~ ERROR: unnecessary parentheses - while let Some(_) = {(yield)} {} //~ ERROR: unnecessary braces + while let Some(_) = ((yield)) {} //~ ERROR: unnecessary parentheses + {{yield}}; //~ ERROR: unnecessary braces + {( yield )}; //~ ERROR: unnecessary parentheses + + // FIXME: Reduce duplicate warnings. + // Perhaps we should tweak checks in `BlockRetValue`? + while let Some(_) = {(yield)} {} + //~^ ERROR: unnecessary braces + //~| ERROR: unnecessary parentheses + while let Some(_) = {{yield}} {} + //~^ ERROR: unnecessary braces + //~| ERROR: unnecessary braces + + // FIXME: It'd be great if we could also warn them. + ((yield)); + ({ yield }); }; let _ = Pin::new(&mut x).resume(Some(5)); } diff --git a/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr index fab22e24d507d..267cc9e031a11 100644 --- a/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr +++ b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr @@ -1,5 +1,5 @@ error: unnecessary parentheses around `let` scrutinee expression - --> $DIR/issue-74883-unused-paren-baren-yield.rs:13:29 + --> $DIR/issue-74883-unused-paren-baren-yield.rs:14:29 | LL | while let Some(_) = ({yield}) {} | ^^^^^^^^^ help: remove these parentheses @@ -10,11 +10,17 @@ note: the lint level is defined here LL | #![deny(unused_braces, unused_parens)] | ^^^^^^^^^^^^^ -error: unnecessary braces around `let` scrutinee expression - --> $DIR/issue-74883-unused-paren-baren-yield.rs:14:29 +error: unnecessary parentheses around `let` scrutinee expression + --> $DIR/issue-74883-unused-paren-baren-yield.rs:15:29 | -LL | while let Some(_) = {(yield)} {} - | ^^^^^^^^^ help: remove these braces +LL | while let Some(_) = ((yield)) {} + | ^^^^^^^^^ help: remove these parentheses + +error: unnecessary braces around block return value + --> $DIR/issue-74883-unused-paren-baren-yield.rs:16:10 + | +LL | {{yield}}; + | ^^^^^^^ help: remove these braces | note: the lint level is defined here --> $DIR/issue-74883-unused-paren-baren-yield.rs:3:9 @@ -22,5 +28,35 @@ note: the lint level is defined here LL | #![deny(unused_braces, unused_parens)] | ^^^^^^^^^^^^^ -error: aborting due to 2 previous errors +error: unnecessary parentheses around block return value + --> $DIR/issue-74883-unused-paren-baren-yield.rs:17:10 + | +LL | {( yield )}; + | ^^^^^^^^^ help: remove these parentheses + +error: unnecessary braces around `let` scrutinee expression + --> $DIR/issue-74883-unused-paren-baren-yield.rs:21:29 + | +LL | while let Some(_) = {(yield)} {} + | ^^^^^^^^^ help: remove these braces + +error: unnecessary parentheses around block return value + --> $DIR/issue-74883-unused-paren-baren-yield.rs:21:30 + | +LL | while let Some(_) = {(yield)} {} + | ^^^^^^^ help: remove these parentheses + +error: unnecessary braces around `let` scrutinee expression + --> $DIR/issue-74883-unused-paren-baren-yield.rs:24:29 + | +LL | while let Some(_) = {{yield}} {} + | ^^^^^^^^^ help: remove these braces + +error: unnecessary braces around block return value + --> $DIR/issue-74883-unused-paren-baren-yield.rs:24:30 + | +LL | while let Some(_) = {{yield}} {} + | ^^^^^^^ help: remove these braces + +error: aborting due to 8 previous errors