parse_if_expr: recover on attributes
This commit is contained in:
parent
ba3ae46de9
commit
458383dd33
9 changed files with 98 additions and 64 deletions
|
|
@ -8,7 +8,7 @@ fn if_else_parse_error() {
|
|||
#[cfg(FALSE)]
|
||||
fn else_attr_ifparse_error() {
|
||||
if true {
|
||||
} else #[attr] if false { //~ ERROR expected
|
||||
} else #[attr] if false { //~ ERROR outer attributes are not allowed
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,18 +4,17 @@ error: expected expression, found keyword `else`
|
|||
LL | } #[attr] else if false {
|
||||
| ^^^^ expected expression
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/else-attrs.rs:11:12
|
||||
|
|
||||
LL | } else #[attr] if false {
|
||||
| ^ expected `{`
|
||||
|
|
||||
help: try placing this code inside a block
|
||||
|
|
||||
LL | } else #[attr] { if false {
|
||||
LL | } else {
|
||||
LL | } }
|
||||
|
|
||||
LL | } else #[attr] if false {
|
||||
| _______----_^^^^^^^_-
|
||||
| | | |
|
||||
| | | help: remove the attributes
|
||||
| | the branch belongs to this `else`
|
||||
LL | | } else {
|
||||
LL | | }
|
||||
| |_____- the attributes are attached to this branch
|
||||
|
||||
error: expected expression, found keyword `else`
|
||||
--> $DIR/else-attrs.rs:20:15
|
||||
|
|
|
|||
|
|
@ -39,35 +39,35 @@ fn main() {}
|
|||
#[cfg(FALSE)] fn e() { let _ = #[attr] &mut #![attr] 0; }
|
||||
//~^ ERROR an inner attribute is not permitted in this context
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 #[attr] {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 {#![attr]}; }
|
||||
//~^ ERROR an inner attribute is not permitted in this context
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 {} #[attr] else {}; }
|
||||
//~^ ERROR expected one of
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 {} else #[attr] {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 {} else {#![attr]}; }
|
||||
//~^ ERROR an inner attribute is not permitted in this context
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 {} else #[attr] if 0 {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 {} else if 0 #[attr] {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if 0 {} else if 0 {#![attr]}; }
|
||||
//~^ ERROR an inner attribute is not permitted in this context
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 #[attr] {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 {#![attr]}; }
|
||||
//~^ ERROR an inner attribute is not permitted in this context
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} #[attr] else {}; }
|
||||
//~^ ERROR expected one of
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else #[attr] {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else {#![attr]}; }
|
||||
//~^ ERROR an inner attribute is not permitted in this context
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else #[attr] if let _ = 0 {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else if let _ = 0 #[attr] {}; }
|
||||
//~^ ERROR expected `{`, found `#`
|
||||
//~^ ERROR outer attributes are not allowed on `if`
|
||||
#[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else if let _ = 0 {#![attr]}; }
|
||||
//~^ ERROR an inner attribute is not permitted in this context
|
||||
|
||||
|
|
|
|||
|
|
@ -136,14 +136,14 @@ LL | #[cfg(FALSE)] fn e() { let _ = #[attr] &mut #![attr] 0; }
|
|||
|
|
||||
= note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files. Outer attributes, like `#[test]`, annotate the item following them.
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:41:37
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if 0 #[attr] {}; }
|
||||
| -- ^ -- help: try placing this code inside a block: `{ {} }`
|
||||
| -- ^^^^^^^ -- the attributes are attached to this branch
|
||||
| | |
|
||||
| | expected `{`
|
||||
| this `if` expression has a condition, but no block
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `if`
|
||||
|
||||
error: an inner attribute is not permitted in this context
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:43:38
|
||||
|
|
@ -159,13 +159,14 @@ error: expected one of `.`, `;`, `?`, `else`, or an operator, found `#`
|
|||
LL | #[cfg(FALSE)] fn e() { let _ = if 0 {} #[attr] else {}; }
|
||||
| ^ expected one of `.`, `;`, `?`, `else`, or an operator
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:47:45
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if 0 {} else #[attr] {}; }
|
||||
| ^ -- help: try placing this code inside a block: `{ {} }`
|
||||
| |
|
||||
| expected `{`
|
||||
| ---- ^^^^^^^ -- the attributes are attached to this branch
|
||||
| | |
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `else`
|
||||
|
||||
error: an inner attribute is not permitted in this context
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:49:46
|
||||
|
|
@ -175,22 +176,23 @@ LL | #[cfg(FALSE)] fn e() { let _ = if 0 {} else {#![attr]}; }
|
|||
|
|
||||
= note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files. Outer attributes, like `#[test]`, annotate the item following them.
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:51:45
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if 0 {} else #[attr] if 0 {}; }
|
||||
| ^ ------- help: try placing this code inside a block: `{ if 0 {} }`
|
||||
| |
|
||||
| expected `{`
|
||||
| ---- ^^^^^^^ ------- the attributes are attached to this branch
|
||||
| | |
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `else`
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:53:50
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if 0 {} else if 0 #[attr] {}; }
|
||||
| -- ^ -- help: try placing this code inside a block: `{ {} }`
|
||||
| -- ^^^^^^^ -- the attributes are attached to this branch
|
||||
| | |
|
||||
| | expected `{`
|
||||
| this `if` expression has a condition, but no block
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `if`
|
||||
|
||||
error: an inner attribute is not permitted in this context
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:55:51
|
||||
|
|
@ -200,14 +202,14 @@ LL | #[cfg(FALSE)] fn e() { let _ = if 0 {} else if 0 {#![attr]}; }
|
|||
|
|
||||
= note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files. Outer attributes, like `#[test]`, annotate the item following them.
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:57:45
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if let _ = 0 #[attr] {}; }
|
||||
| -- ^ -- help: try placing this code inside a block: `{ {} }`
|
||||
| -- ^^^^^^^ -- the attributes are attached to this branch
|
||||
| | |
|
||||
| | expected `{`
|
||||
| this `if` expression has a condition, but no block
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `if`
|
||||
|
||||
error: an inner attribute is not permitted in this context
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:59:46
|
||||
|
|
@ -223,13 +225,14 @@ error: expected one of `.`, `;`, `?`, `else`, or an operator, found `#`
|
|||
LL | #[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} #[attr] else {}; }
|
||||
| ^ expected one of `.`, `;`, `?`, `else`, or an operator
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:63:53
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else #[attr] {}; }
|
||||
| ^ -- help: try placing this code inside a block: `{ {} }`
|
||||
| |
|
||||
| expected `{`
|
||||
| ---- ^^^^^^^ -- the attributes are attached to this branch
|
||||
| | |
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `else`
|
||||
|
||||
error: an inner attribute is not permitted in this context
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:65:54
|
||||
|
|
@ -239,22 +242,23 @@ LL | #[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else {#![attr]}; }
|
|||
|
|
||||
= note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files. Outer attributes, like `#[test]`, annotate the item following them.
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:67:53
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else #[attr] if let _ = 0 {}; }
|
||||
| ^ --------------- help: try placing this code inside a block: `{ if let _ = 0 {} }`
|
||||
| |
|
||||
| expected `{`
|
||||
| ---- ^^^^^^^ --------------- the attributes are attached to this branch
|
||||
| | |
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `else`
|
||||
|
||||
error: expected `{`, found `#`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:69:66
|
||||
|
|
||||
LL | #[cfg(FALSE)] fn e() { let _ = if let _ = 0 {} else if let _ = 0 #[attr] {}; }
|
||||
| -- ^ -- help: try placing this code inside a block: `{ {} }`
|
||||
| -- ^^^^^^^ -- the attributes are attached to this branch
|
||||
| | |
|
||||
| | expected `{`
|
||||
| this `if` expression has a condition, but no block
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `if`
|
||||
|
||||
error: an inner attribute is not permitted in this context
|
||||
--> $DIR/attr-stmt-expr-attr-bad.rs:71:67
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fn main() {
|
||||
if true /*!*/ {}
|
||||
//~^ ERROR expected `{`, found doc comment `/*!*/`
|
||||
//~^ ERROR outer attributes are not allowed on
|
||||
//~| ERROR expected outer doc comment
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@ LL | if true /*!*/ {}
|
|||
|
|
||||
= note: inner doc comments like this (starting with `//!` or `/*!`) can only appear before items
|
||||
|
||||
error: expected `{`, found doc comment `/*!*/`
|
||||
error: outer attributes are not allowed on `if` and `else` branches
|
||||
--> $DIR/doc-comment-in-if-statement.rs:2:13
|
||||
|
|
||||
LL | if true /*!*/ {}
|
||||
| -- ^^^^^ -- help: try placing this code inside a block: `{ {} }`
|
||||
| -- ^^^^^ -- the attributes are attached to this branch
|
||||
| | |
|
||||
| | expected `{`
|
||||
| this `if` expression has a condition, but no block
|
||||
| | help: remove the attributes
|
||||
| the branch belongs to this `if`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue