//! > Test that a ! b isn't parsed as a binary operation
//! > comments
`a ! b;` should be parsed as `a !b;`, i.e, two statements:
* `a` (missing a semicolon)
* `!b;` (not `b`)
//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)
//! > cairo_code
#[cairofmt::skip]
fn foo() {
1 ! 2;
1 @ 2;
}
//! > top_level_kind
StatementList
//! > ignored_kinds
//! > expected_diagnostics
//! > expected_tree
└── Top level kind: StatementList
├── child #0 (kind: StatementExpr)
│ ├── attributes (kind: AttributeList) []
│ ├── expr (kind: TokenLiteralNumber): '1'
│ └── semicolon (kind: OptionTerminalSemicolonEmpty) []
├── child #1 (kind: StatementExpr)
│ ├── attributes (kind: AttributeList) []
│ ├── expr (kind: ExprUnary)
│ │ ├── op (kind: TokenNot): '!'
│ │ └── expr (kind: TokenLiteralNumber): '2'
│ └── semicolon (kind: TokenSemicolon): ';'
├── child #2 (kind: StatementExpr)
│ ├── attributes (kind: AttributeList) []
│ ├── expr (kind: TokenLiteralNumber): '1'
│ └── semicolon (kind: OptionTerminalSemicolonEmpty) []
└── child #3 (kind: StatementExpr)
├── attributes (kind: AttributeList) []
├── expr (kind: ExprUnary)
│ ├── op (kind: TokenAt): '@'
│ └── expr (kind: TokenLiteralNumber): '2'
└── semicolon (kind: TokenSemicolon): ';'