Rollup merge of #70657 - lcnr:unused_delims_try, r=Centril
Allow `try`-blocks in places where an open delim is expected Closes #70490 Closes #56828 r? @Centril
This commit is contained in:
commit
15ab586b49
8 changed files with 89 additions and 21 deletions
|
@ -384,7 +384,7 @@ trait UnusedDelimLint {
|
|||
fn is_expr_delims_necessary(inner: &ast::Expr, followed_by_block: bool) -> bool {
|
||||
followed_by_block
|
||||
&& match inner.kind {
|
||||
ast::ExprKind::Ret(_) | ast::ExprKind::Break(..) => true,
|
||||
ExprKind::Ret(_) | ExprKind::Break(..) => true,
|
||||
_ => parser::contains_exterior_struct_lit(&inner),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1846,11 +1846,9 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
|
||||
fn is_try_block(&self) -> bool {
|
||||
self.token.is_keyword(kw::Try) &&
|
||||
self.look_ahead(1, |t| *t == token::OpenDelim(token::Brace)) &&
|
||||
self.token.uninterpolated_span().rust_2018() &&
|
||||
// Prevent `while try {} {}`, `if try {} {} else {}`, etc.
|
||||
!self.restrictions.contains(Restrictions::NO_STRUCT_LITERAL)
|
||||
self.token.is_keyword(kw::Try)
|
||||
&& self.look_ahead(1, |t| *t == token::OpenDelim(token::Brace))
|
||||
&& self.token.uninterpolated_span().rust_2018()
|
||||
}
|
||||
|
||||
/// Parses an `async move? {...}` expression.
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
// run-pass
|
||||
// compile-flags: --edition 2018
|
||||
|
||||
#![feature(try_blocks)]
|
||||
|
||||
fn main() {
|
||||
match try { false } { _ => {} } //~ ERROR expected expression, found reserved keyword `try`
|
||||
match try { } {
|
||||
Err(()) => (),
|
||||
Ok(()) => (),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
error: expected expression, found reserved keyword `try`
|
||||
--> $DIR/try-block-in-match.rs:6:11
|
||||
|
|
||||
LL | match try { false } { _ => {} }
|
||||
| ----- ^^^ expected expression
|
||||
| |
|
||||
| while parsing this match expression
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -3,5 +3,6 @@
|
|||
#![feature(try_blocks)]
|
||||
|
||||
fn main() {
|
||||
while try { false } {} //~ ERROR expected expression, found reserved keyword `try`
|
||||
while try { false } {}
|
||||
//~^ ERROR the trait bound `bool: std::ops::Try` is not satisfied
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
error: expected expression, found reserved keyword `try`
|
||||
--> $DIR/try-block-in-while.rs:6:11
|
||||
error[E0277]: the trait bound `bool: std::ops::Try` is not satisfied
|
||||
--> $DIR/try-block-in-while.rs:6:15
|
||||
|
|
||||
LL | while try { false } {}
|
||||
| ^^^ expected expression
|
||||
| ^^^^^^^^^ the trait `std::ops::Try` is not implemented for `bool`
|
||||
|
|
||||
= note: required by `std::ops::Try::from_ok`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
28
src/test/ui/try-block/try-block-unused-delims.rs
Normal file
28
src/test/ui/try-block/try-block-unused-delims.rs
Normal file
|
@ -0,0 +1,28 @@
|
|||
// check-pass
|
||||
// compile-flags: --edition 2018
|
||||
|
||||
#![feature(try_blocks)]
|
||||
#![warn(unused_parens, unused_braces)]
|
||||
|
||||
fn consume<T>(_: Result<T, T>) -> T { todo!() }
|
||||
|
||||
fn main() {
|
||||
consume((try {}));
|
||||
//~^ WARN unnecessary parentheses
|
||||
|
||||
consume({ try {} });
|
||||
//~^ WARN unnecessary braces
|
||||
|
||||
match (try {}) {
|
||||
//~^ WARN unnecessary parentheses
|
||||
Ok(()) | Err(()) => (),
|
||||
}
|
||||
|
||||
if let Err(()) = (try {}) {}
|
||||
//~^ WARN unnecessary parentheses
|
||||
|
||||
match (try {}) {
|
||||
//~^ WARN unnecessary parentheses
|
||||
Ok(()) | Err(()) => (),
|
||||
}
|
||||
}
|
44
src/test/ui/try-block/try-block-unused-delims.stderr
Normal file
44
src/test/ui/try-block/try-block-unused-delims.stderr
Normal file
|
@ -0,0 +1,44 @@
|
|||
warning: unnecessary parentheses around function argument
|
||||
--> $DIR/try-block-unused-delims.rs:10:13
|
||||
|
|
||||
LL | consume((try {}));
|
||||
| ^^^^^^^^ help: remove these parentheses
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/try-block-unused-delims.rs:5:9
|
||||
|
|
||||
LL | #![warn(unused_parens, unused_braces)]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
warning: unnecessary braces around function argument
|
||||
--> $DIR/try-block-unused-delims.rs:13:13
|
||||
|
|
||||
LL | consume({ try {} });
|
||||
| ^^^^^^^^^^ help: remove these braces
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/try-block-unused-delims.rs:5:24
|
||||
|
|
||||
LL | #![warn(unused_parens, unused_braces)]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
warning: unnecessary parentheses around `match` scrutinee expression
|
||||
--> $DIR/try-block-unused-delims.rs:16:11
|
||||
|
|
||||
LL | match (try {}) {
|
||||
| ^^^^^^^^ help: remove these parentheses
|
||||
|
||||
warning: unnecessary parentheses around `let` scrutinee expression
|
||||
--> $DIR/try-block-unused-delims.rs:21:22
|
||||
|
|
||||
LL | if let Err(()) = (try {}) {}
|
||||
| ^^^^^^^^ help: remove these parentheses
|
||||
|
||||
warning: unnecessary parentheses around `match` scrutinee expression
|
||||
--> $DIR/try-block-unused-delims.rs:24:11
|
||||
|
|
||||
LL | match (try {}) {
|
||||
| ^^^^^^^^ help: remove these parentheses
|
||||
|
||||
warning: 5 warnings emitted
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue