}
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.
+// 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(()) => (),
+ }
}
+++ /dev/null
-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
-
#![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
}
-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`.
--- /dev/null
+// 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(()) => (),
+ }
+}
--- /dev/null
+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
+