about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2020-08-03 01:31:21 +0900
committerYuki Okushi <huyuumi.dev@gmail.com>2020-08-03 01:34:18 +0900
commit2e7ba785b34b040154761d42bdd4a208707e0d29 (patch)
tree3f6f477e17f873fc927e846eddb836b03ff182a3
parent86d0b9cbd0242b06a747b14903dfbd4fda911a1d (diff)
downloadrust-2e7ba785b34b040154761d42bdd4a208707e0d29.tar.gz
rust-2e7ba785b34b040154761d42bdd4a208707e0d29.zip
Recover strictness for `yield`
-rw-r--r--src/librustc_lint/unused.rs3
-rw-r--r--src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs18
-rw-r--r--src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr48
3 files changed, 60 insertions, 9 deletions
diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs
index ee27b358449..a33f9206035 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 3d9eebe65c0..02182ec2993 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 fab22e24d50..267cc9e031a 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