JsModule { bom_token: missing (optional), interpreter_token: missing (optional), directives: JsDirectiveList [], items: JsModuleItemList [ JsExpressionStatement { expression: JsLogicalExpression { left: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@0..4 "foo" [] [Whitespace(" ")], }, }, operator_token: QUESTION2@4..7 "??" [] [Whitespace(" ")], right: JsBinaryExpression { left: missing (required), operator_token: STAR@7..9 "*" [] [Whitespace(" ")], right: JsNumberLiteralExpression { value_token: JS_NUMBER_LITERAL@9..10 "2" [] [], }, }, }, semicolon_token: SEMICOLON@10..11 ";" [] [], }, JsExpressionStatement { expression: JsLogicalExpression { left: JsUnaryExpression { operator_token: BANG@11..13 "!" [Newline("\n")] [], argument: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@13..17 "foo" [] [Whitespace(" ")], }, }, }, operator_token: AMP2@17..20 "&&" [] [Whitespace(" ")], right: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@20..23 "bar" [] [], }, }, }, semicolon_token: SEMICOLON@23..24 ";" [] [], }, JsExpressionStatement { expression: JsCallExpression { callee: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@24..28 "foo" [Newline("\n")] [], }, }, optional_chain_token: missing (optional), type_arguments: missing (optional), arguments: JsCallArguments { l_paren_token: L_PAREN@28..29 "(" [] [], args: JsCallArgumentList [ JsLogicalExpression { left: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@29..33 "foo" [] [Whitespace(" ")], }, }, operator_token: PIPE2@33..35 "||" [] [], right: missing (required), }, ], r_paren_token: R_PAREN@35..36 ")" [] [], }, }, semicolon_token: missing (optional), }, ], eof_token: EOF@36..37 "" [Newline("\n")] [], } 0: JS_MODULE@0..37 0: (empty) 1: (empty) 2: JS_DIRECTIVE_LIST@0..0 3: JS_MODULE_ITEM_LIST@0..36 0: JS_EXPRESSION_STATEMENT@0..11 0: JS_LOGICAL_EXPRESSION@0..10 0: JS_IDENTIFIER_EXPRESSION@0..4 0: JS_REFERENCE_IDENTIFIER@0..4 0: IDENT@0..4 "foo" [] [Whitespace(" ")] 1: QUESTION2@4..7 "??" [] [Whitespace(" ")] 2: JS_BINARY_EXPRESSION@7..10 0: (empty) 1: STAR@7..9 "*" [] [Whitespace(" ")] 2: JS_NUMBER_LITERAL_EXPRESSION@9..10 0: JS_NUMBER_LITERAL@9..10 "2" [] [] 1: SEMICOLON@10..11 ";" [] [] 1: JS_EXPRESSION_STATEMENT@11..24 0: JS_LOGICAL_EXPRESSION@11..23 0: JS_UNARY_EXPRESSION@11..17 0: BANG@11..13 "!" [Newline("\n")] [] 1: JS_IDENTIFIER_EXPRESSION@13..17 0: JS_REFERENCE_IDENTIFIER@13..17 0: IDENT@13..17 "foo" [] [Whitespace(" ")] 1: AMP2@17..20 "&&" [] [Whitespace(" ")] 2: JS_IDENTIFIER_EXPRESSION@20..23 0: JS_REFERENCE_IDENTIFIER@20..23 0: IDENT@20..23 "bar" [] [] 1: SEMICOLON@23..24 ";" [] [] 2: JS_EXPRESSION_STATEMENT@24..36 0: JS_CALL_EXPRESSION@24..36 0: JS_IDENTIFIER_EXPRESSION@24..28 0: JS_REFERENCE_IDENTIFIER@24..28 0: IDENT@24..28 "foo" [Newline("\n")] [] 1: (empty) 2: (empty) 3: JS_CALL_ARGUMENTS@28..36 0: L_PAREN@28..29 "(" [] [] 1: JS_CALL_ARGUMENT_LIST@29..35 0: JS_LOGICAL_EXPRESSION@29..35 0: JS_IDENTIFIER_EXPRESSION@29..33 0: JS_REFERENCE_IDENTIFIER@29..33 0: IDENT@29..33 "foo" [] [Whitespace(" ")] 1: PIPE2@33..35 "||" [] [] 2: (empty) 2: R_PAREN@35..36 ")" [] [] 1: (empty) 4: EOF@36..37 "" [Newline("\n")] [] -- logical_expressions_err.js:1:8 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × Expected an expression for the left hand side of the `*` operator. > 1 │ foo ?? * 2; │ ^ 2 │ !foo && bar; 3 │ foo(foo ||) i This operator requires a left hand side value -- logical_expressions_err.js:3:11 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × Expected an expression but instead found ')'. 1 │ foo ?? * 2; 2 │ !foo && bar; > 3 │ foo(foo ||) │ ^ 4 │ i Expected an expression here. 1 │ foo ?? * 2; 2 │ !foo && bar; > 3 │ foo(foo ||) │ ^ 4 │ -- foo ?? * 2; !foo && bar; foo(foo ||)