From 86d0b9cbd0242b06a747b14903dfbd4fda911a1d Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sun, 2 Aug 2020 07:20:28 +0900 Subject: [PATCH] Do not trigger `unused_{braces,parens}` lints with `yield` --- src/librustc_lint/unused.rs | 1 + .../issue-74883-unused-paren-baren-yield.rs | 17 ++++++++++++ ...ssue-74883-unused-paren-baren-yield.stderr | 26 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs create mode 100644 src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs index 8d8fb8c3c60..ee27b358449 100644 --- a/src/librustc_lint/unused.rs +++ b/src/librustc_lint/unused.rs @@ -425,6 +425,7 @@ trait UnusedDelimLint { ExprKind::Ret(_) | ExprKind::Break(..) => 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 new file mode 100644 index 00000000000..3d9eebe65c0 --- /dev/null +++ b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs @@ -0,0 +1,17 @@ +#![feature(generator_trait)] +#![feature(generators)] +#![deny(unused_braces, unused_parens)] + +use std::ops::Generator; +use std::pin::Pin; + +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 + }; + 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 new file mode 100644 index 00000000000..fab22e24d50 --- /dev/null +++ b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr @@ -0,0 +1,26 @@ +error: unnecessary parentheses around `let` scrutinee expression + --> $DIR/issue-74883-unused-paren-baren-yield.rs:13:29 + | +LL | while let Some(_) = ({yield}) {} + | ^^^^^^^^^ help: remove these parentheses + | +note: the lint level is defined here + --> $DIR/issue-74883-unused-paren-baren-yield.rs:3:24 + | +LL | #![deny(unused_braces, unused_parens)] + | ^^^^^^^^^^^^^ + +error: unnecessary braces around `let` scrutinee expression + --> $DIR/issue-74883-unused-paren-baren-yield.rs:14:29 + | +LL | while let Some(_) = {(yield)} {} + | ^^^^^^^^^ help: remove these braces + | +note: the lint level is defined here + --> $DIR/issue-74883-unused-paren-baren-yield.rs:3:9 + | +LL | #![deny(unused_braces, unused_parens)] + | ^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors +