From d6e8c6fb2f6f915b4b0c2cb5602d6de9b14437fa Mon Sep 17 00:00:00 2001 From: Boshen Date: Sun, 12 Mar 2023 23:30:32 +0800 Subject: [PATCH] feat(parser): check `ReturnStatement` in return context --- crates/oxc_parser/src/js/statement.rs | 7 +- tasks/coverage/babel.snap | 39 +++++++- tasks/coverage/test262.snap | 139 +++++++++++++++++++++++--- tasks/coverage/typescript.snap | 90 +++++++++++++++-- 4 files changed, 247 insertions(+), 28 deletions(-) diff --git a/crates/oxc_parser/src/js/statement.rs b/crates/oxc_parser/src/js/statement.rs index 7e1e89436..8f73df45e 100644 --- a/crates/oxc_parser/src/js/statement.rs +++ b/crates/oxc_parser/src/js/statement.rs @@ -101,7 +101,6 @@ impl<'a> Parser<'a> { } Kind::Export => self.parse_export_declaration(), // [+Return] ReturnStatement[?Yield, ?Await] - // Error is checked in linter Kind::Return => self.parse_return_statement(), Kind::Var => self.parse_variable_statement(stmt_ctx), Kind::Const if !(self.ts_enabled() && self.is_at_enum_declaration()) => { @@ -374,6 +373,12 @@ impl<'a> Parser<'a> { self.asi()?; Some(expr) }; + if !self.ctx.has_return() { + self.error(diagnostics::ReturnStatementOnlyInFunctionBody(Span::new( + span.start, + span.start + 6, + ))); + } Ok(self.ast.return_statement(self.end_span(span), argument)) } diff --git a/tasks/coverage/babel.snap b/tasks/coverage/babel.snap index 0b2a1d44d..8aa1b4e10 100644 --- a/tasks/coverage/babel.snap +++ b/tasks/coverage/babel.snap @@ -1,7 +1,7 @@ Babel Summary: -AST Parsed : 2053/2069 (99.23%) -Positive Passed: 2053/2069 (99.23%) -Negative Passed: 1061/1502 (70.64%) +AST Parsed : 2051/2069 (99.13%) +Positive Passed: 2051/2069 (99.13%) +Negative Passed: 1063/1502 (70.77%) Expect Syntax Error: "annex-b/disabled/1.1-html-comments-close/input.js" Expect Syntax Error: "annex-b/disabled/3.1-sloppy-labeled-functions-if-body/input.js" Expect Syntax Error: "annex-b/disabled/3.1-sloppy-labeled-functions-multiple-labels/input.js" @@ -31,7 +31,6 @@ Expect Syntax Error: "core/scope/undecl-export-builtin-as/input.js" Expect Syntax Error: "core/scope/undecl-export-builtin/input.js" Expect Syntax Error: "core/scope/undecl-export-if/input.js" Expect Syntax Error: "core/scope/undecl-export/input.js" -Expect Syntax Error: "core/uncategorised/454/input.js" Expect Syntax Error: "core/uncategorised/466/input.js" Expect Syntax Error: "core/uncategorised/467/input.js" Expect Syntax Error: "core/uncategorised/468/input.js" @@ -245,7 +244,6 @@ Expect Syntax Error: "esprima/invalid-syntax/migrated_0093/input.js" Expect Syntax Error: "esprima/invalid-syntax/migrated_0094/input.js" Expect Syntax Error: "esprima/invalid-syntax/migrated_0100/input.js" Expect Syntax Error: "esprima/invalid-syntax/migrated_0101/input.js" -Expect Syntax Error: "esprima/invalid-syntax/migrated_0171/input.js" Expect Syntax Error: "esprima/invalid-syntax/migrated_0183/input.js" Expect Syntax Error: "esprima/invalid-syntax/migrated_0184/input.js" Expect Syntax Error: "esprima/invalid-syntax/migrated_0185/input.js" @@ -465,6 +463,23 @@ Expect to Parse: "core/scope/dupl-bind-gen-gen-script/input.js" · ─┬─ · ╰── It can not be redeclared here ╰──── +Expect to Parse: "core/uncategorised/327/input.js" + + × TS1108: A 'return' statement can only be used within a function body + ╭─[core/uncategorised/327/input.js:1:1] + 1 │ return {} / 2 + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── +Expect to Parse: "core/uncategorised/328/input.js" + + × TS1108: A 'return' statement can only be used within a function body + ╭─[core/uncategorised/328/input.js:1:1] + 1 │ return + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 2 │ {} + ╰──── Expect to Parse: "typescript/arrow-function/generic-tsx-babel-7/input.ts" × Expect token @@ -1868,6 +1883,13 @@ Expect to Parse: "typescript/types/const-type-parameters/input.ts" · ╰── Unterminated string ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[core/uncategorised/454/input.js:1:1] + 1 │ return + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + × Illegal break statement ╭─[core/uncategorised/455/input.js:1:1] 1 │ break @@ -7861,6 +7883,13 @@ Expect to Parse: "typescript/types/const-type-parameters/input.ts" · ─ ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[esprima/invalid-syntax/migrated_0171/input.js:1:1] + 1 │ return + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + × Illegal break statement ╭─[esprima/invalid-syntax/migrated_0172/input.js:1:1] 1 │ break diff --git a/tasks/coverage/test262.snap b/tasks/coverage/test262.snap index 9cd26ee84..3489d0f31 100644 --- a/tasks/coverage/test262.snap +++ b/tasks/coverage/test262.snap @@ -1,7 +1,7 @@ Test262 Summary: AST Parsed : 44015/44034 (99.96%) Positive Passed: 44015/44034 (99.96%) -Negative Passed: 3302/3917 (84.30%) +Negative Passed: 3315/3917 (84.63%) Expect Syntax Error: "language/block-scope/syntax/function-declarations/in-statement-position-do-statement-while-expression.js" Expect Syntax Error: "language/block-scope/syntax/function-declarations/in-statement-position-for-statement.js" Expect Syntax Error: "language/block-scope/syntax/function-declarations/in-statement-position-if-expression-statement-else-statement.js" @@ -302,7 +302,6 @@ Expect Syntax Error: "language/global-code/export.js" Expect Syntax Error: "language/global-code/import.js" Expect Syntax Error: "language/global-code/new.target-arrow.js" Expect Syntax Error: "language/global-code/new.target.js" -Expect Syntax Error: "language/global-code/return.js" Expect Syntax Error: "language/import/dup-bound-names.js" Expect Syntax Error: "language/import/json-invalid.js" Expect Syntax Error: "language/import/json-named-bindings.js" @@ -323,7 +322,6 @@ Expect Syntax Error: "language/module-code/early-dup-export-star-as-dflt.js" Expect Syntax Error: "language/module-code/early-export-global.js" Expect Syntax Error: "language/module-code/early-export-unresolvable.js" Expect Syntax Error: "language/module-code/early-new-target.js" -Expect Syntax Error: "language/module-code/parse-err-return.js" Expect Syntax Error: "language/module-code/top-level-await/syntax/early-does-not-propagate-to-fn-declaration-body.js" Expect Syntax Error: "language/module-code/top-level-await/syntax/early-does-not-propagate-to-fn-declaration-params.js" Expect Syntax Error: "language/module-code/top-level-await/syntax/early-does-not-propagate-to-fn-expr-body.js" @@ -464,7 +462,6 @@ Expect Syntax Error: "language/statements/class/method/object-destructuring-para Expect Syntax Error: "language/statements/class/method/rest-param-strict-body.js" Expect Syntax Error: "language/statements/class/static-gen-method-param-dflt-yield.js" Expect Syntax Error: "language/statements/class/static-init-invalid-await.js" -Expect Syntax Error: "language/statements/class/static-init-invalid-return.js" Expect Syntax Error: "language/statements/const/dstr/ary-ptrn-rest-init-ary.js" Expect Syntax Error: "language/statements/const/dstr/ary-ptrn-rest-init-id.js" Expect Syntax Error: "language/statements/const/dstr/ary-ptrn-rest-init-obj.js" @@ -594,16 +591,6 @@ Expect Syntax Error: "language/statements/labeled/decl-fun-strict.js" Expect Syntax Error: "language/statements/let/dstr/ary-ptrn-rest-init-ary.js" Expect Syntax Error: "language/statements/let/dstr/ary-ptrn-rest-init-id.js" Expect Syntax Error: "language/statements/let/dstr/ary-ptrn-rest-init-obj.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T1.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T10.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T2.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T3.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T4.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T5.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T6.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T7.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T8.js" -Expect Syntax Error: "language/statements/return/S12.9_A1_T9.js" Expect Syntax Error: "language/statements/try/dstr/ary-ptrn-rest-init-ary.js" Expect Syntax Error: "language/statements/try/dstr/ary-ptrn-rest-init-id.js" Expect Syntax Error: "language/statements/try/dstr/ary-ptrn-rest-init-obj.js" @@ -16157,6 +16144,14 @@ Expect to Parse: "language/statements/function/S14_A5_T2.js" · ── ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/global-code/return.js:21:1] + 21 │ + 22 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + × Super calls are not permitted outside constructors or in nested functions inside constructors. │ ╭─[language/global-code/super-call-arrow.js:35:1] @@ -19484,6 +19479,14 @@ Expect to Parse: "language/statements/function/S14_A5_T2.js" · ╰── Expected an expression here ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/module-code/parse-err-return.js:31:1] + 31 │ + 32 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + × Automatic Semicolon Insertion ╭─[language/module-code/parse-err-semi-dflt-expr.js:26:1] 26 │ @@ -26338,6 +26341,15 @@ Expect to Parse: "language/statements/function/S14_A5_T2.js" 24 │ } ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/class/static-init-invalid-return.js:23:1] + 23 │ static { + 24 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 25 │ } + ╰──── + × Super calls are not permitted outside constructors or in nested functions inside constructors. │ ╭─[language/statements/class/static-init-invalid-super-call.js:19:1] @@ -29867,6 +29879,105 @@ Expect to Parse: "language/statements/function/S14_A5_T2.js" ╰──── help: Try insert a semicolon here + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T1.js:17:1] + 17 │ var x=1; + 18 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 19 │ var y=2; + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T10.js:16:1] + 16 │ //CHECK#1 + 17 │ return (0); + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 18 │ // + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T2.js:17:1] + 17 │ var x=1; + 18 │ return x; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 19 │ var y=2; + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T3.js:17:1] + 17 │ try { + 18 │ return 1; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 19 │ } catch(e){ + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T3.js:19:1] + 19 │ } catch(e){ + 20 │ return 1; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 21 │ } + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T4.js:16:1] + 16 │ //CHECK#1 + 17 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 18 │ // + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T5.js:20:1] + 20 │ var x=1; + 21 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 22 │ var y=2; + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T6.js:20:1] + 20 │ var x=1; + 21 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 22 │ var y=2; + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T7.js:20:1] + 20 │ var x=1; + 21 │ return x; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 22 │ var y=2; + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T8.js:20:1] + 20 │ var x=1; + 21 │ return x; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 22 │ var y=2; + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[language/statements/return/S12.9_A1_T9.js:19:1] + 19 │ } catch(e){ + 20 │ return e; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 21 │ } + ╰──── + × Identifier `default` has already been declared ╭─[language/statements/switch/S12.11_A2_T1.js:20:1] 20 │ result += 2; diff --git a/tasks/coverage/typescript.snap b/tasks/coverage/typescript.snap index e3328898c..f1c2e00d4 100644 --- a/tasks/coverage/typescript.snap +++ b/tasks/coverage/typescript.snap @@ -1,7 +1,7 @@ TypeScript Summary: AST Parsed : 2305/2338 (98.59%) Positive Passed: 2305/2338 (98.59%) -Negative Passed: 637/2532 (25.16%) +Negative Passed: 644/2532 (25.43%) Expect Syntax Error: "Symbols/ES5SymbolProperty2.ts" Expect Syntax Error: "Symbols/ES5SymbolProperty6.ts" Expect Syntax Error: "additionalChecks/noPropertyAccessFromIndexSignature1.ts" @@ -94,7 +94,6 @@ Expect Syntax Error: "classes/classStaticBlock/classStaticBlock19.ts" Expect Syntax Error: "classes/classStaticBlock/classStaticBlock23.ts" Expect Syntax Error: "classes/classStaticBlock/classStaticBlock3.ts" Expect Syntax Error: "classes/classStaticBlock/classStaticBlock4.ts" -Expect Syntax Error: "classes/classStaticBlock/classStaticBlock7.ts" Expect Syntax Error: "classes/classStaticBlock/classStaticBlock9.ts" Expect Syntax Error: "classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts" Expect Syntax Error: "classes/classStaticBlock/classStaticBlockUseBeforeDef3.ts" @@ -1164,7 +1163,6 @@ Expect Syntax Error: "parser/ecmascript5/ErrorRecovery/ParameterLists/parserErro Expect Syntax Error: "parser/ecmascript5/ErrorRecovery/parserCommaInTypeMemberList2.ts" Expect Syntax Error: "parser/ecmascript5/ErrorRecovery/parserModifierOnPropertySignature1.ts" Expect Syntax Error: "parser/ecmascript5/ErrorRecovery/parserModifierOnStatementInBlock2.ts" -Expect Syntax Error: "parser/ecmascript5/ErrorRecovery/parserStatementIsNotAMemberVariableDeclaration1.ts" Expect Syntax Error: "parser/ecmascript5/ExportAssignments/parserExportAssignment1.ts" Expect Syntax Error: "parser/ecmascript5/ExportAssignments/parserExportAssignment2.ts" Expect Syntax Error: "parser/ecmascript5/ExportAssignments/parserExportAssignment5.ts" @@ -1271,7 +1269,6 @@ Expect Syntax Error: "parser/ecmascript5/RegressionTests/parser553699.ts" Expect Syntax Error: "parser/ecmascript5/RegressionTests/parser618973.ts" Expect Syntax Error: "parser/ecmascript5/RegressionTests/parserTernaryAndCommaOperators1.ts" Expect Syntax Error: "parser/ecmascript5/RegularExpressions/parseRegularExpressionMixedWithComments.ts" -Expect Syntax Error: "parser/ecmascript5/RegularExpressions/parserRegularExpression1.ts" Expect Syntax Error: "parser/ecmascript5/RegularExpressions/parserRegularExpression2.ts" Expect Syntax Error: "parser/ecmascript5/RegularExpressions/parserRegularExpression3.ts" Expect Syntax Error: "parser/ecmascript5/RegularExpressions/parserRegularExpression4.ts" @@ -1282,8 +1279,6 @@ Expect Syntax Error: "parser/ecmascript5/RegularExpressions/parserRegularExpress Expect Syntax Error: "parser/ecmascript5/Statements/BreakStatements/parser_breakInIterationOrSwitchStatement4.ts" Expect Syntax Error: "parser/ecmascript5/Statements/ContinueStatements/parser_continueInIterationStatement4.ts" Expect Syntax Error: "parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement4.ts" -Expect Syntax Error: "parser/ecmascript5/Statements/ReturnStatements/parserReturnStatement1.ts" -Expect Syntax Error: "parser/ecmascript5/Statements/ReturnStatements/parserReturnStatement2.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserBlockStatement1.d.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserDebuggerStatement1.d.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserDoStatement1.d.ts" @@ -1311,7 +1306,6 @@ Expect Syntax Error: "parser/ecmascript5/Statements/parserForStatement5.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserIfStatement1.d.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserIfStatement2.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserLabeledStatement1.d.ts" -Expect Syntax Error: "parser/ecmascript5/Statements/parserReturnStatement1.d.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserSwitchStatement1.d.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserThrowStatement1.d.ts" Expect Syntax Error: "parser/ecmascript5/Statements/parserTryStatement1.d.ts" @@ -1367,7 +1361,6 @@ Expect Syntax Error: "parser/ecmascript5/parserArgumentList1.ts" Expect Syntax Error: "parser/ecmascript5/parserAstSpans1.ts" Expect Syntax Error: "parser/ecmascript5/parserImportDeclaration1.ts" Expect Syntax Error: "parser/ecmascript5/parserNoASIOnCallAfterFunctionExpression1.ts" -Expect Syntax Error: "parser/ecmascript5/parserNotRegex1.ts" Expect Syntax Error: "parser/ecmascript5/parserObjectCreationArrayLiteral2.ts" Expect Syntax Error: "parser/ecmascript5/parserObjectCreationArrayLiteral4.ts" Expect Syntax Error: "parser/ecmascript5/parserRealSource1.ts" @@ -2829,6 +2822,24 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" 14 │ ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[classes/classStaticBlock/classStaticBlock7.ts:4:1] + 4 │ yield 1; + 5 │ return 1; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 6 │ } + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[classes/classStaticBlock/classStaticBlock7.ts:35:1] + 35 │ static { + 36 │ return 1; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 37 │ + ╰──── + × Jump target cannot cross function boundary. ╭─[classes/classStaticBlock/classStaticBlock8.ts:5:1] 5 │ if (v === 1) { @@ -8745,6 +8756,14 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" · ─ ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts:1:1] + 1 │ return foo; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 2 │ } + ╰──── + × Unexpected token ╭─[parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts:1:1] 1 │ return foo; @@ -8988,6 +9007,14 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" ╰──── help: Try insert a semicolon here + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/ErrorRecovery/parserStatementIsNotAMemberVariableDeclaration1.ts:1:1] + 1 │ return { + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 2 │ + ╰──── + × Automatic Semicolon Insertion ╭─[parser/ecmascript5/ErrorRecovery/parserUnfinishedTypeNameBeforeKeyword1.ts:1:1] 1 │ var x: TypeModule1. @@ -9554,6 +9581,13 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" ╰──── help: Try insert a semicolon here + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/RegularExpressions/parserRegularExpression1.ts:1:1] + 1 │ return /(#?-?\d*\.\d\w*%?)|(@?#?[\w-?]+%?)/g; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + × Unexpected flag a in regular expression literal ╭─[parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity3.ts:1:1] 1 │ if (1) /regexp/a.foo(); @@ -9926,6 +9960,22 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" 4 │ while (true) { ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/Statements/ReturnStatements/parserReturnStatement1.ts:1:1] + 1 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/Statements/ReturnStatements/parserReturnStatement2.ts:1:1] + 1 │ { + 2 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 3 │ } + ╰──── + × Illegal break statement ╭─[parser/ecmascript5/Statements/parserBreakStatement1.d.ts:1:1] 1 │ break; @@ -10044,6 +10094,13 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" 2 │ } ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/Statements/parserReturnStatement1.d.ts:1:1] + 1 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + × 'with' statements are not allowed ╭─[parser/ecmascript5/Statements/parserWithStatement1.d.ts:1:1] 1 │ with (foo) { @@ -10058,6 +10115,14 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" 2 │ return; ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/Statements/parserWithStatement2.ts:1:1] + 1 │ with (1) + 2 │ return; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + ╰──── + × 'with' statements are not allowed ╭─[parser/ecmascript5/StrictMode/parserStrictMode14.ts:1:1] 1 │ "use strict"; @@ -10142,6 +10207,15 @@ Expect to Parse: "salsa/privateIdentifierExpando.ts" · ╰── Unterminated multiline comment ╰──── + × TS1108: A 'return' statement can only be used within a function body + ╭─[parser/ecmascript5/parserNotRegex1.ts:2:1] + 2 │ { + 3 │ return true; + · ───┬── + · ╰── A 'return' statement can only be used within a function body. + 4 │ } + ╰──── + × Unexpected token ╭─[parser/ecmascript5/parserObjectCreationArrayLiteral1.ts:1:1] 1 │ new Foo[];