Commit Graph

1582 Commits

Author SHA1 Message Date
camc314 e4fad5e1b3 fix(semantic): add TS error code to constructor implementation missing diagnostic (#16517) 2025-12-08 12:11:33 +00:00
sapphi-red 7a2afeef0b feat(parser): add TS1174 error for classes extending multiple base classes (#15993)
Added TS1174  error check.
2025-12-07 07:35:00 +00:00
sapphi-red da87812ac7 feat(semantic): add TS2309 error for export assignment with other exports (#15992)
Added TS2309 error check.
2025-12-06 08:30:06 +00:00
Boshen 3827464d2e chore(submodules): update submodule SHAs to latest commits (#16454)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `26058a0` → `d0994d6`
- babel: `99dcba5` → `7958603`
- estree-conformance: `21042b0` → `3e67aec`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2025-12-03 15:59:20 +00:00
Boshen 481fe8171a ci: update node-compat-table repository from williamkapke to compat-table org
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 23:45:35 +08:00
Boshen 3f6387dd3b ci(workflows): add workflow_call support to update_submodules.yml (#16431)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
2025-12-03 19:47:57 +08:00
Dunqing 75fd568340 fix(formatter): inconsistent union type output between two runs (#16222)
This PR is to fix a union type issue that didn't pass idempotency testing, which was regressed by #16205.
2025-11-28 02:49:47 +00:00
Dunqing 9097167c30 fix(formatter): incorrect printing of union types with comments (#16205)
close: #16176

---------

Signed-off-by: Yuji Sugiura <6259812+leaysgur@users.noreply.github.com>
Co-authored-by: Yuji Sugiura <y.sugiura.0316@gmail.com>
Co-authored-by: Yuji Sugiura <6259812+leaysgur@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-27 20:59:38 +09:00
camchenry 17a8caa5dc feat(parser): add diagnostic for JSX identifiers with hyphens (#16133)
Instead of just emitting "unexpected token", provide a better error message that says exactly what is wrong and how to fix the error.
2025-11-26 09:23:34 +00:00
camchenry 0549ae5b24 feat(parser): add diagnostic for expected ident after optional chain (#16132)
Currently we just emit "unexpected token", but we actually have a good amount of context here to provide better help + error message.
2025-11-26 04:33:00 +00:00
camchenry db839ae2c2 feat(parser): improve diagnostic for unexpected optional declarations (#16131)
Currently we just emit "unexpected token", but we actually have a good amount of context here to provide better help + error message.
2025-11-26 04:32:59 +00:00
copilot-swe-agent 74cf5720bc feat(ast)!: Make source field of TSImportType a StringLiteral (#16114)
- [x] Change `source` field type in `TSImportType` from `TSType<'a>` to `StringLiteral<'a>` in `crates/oxc_ast/src/ast/ts.rs`
- [x] Remove `#[estree(via = TSImportTypeSource)]` attribute from the field
- [x] Run `just ast` to regenerate all derived code
- [x] Update the parser in `crates/oxc_parser/src/ts/types.rs` to parse a `StringLiteral` directly and emit errors for non-string literals
- [x] Delete the dead code `TSImportTypeSource` serializer from `crates/oxc_ast/src/serialize/ts.rs`
- [x] Add `ts_string_literal_expected` diagnostic (TS1141)
- [x] Update semantic snapshot for `import-type-with-type-params.snap`
- [x] Add test case for invalid import type source
- [x] Verify all tests pass
- [x] Simplify error recovery - just report error and create dummy string literal (per review feedback)
- [x] Fix spurious "Expected ')'" error by skipping invalid tokens in error recovery

<!-- START COPILOT CODING AGENT SUFFIX -->

<details>

<summary>Original prompt</summary>

>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>AST: Make `source` field of `TSImportType` a `StringLiteral`</issue_title>
> <issue_description>Continuation of oxc-project/oxc#16074.
>
> The expression inside `import(...)` in TS context (`TSImportType`) cannot legally be anything other than a string literal.
>
> Our parser is too liberal. We currently accept all kind of crazy stuff like:
>
> ```ts
> type A = typeof import(`react`);
> type B = typeof import(A);
> type C = typeof import(`${A} ${B}`);
> type D = typeof import(typeof import('react'));
> ```
>
> [Playground](https://playground.oxc.rs/#eNptU9tOGzEQ/ZXIQqJIqUSRKqFUfQjQSJVooaUqL31g1jsbDF7bHc/molX+nfEmdkDhyfaZ+5njXmk1UbwOOJqOvo7SxTcj0wZP/OGBEDQ/nHz55waPiwOPabFdHkYf9dPN6Ki/2OwzXB14vX0dDxWPT1KAGiuvJr2izqXDGsdq0oCNOFaNpxaYkQrCBC4muCAmeguM9RVqCwRsvIvFuHw0jDGAxgK14OZ2/9S+DYRxHxK1D2Jm6tJj3Vbe5pdu5ju3zVgFoJga6xWuGF2UuoniKPOAtX75G7kjd9NxNDXOOqdTZzlTKom0wFsgCc3oEPf3/LtjMpJQF0NE6ZqN/kbkaYdKC4mroQW5v6KqV13EP1DtZ2Ko7k3Nj2pyNlbo6pvm2jgZUtlG2g1SjXf281OpZhJDvzrPe5qe4uruHfh/et2SD1JLQfzoEGusJafsyUh780vftpBs1goqc5gyrMyyzPOLfQnrxF1FoJ+R72RnEp6dMwotbjvf1ffVE2q+JwiSI5OaCg29TlmIrDrpEOlNGK4CkmnRMdgbuQJ7uvXRbFeUGFJCadHallQGmqNoU2E8O/30WaoIzVfYSOKZp0sLMc4M2rps7XUVUacfyuytreGC/kCGGliY2q32fVX3KspEQQSC5EB0mcWofY1zHD6QS0Iokn2KtZevv6PcOc9DroxYnGffIUv+C0lR+aPI5D5c4wJL0mfE8FNWkQU2hIpovZ2JgFPEAqnyMROe5nFpUclUbhuB64G+BJfbJuGJZoisNi/WFa5W)
>
> TypeScript says these are all errors: [TS Playground](https://www.typescriptlang.org/play/?#code/C4TwDgpgBAglC8VSQPYDMoEsC2YUCdgAKAA3wgEMBjYEgSgG4AoZaAIQSXAnS1wOIxGLblADCnVrxx5CpACQBvGAF8oStivrNWUACKTu0-nKkYZAogHJy1YFbrCgA)
>
> ### AST change
>
> We should alter the type of the `source` field from `TSType<'a>` to `StringLiteral<'a>`:
>
> https://github.com/oxc-project/oxc/blob/35d0ee491cbcd271ebceaac7e25cff0490ded5c4/crates/oxc_ast/src/ast/ts.rs#L1382-L1389
>
> ```diff
> pub struct TSImportType<'a> {
>     pub span: Span,
> -   #[estree(via = TSImportTypeSource)]
> -   pub source: TSType<'a>,
> +   pub source: StringLiteral<'a>,
>     pub options: Option<Box<'a, ObjectExpression<'a>>>,
>     pub qualifier: Option<TSImportTypeQualifier<'a>>,
>     pub type_arguments: Option<Box<'a, TSTypeParameterInstantiation<'a>>>,
> }
> ```
>
> ### Parser changes
>
> If we change the AST first and run `just ast` to regenerate traits code, then all the places which rely on the type of `source` field will become apparent. We'll then need to alter the parser to throw an error if it encounters something that isn't a string literal.
>
> ### `ESTree` serialization
>
> Currently there's a custom deserializer to alter the AST on JS side from `TSType` to `StringLiteral`:
>
> https://github.com/oxc-project/oxc/blob/91eb3f2be509cef11cffeff51fac61a3a4fbd12c/crates/oxc_ast/src/serialize/ts.rs#L506-L538
>
> Once we've changed the field type in AST, this code can be deleted - it's dead code once `#[estree(via = TSImportTypeSource)]` attribute is removed from the `source` field in AST struct.</issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>

</details>

- Fixes oxc-project/oxc#16111

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
2025-11-25 18:51:16 +00:00
overlookmotel 91eb3f2be5 fix(ast/estree): convert TSImportType argument field to Literal (#16109)
Fixes #16074.

Convert `argument` field of `TSImportType` to `Literal` in TS-ESTree AST, and rename it to `source`. This follows the change made recently in TS-ESLint (https://github.com/typescript-eslint/typescript-eslint/pull/11591).
2025-11-25 14:11:12 +00:00
overlookmotel 1d70bab10a test(ast/estree): bump acorn-test262 submodule (#16108)
Bump `acorn-test262` submodule to latest. It aligns its version of `test262` and `TypeScript` submodules to same versions as used in this repo, which fixes a bunch of erroneous ESTree conformance test failures.

It also updates to latest version of TS-ESLint parser, which altered the shape of `TSImportType` (https://github.com/typescript-eslint/typescript-eslint/pull/11591). The test cases broken by this are fixed in next PR (#16109).
2025-11-25 14:11:12 +00:00
camc314 1199cee3ae fix(parser): reject invalid modifiers on parameter properties with binding patterns (#16083)
Fixes #16077
2025-11-25 09:43:09 +00:00
Boshen 523a30a016 style(all): apply oxfmt default options (#16091)
Embrace the defaults!

---------

Co-authored-by: Yuji Sugiura <y.sugiura.0316@gmail.com>
2025-11-25 15:56:24 +09:00
Boshen f25f031fbf chore(submodules): update submodule SHAs to latest commits (#16084)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `c125a8d` → `26058a0`
- babel: `c92c491` → `99dcba5`
- TypeScript: `cc2610f` → `669c25c`
- prettier: `d7fe2da` → `864bb7c`
- acorn-test262: `fd0b12c` → `0435714`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: graphite-app <96075541+graphite-app@users.noreply.github.com>
2025-11-25 13:19:40 +08:00
Dunqing 3a6e8c758d test(formatter): treat tests with syntax errors as passed (#15936)
Skip tests with syntax errors, since it's not the formatter's fault
2025-11-21 07:09:52 +00:00
overlookmotel d4ff004b2d fix(parser): forbid invalid modifiers on module and global (#15723)
Error on invalid modifiers before `module` and `global` declarations.

Previously illegal syntax like this would be parsed without error:

```ts
protected accessor readonly async declare global {}
protected accessor readonly async global {}
protected accessor readonly async module "foo" {}
```

Discovered this bug while working on #15712.

Similar to #11713.
2025-11-18 11:43:38 +00:00
sapphi-red 2191ae9f8d fix(semantic): allow reserved keywords in typescript ambient contexts (#15495)
Reserved keywords are allowed as an identifier in ambient contexts.
```ts
declare const private: number
```
This is allowed.
2025-11-18 08:11:22 +00:00
Boshen 82471c8d5a chore(submodules): update submodule SHAs to latest commits (#15825)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `fd594a0` → `c125a8d`
- babel: `777ded7` → `c92c491`
- TypeScript: `48244d8` → `cc2610f`
- prettier: `9e9f65e` → `d7fe2da`
- acorn-test262: `9cce4c9` → `fd0b12c`
- node-compat-table: `6822522` → `499beb6`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2025-11-18 03:31:03 +00:00
Dunqing c42d9835d4 fix(formatter): re-fix all cases that fail after AstNode::Argument was removed (#15676)
Re-fix all cases that are relevant to the change in #13902. I've manually checked that the Prettier coverage compatibility has gone back exactly to the state before #13902.
2025-11-17 07:54:49 +00:00
Dunqing 0bba12403f refactor(formatter): revert all changes from removing AstKind::Argument (#15675)
Revert all changes in the formatter that were introduced in #13902, as none of them are the ideal solution for the change in the formatter.
2025-11-17 07:54:49 +00:00
sapphi-red d60ca818e7 fix(parser): reject import something 'source' (#15746)
```js
import something 'source'
```
was not rejected but this should be rejected.
https://tc39.es/ecma262/2025/multipage/ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration
2025-11-17 02:58:51 +00:00
leaysgur a7ce782709 test(coverage/typescript): Save reviewed tsc diagnostics error codes (#15686)
Fixes #11582, obsoletes #15542

This time, when you run `cargo run -p oxc_coverage -- parser`, automatically save codes as a snapshot.
2025-11-16 12:42:19 +00:00
sapphi-red 9f54a36de3 fix(semantic): error on \00 in strict mode (#15743)
`\00` matches LegacyOctalEscapeSequence and should be an error in strict mode.
https://tc39.es/ecma262/2025/multipage/ecmascript-language-lexical-grammar.html#sec-string-literals-early-errors
2025-11-16 09:25:13 +00:00
sapphi-red 77efb7698d feat(parser): improve error message for invalid switch clauses (#15728)
Improved error message for invalid switch clauses.

**Before**
```
  x Unexpected token
   ,-[:2:3]
 1 | switch (foo) {
 2 |   caze 1:
   :   ^^^^
 3 | }
   `----
```

**After**
```
  × Expected switch clause
   ╭─[misc/fail/switch-invalid-clause.js:2:3]
 1 │ switch (foo) {
 2 │   caze 1:
   ·   ──┬─
   ·     ╰── `case` or `default` clause expected here
 3 │ }
   ╰────
  help: If this is intended to be the condition for the switch statement, add `case` before it.
```
2025-11-16 02:57:35 +00:00
sapphi-red 56917278ca feat(parser): improve import source from error message (#15727)
Improved error message for `import source` + something + `from`.

**Before**
```
  x Unexpected token
   ,-[:1:19]
 1 | import source foo bar from 'module';
   :                   ^^^
   `----
```

**After**
```
  × Expected `from` but found `Identifier`
   ╭─[misc/fail/import-source-non-from.js:1:19]
 1 │ import source foo bar from 'module';
   ·                   ─┬─
   ·                    ╰── `from` expected
   ╰────
```
2025-11-16 02:57:35 +00:00
sapphi-red b7404bc38e feat(parser): improve error message for missing function body (#15726)
Improved the error message for missing function bodies.

**Before**
```
  x Unexpected token
   ,-[:1:15]
 1 | function foo();
   :               ^
   `----
```

**After**
```
  × Expected function body
   ╭─[typescript/tests/cases/compiler/jsFileCompilationFunctionOverloadSyntax.ts:1:1]
 1 │ function foo();
   · ──────────────
   ╰────
  help: Add a function body (`{}`).
```
2025-11-16 02:57:34 +00:00
sapphi-red 71c2fb05bc feat(parser): improve error message when JSX is found while not enabled (#15725)
Improved the error message when JSX syntax is found while not enabled.

The idea came from esbuild's error message ([esbuild try](https://esbuild.github.io/try/#dAAwLjI3LjAAAGV4cG9ydCBjb25zdCBmb28gPSA8Rm9vIC8+Ow)).

**Before**
```
  x Unexpected token
   ,-[:1:20]
 1 | export const foo = <Foo />;
   :                    ^
   `----
```

**After**
```
  × Unexpected JSX expression
   ╭─[misc/fail/jsx-in-js.js:1:20]
 1 │ export const foo = <Foo />;
   ·                    ───────
   ╰────
  help: JSX syntax is disabled and should be enabled via the parser options
```
2025-11-16 02:57:34 +00:00
Boshen 9b8f41459e chore(submodules): update submodule SHAs to latest commits (#15586)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `d2940bd` → `fd594a0`
- babel: `4cc3d88` → `777ded7`
- TypeScript: `8ea03f8` → `48244d8`
- prettier: `011791f` → `9e9f65e`
- acorn-test262: `994d763` → `9cce4c9`
- node-compat-table: `17ac85c` → `6822522`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2025-11-11 17:43:08 +08:00
sapphi-red ee035b49c6 test(tasks/coverage/typescript): collect more error files (#15496)
Improved the error file collection logic to pick up files like `importMeta(module=system,target=es5).errors.txt`​. Also added support for `preserveconstenums`​ and `usedefineforclassfields`.
2025-11-10 04:36:10 +00:00
sapphi-red efe0d91e56 test(tasks/coverage/typescript): Update 1xxx error codes handling (#15493)
Part of https://github.com/oxc-project/oxc/issues/11582

Used the same hash in https://github.com/oxc-project/oxc/issues/11582#issuecomment-3008344585 (261630d650c0c961860187bebc86e25c3707c05d).
2025-11-10 02:05:54 +00:00
sapphi-red ed1cdd130b test(tasks/coverage/typescript): Update 2541-2999 error codes handling (#15492)
Part of https://github.com/oxc-project/oxc/issues/11582

Used the same hash in https://github.com/oxc-project/oxc/issues/11582#issuecomment-3008344585 (261630d650c0c961860187bebc86e25c3707c05d).

Hope you don't mind 😀
2025-11-10 01:37:04 +00:00
sapphi-red 732205e27b fix(parser): reject using / await using in a switch case / default clause (#15225)
`using` / `await using` directly nested within a `case` or `default` clause are now disallowed (https://github.com/rbuckton/ecma262/pull/14). This PR implements this change.

Note that TypeScript does not disallow them yet (https://github.com/microsoft/TypeScript/issues/62708) and the test failing in `tasks/coverage/snapshots/parser_typescript.snap` is caused by that.
2025-11-08 10:29:37 +00:00
camc314 8951953008 feat(parser): improve diagnostic messages for merge conflicts (#15443)
Adds detection and improved error messages for version control merge conflicts encountered in the parser.

This is based upon rustc's implementation.
2025-11-08 06:53:50 +00:00
sapphi-red 73f9e29a14 feat(parser): show allowed modifiers in invalid modifier error messages (#15442)
Add allowed modifiers for that context so that it's easier to understand what is wrong.
2025-11-08 06:46:31 +00:00
sapphi-red 5616ad5f57 feat(parser,semantic): add TS1274 error (#15441)
Added TS1274 error `'in' modifier can only appear on a type parameter of a class, interface or type alias.`.
2025-11-08 06:46:30 +00:00
sapphi-red 0fa484d949 feat(parser): improve error messages for missing closing parentheses (#15446)
Improves error message for imbalanced tokens for parentheses.

**Before**
```
  × Expected `)` but found `}`
   ╭─[typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErrorRecoveryIfStatement3.ts:4:3]
 3 │     if (a.b
 4 │   }
   ·   ┬
   ·   ╰── `)` expected
 5 │   f2() {
   ╰────
```
**After**
```
  × Expected `)` but found `}`
   ╭─[typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErrorRecoveryIfStatement3.ts:4:3]
 2 │   f1() {
 3 │     if (a.b
   ·        ┬
   ·        ╰── Opened here
 4 │   }
   ·   ┬
   ·   ╰── `)` expected
 5 │   f2() {
   ╰────
```
2025-11-08 04:34:29 +00:00
sapphi-red 4decc1d854 feat(parser): improve error message for missing block closing tokens (#15445)
Improves error message for imbalanced tokens for blocks.

**Before**
```
  × Expected `}` but found `EOF`
   ╭─[typescript/tests/cases/compiler/missingCloseBrace.ts:8:6]
 7 │
 8 │     }
   ╰────
```
**After**
```
  × Expected `}` but found `EOF`
   ╭─[typescript/tests/cases/compiler/missingCloseBrace.ts:1:22]
 1 │ function base_init() {
   ·                      ┬
   ·                      ╰── Opened here
 2 │     {
   ╰────
   ╭─[typescript/tests/cases/compiler/missingCloseBrace.ts:8:6]
 7 │
 8 │     }
   ╰────
```
2025-11-08 04:34:29 +00:00
sapphi-red e1704a4527 feat(parser): improve error message for missing closing tokens that may be followed by a rest element (#15444)
Improves error message for imbalanced tokens that allows rest elements.

**Before**
```
  × Expected `,` but found `Identifier`
   ╭─[typescript/tests/cases/compiler/restParamModifier.ts:2:27]
 1 │ class C {
 2 │     constructor(...public rest: string[]) {}
   ·                           ──┬─
   ·                             ╰── `,` expected
 3 │ }
   ╰────
```
**After**
```
  × Expected `,` or `)` but found `Identifier`
   ╭─[typescript/tests/cases/compiler/restParamModifier.ts:2:27]
 1 │ class C {
 2 │     constructor(...public rest: string[]) {}
   ·                ┬          ──┬─
   ·                │            ╰── `,` or `)` expected
   ·                ╰── Opened here
 3 │ }
   ╰────
```
2025-11-08 04:34:28 +00:00
sapphi-red b7e3849cf0 feat(parser): add more help messages to diagnostics (#15440)
Added more helps to parser errors to make it easier to understand why the error happens or how it can be resolved.
2025-11-08 04:28:18 +00:00
sapphi-red d4f6545078 feat(parser): improve error message for missing closing tokens (#15269)
Improves error message for imbalanced tokens.
```
 × Expected `,` or `]` but found `const`
   ╭─[misc/fail/imbalanced-array-expr.js:2:1]
 1 │ const foo = [0, 1
   ·             ┬
   ·             ╰── Opened here
 2 │ const bar = 2
   · ──┬──
   ·   ╰── `,` or `]` expected
   ╰────
```

The error message for this case was:
```
  x Expected `,` but found `const`
   ,-[:2:1]
 1 | const foo = [0,1
 2 | const bar = 2
   : ^^|^^
   :   `-- `,` expected
   `----
```

This change makes it clear why the parser is expecting `,` and also tell that it can be fixed by adding the closing token somewhere.
2025-11-04 13:13:00 +00:00
sapphi-red 2ef8f01624 feat(parser): improve error message for missing conditional alternative (#15268)
Improve error message for missing alternative for conditional expressions.
```
 × Expected `:` but found `EOF`
   ╭─[misc/fail/missing-conditional-alternative-type.ts:2:1]
 1 │ type A = 1 extends 2 ? 3
   ·                      ┬
   ·                      ╰── Conditional starts here
   ╰────

  × Expected `:` but found `EOF`
   ╭─[misc/fail/missing-conditional-alternative.js:2:1]
 1 │ const foo = 1 ? 2
   ·               ┬
   ·               ╰── Conditional starts here
   ╰────
```
Without this PR, the error mesage is a simple ``Expected `:` but found `EOF` `` only.
2025-11-04 13:12:59 +00:00
sapphi-red 5f203c675a feat(parser): improve trailing comma error messages (#15267)
Improved error message for trailing comma related errors (e.g. `('foo',)`, ` type A = { [key: string,]: string; }`).
2025-11-04 13:12:59 +00:00
sapphi-red e62d14aeeb feat(parser): improve error message for using declarations with export (#15266)
Add a better error message for `export using x = something` and `export await using x = something`.
2025-11-04 13:06:53 +00:00
sapphi-red 4a54107c9f fix(semantic): allow arguments in the class field keys (#15227)
Allow codes like `function foo() { class Bar { [arguments]: 1 } }`.
2025-11-03 06:38:47 +00:00
sapphi-red 8b14ec9370 fix(minifier): handle { __proto__: null } instanceof Object correctly (#15217)
`{ __proto__: null } instanceof Object` should be `false` or kept as-is, or it was compressed to `true`.
2025-11-02 12:20:56 +00:00
sapphi-red 4668004924 fix(parser): reject using / await using in single statement contexts (#15224)
Reject codes like `while (1) using foo = {}` similar to `while (1) let foo = {}`.
2025-11-02 12:08:56 +00:00
sapphi-red 0398d4011a fix(parser): reject trailing commas after rest elements in object patterns (#15223)
Reject codes like `({...a,} = {});` like we reject `([...a,] = []);`.
2025-11-02 12:08:56 +00:00