Commit Graph

2554 Commits

Author SHA1 Message Date
ch3rry aa49d86046 fix(linter): allow spread rule options in config types (#25675)
## Summary

- represent variadic rule options as a severity followed by zero or more
option values
- regenerate the Oxlint configuration schema and TypeScript declarations
- add a type-level regression for mapped options spread into
`no-restricted-globals`

## Root cause

The schema wrapper materialized the first `additionalItems` entry as a
required tuple element and set `minItems` to 2. A dynamic TypeScript
spread has type `T[]` and may be empty, so it cannot satisfy that
required position even though the severity-only form is already valid
through `RuleNoConfig`.

Keeping severity as the only fixed tuple item and leaving the rule
options in `additionalItems` generates `[severity, ...options]`, which
accepts both an empty spread and populated spreads without changing
runtime rule behavior.

Closes #25666


## AI assistance

Implemented with assistance from OpenAI Codex. The contributor remains
responsible for reviewing, understanding, and submitting the change
under the repository AI usage policy.

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-08-17 14:11:07 +01:00
Boshen 9ed10b728d perf(linter): use unstable sorts for unique keys (#25778)
Switches order-independent sorts to unstable sorting and avoids cloning rule-table plugin names.

Reduces the stripped `oxlint` release binary from 12,773,568 to 12,757,040 bytes: 16,528 bytes (0.13%).

Validated with `cargo test -p oxc_linter` and focused oxlint JSON checks.

AI assistance was used for analysis and implementation.
2026-08-17 09:34:39 +00:00
renovate[bot] efebf4c824 chore(deps): update npm packages (#25753)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@napi-rs/wasm-runtime](https://napi.rs/)
([source](https://redirect.github.com/napi-rs/napi-rs/tree/HEAD/wasm-runtime))
| [`1.2.2` →
`1.2.3`](https://renovatebot.com/diffs/npm/@napi-rs%2fwasm-runtime/1.2.2/1.2.3)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fwasm-runtime/1.2.3?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fwasm-runtime/1.2.3?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fwasm-runtime/1.2.2/1.2.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fwasm-runtime/1.2.2/1.2.3?slim=true)
|
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`8.66.0` →
`8.67.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.66.0/8.67.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.67.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.67.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.66.0/8.67.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.66.0/8.67.0?slim=true)
|
|
[@typescript-eslint/scope-manager](https://typescript-eslint.io/packages/scope-manager)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager))
| [`8.66.0` →
`8.67.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.66.0/8.67.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.67.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.67.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.66.0/8.67.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.66.0/8.67.0?slim=true)
|
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys))
| [`8.66.0` →
`8.67.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.66.0/8.67.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.67.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.67.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.66.0/8.67.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.66.0/8.67.0?slim=true)
|
| [degit](https://redirect.github.com/Rich-Harris/degit) | [`3.6.6` →
`3.7.0`](https://renovatebot.com/diffs/npm/degit/3.6.6/3.7.0) |
![age](https://developer.mend.io/api/mc/badges/age/npm/degit/3.7.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/degit/3.7.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/degit/3.6.6/3.7.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/degit/3.6.6/3.7.0?slim=true)
|
| [eslint](https://eslint.org)
([source](https://redirect.github.com/eslint/eslint)) | [`10.8.0` →
`10.8.1`](https://renovatebot.com/diffs/npm/eslint/10.8.0/10.8.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/10.8.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/10.8.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/10.8.0/10.8.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/10.8.0/10.8.1?slim=true)
|
|
[serialize-javascript](https://redirect.github.com/yahoo/serialize-javascript)
| [`7.0.7` →
`7.1.0`](https://renovatebot.com/diffs/npm/serialize-javascript/7.0.7/7.1.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/serialize-javascript/7.1.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/serialize-javascript/7.1.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/serialize-javascript/7.0.7/7.1.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/serialize-javascript/7.0.7/7.1.0?slim=true)
|
| [svelte](https://svelte.dev)
([source](https://redirect.github.com/sveltejs/svelte/tree/HEAD/packages/svelte))
| [`5.56.8` →
`5.56.9`](https://renovatebot.com/diffs/npm/svelte/5.56.8/5.56.9) |
![age](https://developer.mend.io/api/mc/badges/age/npm/svelte/5.56.9?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/svelte/5.56.9?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/svelte/5.56.8/5.56.9?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/svelte/5.56.8/5.56.9?slim=true)
|
| [tsx](https://tsx.hirok.io)
([source](https://redirect.github.com/privatenumber/tsx)) | [`4.23.9` →
`4.23.12`](https://renovatebot.com/diffs/npm/tsx/4.23.9/4.23.12) |
![age](https://developer.mend.io/api/mc/badges/age/npm/tsx/4.23.12?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tsx/4.23.12?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tsx/4.23.9/4.23.12?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tsx/4.23.9/4.23.12?slim=true)
|

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/wasm-runtime)</summary>

###
[`v1.2.3`](https://redirect.github.com/napi-rs/napi-rs/blob/HEAD/wasm-runtime/CHANGELOG.md#123-2026-08-12)

[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/wasm-runtime@1.2.2...@napi-rs/wasm-runtime@1.2.3)

##### Bug Fixes

- **cli:** compatible with emnapi v1 & v2
([#&#8203;3454](https://redirect.github.com/napi-rs/napi-rs/issues/3454))
([aeba312](https://redirect.github.com/napi-rs/napi-rs/commit/aeba31217201e96435848fd17055478ff7cf8b98))
- **deps:** update emnapi to v2.0.0-alpha.4
([#&#8203;3451](https://redirect.github.com/napi-rs/napi-rs/issues/3451))
([b8ba732](https://redirect.github.com/napi-rs/napi-rs/commit/b8ba732c4611a54dde09dfe3da750f50726b51d9))

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v8.67.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8670-2026-08-10)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.66.0...v8.67.0)

This was a version bump only for parser to align it with other projects,
there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.67.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/scope-manager)</summary>

###
[`v8.67.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8670-2026-08-10)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.66.0...v8.67.0)

This was a version bump only for scope-manager to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.67.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/visitor-keys)</summary>

###
[`v8.67.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8670-2026-08-10)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.66.0...v8.67.0)

This was a version bump only for visitor-keys to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.67.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>Rich-Harris/degit (degit)</summary>

###
[`v3.7.0`](https://redirect.github.com/Rich-Harris/degit/compare/v3.6.6...v3.7.0)

[Compare
Source](https://redirect.github.com/Rich-Harris/degit/compare/v3.6.6...v3.7.0)

</details>

<details>
<summary>eslint/eslint (eslint)</summary>

###
[`v10.8.1`](https://redirect.github.com/eslint/eslint/releases/tag/v10.8.1)

[Compare
Source](https://redirect.github.com/eslint/eslint/compare/v10.8.0...v10.8.1)

#### Bug Fixes

-
[`18eb0a7`](https://redirect.github.com/eslint/eslint/commit/18eb0a7e787b9fac3049ef3dad0e845d2bd940a4)
fix: prevent ASI hazard in `no-unused-labels` autofix
([#&#8203;21173](https://redirect.github.com/eslint/eslint/issues/21173))
(dongkyu lee)
-
[`151ba3f`](https://redirect.github.com/eslint/eslint/commit/151ba3f5834a0909e8b9b1736f4889ac694c0104)
fix: false positives in `getter-return` and `accessor-pairs`
([#&#8203;21163](https://redirect.github.com/eslint/eslint/issues/21163))
(Grit)
-
[`6898df9`](https://redirect.github.com/eslint/eslint/commit/6898df9364639ee64b9448a4cb6b08a30c16bd37)
fix: ignore meta-property names in `id-denylist`
([#&#8203;21166](https://redirect.github.com/eslint/eslint/issues/21166))
(Pixel)
-
[`4d7db66`](https://redirect.github.com/eslint/eslint/commit/4d7db6628e2badf0857cb88734fe641c3874bce9)
fix: ignore meta-property names in `id-match`
([#&#8203;21167](https://redirect.github.com/eslint/eslint/issues/21167))
(Pixel)
-
[`677214e`](https://redirect.github.com/eslint/eslint/commit/677214e7eea83d8bc6e4b79eea871577e1369d5f)
fix: handle ASI hazards in no-unused-vars removeVar suggestion
([#&#8203;20935](https://redirect.github.com/eslint/eslint/issues/20935))
(kuldeep kumar)

#### Documentation

-
[`7d0cbf8`](https://redirect.github.com/eslint/eslint/commit/7d0cbf81cfdb7526b5c4cb7b222ddc7f257db560)
docs: Update README (GitHub Actions Bot)
-
[`0a05812`](https://redirect.github.com/eslint/eslint/commit/0a05812adb12598b32e85297b98df5ad14501d60)
docs: add missing backticks to `no-duplicate-imports.js`
([#&#8203;21183](https://redirect.github.com/eslint/eslint/issues/21183))
(Lee Daeun)
-
[`678c90b`](https://redirect.github.com/eslint/eslint/commit/678c90b55da2889d4400cbf6e2584ab683faf202)
docs: Update README (GitHub Actions Bot)
-
[`8a10424`](https://redirect.github.com/eslint/eslint/commit/8a104242e8e1c5614940fab7324346974cff7d26)
docs: Update README (GitHub Actions Bot)
-
[`69bb948`](https://redirect.github.com/eslint/eslint/commit/69bb948061105426dbe6e3c931fcda783286e020)
docs: Update README (GitHub Actions Bot)

#### Chores

-
[`0a14800`](https://redirect.github.com/eslint/eslint/commit/0a148005051fded2ef1d14cc228ae505251b4b10)
chore: update github/codeql-action action to v4.37.4
([#&#8203;21196](https://redirect.github.com/eslint/eslint/issues/21196))
(renovate\[bot])
-
[`05adcb1`](https://redirect.github.com/eslint/eslint/commit/05adcb13542061dc7fadde5cd58d23d405a96d93)
test: fix failing ecosystem test for `eslint-plugin-unicorn`
([#&#8203;21191](https://redirect.github.com/eslint/eslint/issues/21191))
(Lazizbek Ergashev)
-
[`5611035`](https://redirect.github.com/eslint/eslint/commit/56110356652dd614b3cf0933538abb551fc6bd6f)
test: add error locations info to `no-void`
([#&#8203;21185](https://redirect.github.com/eslint/eslint/issues/21185))
(Lee Daeun)
-
[`ee47333`](https://redirect.github.com/eslint/eslint/commit/ee47333aa681cfc3cb54df08c38f211ea219cc2a)
ci: bump github/codeql-action from 4 to 4.37.3
([#&#8203;21176](https://redirect.github.com/eslint/eslint/issues/21176))
(dependabot\[bot])
-
[`f131c03`](https://redirect.github.com/eslint/eslint/commit/f131c034ad91bbf06bcbb6b5e931447a8e419a46)
chore: improve ecosystem test failure reporting
([#&#8203;20937](https://redirect.github.com/eslint/eslint/issues/20937))
(crimsonjay0)
-
[`1f6edde`](https://redirect.github.com/eslint/eslint/commit/1f6eddee609b369b50993eab08d437dda4700991)
chore: update ecosystem plugins
([#&#8203;21182](https://redirect.github.com/eslint/eslint/issues/21182))
(ESLint Bot)
-
[`d3266fb`](https://redirect.github.com/eslint/eslint/commit/d3266fb26c719c6b90a6cbe54bb120c9335ad19c)
chore: unpin `webpack` dependency
([#&#8203;21172](https://redirect.github.com/eslint/eslint/issues/21172))
(Francesco Trotta)
-
[`65a6519`](https://redirect.github.com/eslint/eslint/commit/65a6519cc8733b4688558a8611397cf9d01dd55d)
chore: add allowScripts field to package.json
([#&#8203;21092](https://redirect.github.com/eslint/eslint/issues/21092))
(GiHoon Noh)
-
[`22e5256`](https://redirect.github.com/eslint/eslint/commit/22e52568536e0009d4493dc888736bc163220c4b)
ci: add `triage:no` label to Dependabot PRs
([#&#8203;21141](https://redirect.github.com/eslint/eslint/issues/21141))
(lumir)
-
[`55c9038`](https://redirect.github.com/eslint/eslint/commit/55c9038836c91b6bd5617f0c97bea2274c9cc0bf)
ci: bump actions/labeler from 6 to 7
([#&#8203;21159](https://redirect.github.com/eslint/eslint/issues/21159))
(dependabot\[bot])
-
[`7280e78`](https://redirect.github.com/eslint/eslint/commit/7280e78183d4711a49916b6a49ba5efaa651a991)
chore: update dependency prettier to v3.9.6
([#&#8203;21162](https://redirect.github.com/eslint/eslint/issues/21162))
(renovate\[bot])
-
[`eddbad6`](https://redirect.github.com/eslint/eslint/commit/eddbad60158d8cda86830fbe934a9d2282273b32)
test: fix failing ecosystem test for `eslint-plugin-unicorn`
([#&#8203;21156](https://redirect.github.com/eslint/eslint/issues/21156))
(Francesco Trotta)
-
[`60a178d`](https://redirect.github.com/eslint/eslint/commit/60a178d5ef1b0c471be0831031ed7347f8f81dc2)
chore: update ecosystem plugins
([#&#8203;21150](https://redirect.github.com/eslint/eslint/issues/21150))
(ESLint Bot)
-
[`f9f61dc`](https://redirect.github.com/eslint/eslint/commit/f9f61dc6112836f46a58a410c38b8c2faf10973f)
test: add error locations to `no-unreachable`
([#&#8203;21151](https://redirect.github.com/eslint/eslint/issues/21151))
(JIYEON)
-
[`d086293`](https://redirect.github.com/eslint/eslint/commit/d08629382b0a6aaa042823b796e5100e60053b54)
test: add error locations to `no-undef`
([#&#8203;21147](https://redirect.github.com/eslint/eslint/issues/21147))
(JIYEON)
-
[`cc01b67`](https://redirect.github.com/eslint/eslint/commit/cc01b67061bbf558aa25746883ea1cad847f7cf2)
test: add error locations to `no-useless-catch`
([#&#8203;21144](https://redirect.github.com/eslint/eslint/issues/21144))
(devoil)
-
[`688e75e`](https://redirect.github.com/eslint/eslint/commit/688e75ede01b295d51f2f86c9d82da020a4c887e)
chore: add missing backticks in JSDoc
([#&#8203;21143](https://redirect.github.com/eslint/eslint/issues/21143))
(Bo Hyun Kim)
-
[`7c1e175`](https://redirect.github.com/eslint/eslint/commit/7c1e17543ad396f50f65b003cf9142d43d3c63b0)
test: add error locations to `require-await`
([#&#8203;21145](https://redirect.github.com/eslint/eslint/issues/21145))
(Grit)
-
[`588a26d`](https://redirect.github.com/eslint/eslint/commit/588a26ddce3c5a20f5b3f3d51ba1353cce7b4b0c)
test: add error locations to `no-extra-label`
([#&#8203;21139](https://redirect.github.com/eslint/eslint/issues/21139))
(dongkyu lee)
-
[`059aa89`](https://redirect.github.com/eslint/eslint/commit/059aa895743639e3ab53d14f9d944ff4be042233)
test: add error locations to `no-useless-concat`
([#&#8203;21140](https://redirect.github.com/eslint/eslint/issues/21140))
(dongkyu lee)
-
[`5a452a8`](https://redirect.github.com/eslint/eslint/commit/5a452a8ba53917d65c9d83c3959ed35c2f890613)
test: add error locations to `no-const-assign`
([#&#8203;21138](https://redirect.github.com/eslint/eslint/issues/21138))
(dongkyu lee)

</details>

<details>
<summary>yahoo/serialize-javascript (serialize-javascript)</summary>

###
[`v7.1.0`](https://redirect.github.com/yahoo/serialize-javascript/releases/tag/v7.1.0)

[Compare
Source](https://redirect.github.com/yahoo/serialize-javascript/compare/v7.0.7...v7.1.0)

#### What's Changed

- feat: add Node.js 26 to test matrix by
[@&#8203;okuryu](https://redirect.github.com/okuryu) in
[#&#8203;224](https://redirect.github.com/yahoo/serialize-javascript/pull/224)
- release: v7.1.0 by
[@&#8203;okuryu](https://redirect.github.com/okuryu) in
[#&#8203;225](https://redirect.github.com/yahoo/serialize-javascript/pull/225)

**Full Changelog**:
<https://github.com/yahoo/serialize-javascript/compare/v7.0.7...v7.1.0>

</details>

<details>
<summary>sveltejs/svelte (svelte)</summary>

###
[`v5.56.9`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5569)

[Compare
Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.56.8...svelte@5.56.9)

##### Patch Changes

- fix: skip controlled each fast path while another batch is pending
([#&#8203;18625](https://redirect.github.com/sveltejs/svelte/pull/18625))

- fix: better whitespace handling inside printer
([#&#8203;18638](https://redirect.github.com/sveltejs/svelte/pull/18638))

- fix: don't duplicate comments in attributes
([#&#8203;18636](https://redirect.github.com/sveltejs/svelte/pull/18636))

- fix: preserve CSS comments in the AST printer
([#&#8203;18637](https://redirect.github.com/sveltejs/svelte/pull/18637))

</details>

<details>
<summary>privatenumber/tsx (tsx)</summary>

###
[`v4.23.12`](https://redirect.github.com/privatenumber/tsx/releases/tag/v4.23.12)

[Compare
Source](https://redirect.github.com/privatenumber/tsx/compare/v4.23.11...v4.23.12)

##### Bug Fixes

- shim `import.meta` when tokens are split by comments or newlines
([#&#8203;829](https://redirect.github.com/privatenumber/tsx/issues/829))
([ed9d330](https://redirect.github.com/privatenumber/tsx/commit/ed9d33046a135de13a35fdfce12368b79d1b1518)),
closes
[#&#8203;828](https://redirect.github.com/privatenumber/tsx/issues/828)

***

This release is also available on:

- [npm package (@&#8203;latest
dist-tag)](https://www.npmjs.com/package/tsx/v/4.23.12)

###
[`v4.23.11`](https://redirect.github.com/privatenumber/tsx/compare/v4.23.10...bd3bc6448e957c1172eb91a0584ec7fec2d6a7ad)

[Compare
Source](https://redirect.github.com/privatenumber/tsx/compare/v4.23.10...v4.23.11)

###
[`v4.23.10`](https://redirect.github.com/privatenumber/tsx/releases/tag/v4.23.10)

[Compare
Source](https://redirect.github.com/privatenumber/tsx/compare/v4.23.9...v4.23.10)

##### Bug Fixes

- support nyc coverage discovery
([#&#8203;710](https://redirect.github.com/privatenumber/tsx/issues/710))
([ec1bcd5](https://redirect.github.com/privatenumber/tsx/commit/ec1bcd5f711e5159b67cb0aea211f06cf2cfce8a))

***

This release is also available on:

- [npm package (@&#8203;latest
dist-tag)](https://www.npmjs.com/package/tsx/v/4.23.10)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4yOS41IiwidXBkYXRlZEluVmVyIjoiNDQuMjkuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com>
2026-08-17 08:35:47 +00:00
renovate[bot] 9c6f1912b5 chore(deps): update rust crates (#25756)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [futures](https://rust-lang.github.io/futures-rs)
([source](https://redirect.github.com/rust-lang/futures-rs)) |
workspace.dependencies | patch | `0.3.33` → `0.3.34` |
| [handlebars](https://redirect.github.com/sunng87/handlebars-rust) |
workspace.dependencies | patch | `6.4.3` → `6.4.4` |
|
[javascript-globals](https://redirect.github.com/oxc-project/javascript-globals)
| workspace.dependencies | patch | `1.5.1` → `1.5.2` |

---

### Release Notes

<details>
<summary>rust-lang/futures-rs (futures)</summary>

###
[`v0.3.34`](https://redirect.github.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#0334---2026-08-11)

[Compare
Source](https://redirect.github.com/rust-lang/futures-rs/compare/0.3.33...0.3.34)

- Preserve cloned waker identity.
([#&#8203;3032](https://redirect.github.com/rust-lang/futures-rs/issues/3032))
- Updato `syn` to 3.
([#&#8203;3028](https://redirect.github.com/rust-lang/futures-rs/issues/3028))

</details>

<details>
<summary>sunng87/handlebars-rust (handlebars)</summary>

###
[`v6.4.4`](https://redirect.github.com/sunng87/handlebars-rust/blob/HEAD/CHANGELOG.md#644---2026-08-12)

[Compare
Source](https://redirect.github.com/sunng87/handlebars-rust/compare/v6.4.3...v6.4.4)

- \[Changed] We have to revert `preserve_json_order` as a default
feature. Users
  who need this can still enable it for handlebars-rust, or enable
  `preserve_order` for you serde\_json.

</details>

<details>
<summary>oxc-project/javascript-globals (javascript-globals)</summary>

###
[`v1.5.2`](https://redirect.github.com/oxc-project/javascript-globals/blob/HEAD/CHANGELOG.md#152---2026-08-13)

[Compare
Source](https://redirect.github.com/oxc-project/javascript-globals/compare/javascript-globals-v1.5.1...javascript-globals-v1.5.2)

##### Other

- Auto update globals from upstream
([#&#8203;268](https://redirect.github.com/oxc-project/javascript-globals/pull/268))
- Auto update globals from upstream
([#&#8203;265](https://redirect.github.com/oxc-project/javascript-globals/pull/265))
- Auto update globals from upstream
([#&#8203;261](https://redirect.github.com/oxc-project/javascript-globals/pull/261))
- *(deps)* update rust crate serde\_json to v1.0.151
([#&#8203;259](https://redirect.github.com/oxc-project/javascript-globals/pull/259))
- *(deps)* update rust crate serde to v1.0.229
([#&#8203;256](https://redirect.github.com/oxc-project/javascript-globals/pull/256))
- update sponsor section
- *(deps)* update rust crate rustc-hash to v2.1.3
([#&#8203;247](https://redirect.github.com/oxc-project/javascript-globals/pull/247))
- standardize rustfmt config
- normalize README sponsor section
- add crates environment to release workflow

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4yOS41IiwidXBkYXRlZEluVmVyIjoiNDQuMjkuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com>
2026-08-17 08:30:18 +00:00
Yuji Sugiura 223e7855fe docs(oxfmt/conformance): Update notes on conformance (#25757)
Filled current state.
2026-08-17 09:25:11 +09:00
renovate[bot] 2d2b3be43d chore(deps): update rust crate sort-package-json to v1 (#25741)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[sort-package-json](https://redirect.github.com/oxc-project/sort-package-json)
| workspace.dependencies | major | `0.0.15` → `1.0.0` |

---

### Release Notes

<details>
<summary>oxc-project/sort-package-json (sort-package-json)</summary>

###
[`v1.0.0`](https://redirect.github.com/oxc-project/sort-package-json/blob/HEAD/CHANGELOG.md#100---2026-08-16)

[Compare
Source](https://redirect.github.com/oxc-project/sort-package-json/compare/v0.0.15...v1.0.0)

##### Changed

- **Breaking:** Stabilize the public `SortOptions` API and refresh crate
metadata and documentation
([#&#8203;158](https://redirect.github.com/oxc-project/sort-package-json/pull/158))

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4yOS41IiwidXBkYXRlZEluVmVyIjoiNDQuMjkuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Boshen <boshenc@gmail.com>
2026-08-16 13:58:43 +00:00
Boshen 892238149b refactor(linter): remove inactive react config rule (#25740)
Remove the inactive `react/config` rule and its generated metadata. Oxlint uses fixed, valid React Compiler options, so the rule cannot produce actionable diagnostics.

AI-assisted: Codex was used to implement and validate this change.
2026-08-16 12:39:27 +00:00
Boshen 2dd7446b8f perf(diagnostics): preallocate graphical output (#25721)
Preallocate graphical reporter output from observed per-diagnostic size.

Criterion: single ASCII -13.7%, batch ASCII -5.7%, Unicode/tab -2.0%.

AI-assisted.

<sub>Stack created with <a
href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a
href="https://gh.io/stacks-feedback">Give Feedback 💬</a></sub>
2026-08-16 19:06:17 +08:00
Boshen 9c8abab7a7 perf(diagnostics): batch graphical reports (#25710)
Batch graphical diagnostics so reports sharing a source reuse line
indexing, and route oxlint diagnostic batches through the new API.

AI assistance: Codex was used. The contributor remains responsible for
this change.

<sub>Stack created with <a
href="https://github.com/github/gh-stack">GitHub Stacks CLI</a></sub>
2026-08-16 19:06:16 +08:00
Boshen 8c4552dfa6 feat(linter)!: split react/react-compiler into per-category rules (#25500)
Splits the experimental `react/react-compiler` rule into 24 category-specific rules matching `eslint-plugin-react-hooks` v7.

- Runs React Compiler once per file and routes structured diagnostics to each enabled rule.
- Removes `react/react-compiler` and `reportAllBailouts`, with rules categorized by user-facing lint intent.
- Adds per-rule documentation and deduplicates shared React lint URLs.
- Preserves standardized compiler diagnostics while reporting each finding under its Oxlint rule name.

Breaking change: configurations using `react/react-compiler` must migrate to the category-specific rules.

Written with Claude Code and Codex.
2026-08-15 14:56:58 +00:00
camc314 beb724dce2 fix(linter/eslint/no-unused-vars): report bare underscore parameters (#25663)
## Summary

- report a bare underscore parameter when no args ignore pattern is configured
- preserve the optimized underscore-prefix behavior for explicit argsIgnorePattern configuration
- update focused rule coverage and generated documentation

Closes #25626
2026-08-14 13:16:16 +00:00
camc314 4004c101ca fix(linter/eslint/no-irregular-whitespace): check comments by default (#25660)
## Summary

- align the skipComments default with ESLint
- report irregular whitespace in line and block comments by default
- preserve the skipComments: true opt-out
- verify suppressed comment diagnostics count disable directives as used
- regenerate the published configuration schema

Fixes #25616.
2026-08-14 12:59:55 +00:00
leaysgur 673dc6db69 docs(oxfmt): move some docs from AGENTS.md to code comment (#25649)
Follow up on https://github.com/oxc-project/oxc/pull/25531#discussion_r3773878394
2026-08-14 09:48:31 +00:00
Mikhail Baev 285820eed6 fix(linter/no-large-snapshots): precompile and document allowed snapshot matchers (#25611)
issue #23594

- Move regex compilation to configuration parsing to avoid recompiling
patterns for every snapshot entry
- Document the matching behavior of allowedSnapshots (first interpret as
regex, if not valid match as string)
- Fix a small typo where both example sections were labeled “incorrect"
- Replace manual config parsing with DefaultRuleConfig
2026-08-14 10:47:51 +01:00
leaysgur c07fe7c217 feat(oxfmt): support experimentalOperatorPosition (#25643)
Fixes #16366

---

Option name requires `experimental` prefix for now.

Values are:

- `"start"`
- `"end"`(default)

This is also available on playground.
2026-08-14 08:12:16 +00:00
leaysgur a38f7b3d57 fix(oxlint,oxfmt): apply .gitignore only to walk targets, not explicitly named files (#25531)
Possibly fixes #25259, and partial revert of #25133.

---

- `.gitignore` applies only to discovery (walking directory targets, cwd, globs)
- An explicitly named file target is linted / formatted even when gitignored
  - = Restoring the pre-[#25133]() behavior for files, while fully keeping the [#25107]() fix for walk roots

| Target | Current | This PR |
| --- | --- | --- |
| Explicit file (`oxlint dist/a.js`) | skipped | linted |
| Explicit directory (`oxlint dist`) | skipped | skipped |
| cwd inside ignored tree | skipped | skipped |

The underlying principle:

> `.gitignore` is a message addressed to git, not to tools.
> Borrowing it to scope discovery is a useful heuristic, and a heuristic may narrow what the walk finds, but never refuse what the user names.
> Only tool's own ignore config can refuse. (which remain hard for the husky staged-file case).

This also re-aligns the CLI with stdin and LSP, which deliberately do not consult `.gitignore` (#19206).
👉🏻 This is the main motivation.

### Why not full revert

A directory target names where to search, not what to process.
The files under it are still discovered by the walk, so discovery rules apply.
Reverting that would bring back [#25107](), whose old behavior was not even a statable spec: whether running inside an ignored tree processed anything depended on the ignore pattern's form (bare `generated` did, `generated/**` didn't), an artifact of walker pruning, not a design.

### Regarding to `--no-ignore`

This flag remains orthogonal as a walk-level opt-out (`--no-ignore=vcs dist`) and for filling gap between existing tools.

However, with explicit files working again, I'm inclined to close those PRs and revisit if demand shows up.

For [#25259]()'s use case: name the files, e.g. `oxlint dist/foo.js` (or shell-expanded glob).
2026-08-14 03:35:34 +00:00
camc314 0c68b7ff8b fix(estree): emit decorators on FormalParameterRest (#25582)
This PR adds support for emitting `decorators` when serializing an ast to ESTree (both with/without raw transfer).

Given the following code:
```
class C { method(@dec ...args) {} }
```

Before we emitted the following ESTree shape:
```json
"params": [
  {
    "type": "RestElement",
    "decorators": [],
    "argument": {
      "type": "Identifier",
      "decorators": [],
      "name": "args",
      "optional": false,
      "typeAnnotation": null,
    },
    "optional": false,
    "typeAnnotation": null,
    "value": null,
  }
],
```

Now we emit:
```json
"params": [
  {
    "type": "RestElement",
    "decorators": [
      {
        "type": "Decorator",
        "expression": { "type": "Identifier", "name": "dec" }
      }
    ],
    "argument": {
      "type": "Identifier",
      "decorators": [],
      "name": "args",
      "optional": false,
      "typeAnnotation": null,
    },
    "optional": false,
    "typeAnnotation": null,
    "value": null,
  },
],
```

fixes https://github.com/oxc-project/oxc/issues/18981
closes https://github.com/oxc-project/oxc/pull/24736
2026-08-13 10:43:14 +00:00
leaysgur 40f7f9ba68 chore(oxfmt): do not wrap debug fn with cfg(debug_assertions) (#25575)
Fixes https://github.com/oxc-project/oxc/actions/runs/31665337633/job/94338562978

TIL: `debug_assert_eq!` is compiled as a "constantly false if" even when assertions are off.
2026-08-13 05:32:23 +00:00
leaysgur 1a83a8ddb2 fix(oxfmt): mirror printer line suppression and restore dedent-to-root (#25573)
Fixes #25568, #25569
2026-08-13 03:50:19 +00:00
leaysgur fed6681eda docs(oxfmt): skip expanding overrides options (#25572)
Follow up on #25544.

Oxlint also omits `overrides[].rules`.
2026-08-13 02:35:53 +00:00
camc314 1d22912cb4 fix(linter/plugins): parse rule-less directive justifications (#25559)
## Summary

- extract directive justifications before parsing directive labels, matching ESLint
- return an empty rule value for rule-less directives while preserving their justification
- cover block, enable, line, and next-line directives with both eslint and oxlint prefixes

Closes #25556
2026-08-12 16:44:01 +00:00
leemr 9771ee151c test(linter): give the prune test its own suppression fixture directory (#25445)
`test_suppressing_errors_update_the_file_when_errors_are_decreased` and
`test_prunning_errors_update_the_file_when_errors_are_decreased` both
point at `fixtures/suppression/with_arg_and_decreased_errors`. Every
other `SuppressionTester` fixture has a single owner. Both of these run
oxlint in that directory, which rewrites `oxlint-suppressions.json`, and
both then delete it and restore it from the backup in `Drop`.

It showed up as an intermittent red in `just ready` while I was working
on something unrelated, and it cost enough re-runs that I went looking.
I flagged it at the end of #25412. This is that fix.

Measured with `cargo test -p oxlint suppress`, ten runs per setting, on
an 18 core machine:

```
--test-threads   failures
1                0/10
12               0/10
16               0/10
17               0/10
18               3/10
20               0/10
24               0/10
```

18 is `hw.ncpu` there, and it is what `cargo test` picks by default. 20
and 24 are more parallel and never failed, so this is not load and it is
not machine speed. The two tests have to land in the same dispatch wave,
which depends on the divisor. The `Test Linux` job runs `cargo test
--all-features` and stays green, which I read as a different core count
rather than anything about the runner.

Three distinct failure modes came out of the one shared directory:

```
tester.rs:249   one test's opening assert runs while the other sits
                between remove_file and fs::copy
tester.rs:295   both Drop calls delete the same path, and the second gets ENOENT
tester.rs:274   one test reads the file while the other is inside a truncating write
```

Before settling on the fixture split I checked whether repairing `Drop`
would be enough, since deleting before copying is what opens the widest
window. It is not enough. Guarding the delete with `&&
!self.have_backup_file`, so the file is never absent, left the rate
where it was and only changed the message:

```
Drop shape                   directory   failures
delete then copy, as today   shared      3/20
copy only                    shared      4/40
unchanged                    separate    0/40
```

To find out what the reader was actually getting in that third mode, I
patched the panic at `tester.rs:274` to print the observed content. That
patch was throwaway and is not in this diff:

```
PROBE observed len=0 serde=EOF while parsing a value at line 1 column 0 first80=""
```

Length zero, not a torn file. `SuppressionFile::save` uses `fs::write`,
which is `File::create` plus `write_all`, and `File::create` opens with
`O_TRUNC`. The truncate commits at open time and the bytes arrive on the
next syscall, so the file is briefly empty. A separate directory is the
only change that closes both that window and the `Drop` one.

Calling out one thing up front: the new directory is a byte for byte
copy of the old one. `--suppress-all` and `--prune-suppressions`
converge in the decreased case, so the expected content is the same for
both tests. The directory exists for isolation, not for content.
`with_arg_and_increased_errors` and
`with_arg_and_increased_errors_prune` are the same split for the case
where the two commands diverge, so five of six files match there and six
of six match here.

This is the same shape as #20717, where `--init` writes leaked across
parallel tests.

With the change in, the suppression module is 0/20 at 18 threads and
0/10 at the default. The rest of `just ready` is green as well: `typos`,
`cargo lintgen`, `just fmt`, `just check`, `just test`, `just lint`,
`just doc` and `just ast`, with 4446 tests passing under
`--test-threads=1`.

Three other suppression fixtures have more than one owner, and I left
all three alone. `fixed_violations_are_reported` has two readers.
`type_check_only_with_regular_rule` also has two, and although the
second passes `--suppress-all` and `--prune-suppressions`, `lint.rs:426`
rejects that combination before any lint runs, so nothing writes.
`diagnostics_filtered_if_count_is_the_same` is the only other one where
a write really happens, so it carries the truncating write window in
principle, but that window is a single `fs::write` over a few hundred
bytes, where the one this PR fixes spanned a whole `Drop`
delete-then-copy plus the other test's entire run. Forty runs with those
two tests forced to overlap found nothing. I did not want to change
something I cannot show is broken. Happy to fold it in if the whole
class should close in one go.

Disclosure, per CONTRIBUTING.md: I used Claude for the investigation and
for the patch. I have reviewed and tested all of it myself.
2026-08-12 10:18:27 +01:00
leaysgur 8f758d3cf5 refactor(formatter_core): group src/ modules by domain (#25527)
Also removed dead code and comments.
2026-08-12 06:43:55 +00:00
Boshen 4df5835fc3 fix(linter): allow capitalized built-in calls (#25516)
Fixes #24405.

The React Compiler global registry omitted `BigInt` and `Symbol`, causing `CapitalizedCalls` false positives. Register both primitives and expose the upstream-compatible `environment.validateNoCapitalizedCalls` option.

Validated with `just ready`.

AI-assisted: Codex was used to investigate and implement this change.
2026-08-12 03:51:52 +00:00
leaysgur b297fb1cb8 refactor(formatter,formatter_tests): fix up (#25478)
Cleaning up after the series of migrations.

- Docs clean up
- More strict `jsdoc` option handling in fixture tests
2026-08-12 00:48:33 +00:00
leaysgur 0fa91283fd refactor(formatter,formatter_tests): move out prettier JS,TS,JSDoc conformance from tasks/ (#25477)
Migration from tasks/prettier_conformance to each crate test using oxc_formatter_tests, for JS/TS and JSDoc.
2026-08-12 00:48:32 +00:00
leaysgur 6ef3984410 refactor(ci): self-provision prettier suite in oxc_formatter_tests (#25467)
Remove the Prettier related stuff from the conformance, which is purely aimed at JS/TS.

Instead, `oxc_formatter_tests` manage Prettier's test fixtures along with Oxfmt.
2026-08-12 00:40:59 +00:00
Boshen 82c924496c refactor(diagnostics): clean up vendored renderer (#25501)
Clean up the diagnostics renderer vendored after removing `oxc-miette`: simplify source attachment and multiline labels, tighten visibility, and correct JSON escaping and debug formatting.

Validated with `just ready`.

AI-assisted; contributor review is required before merge.
2026-08-11 12:57:08 +00:00
Boshen 00e1b762e0 refactor(diagnostics): vendor oxc-miette (#25499)
We no longer need to maintain the `oxc-miette` repo as most of the code is now removed, the remaining code is minimal and can be vendored.
2026-08-11 08:04:02 +00:00
renovate[bot] 2d7a75d46b chore(deps): update oxc to ^0.144.0 (#25483)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@oxc-project/types](https://oxc.rs)
([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types))
| [`^0.143.0` →
`^0.144.0`](https://renovatebot.com/diffs/npm/@oxc-project%2ftypes/0.143.0/0.144.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@oxc-project%2ftypes/0.144.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@oxc-project%2ftypes/0.144.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@oxc-project%2ftypes/0.143.0/0.144.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@oxc-project%2ftypes/0.143.0/0.144.0?slim=true)
|
| [oxc-parser](https://oxc.rs/docs/guide/usage/parser)
([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/napi/parser))
| [`^0.143.0` →
`^0.144.0`](https://renovatebot.com/diffs/npm/oxc-parser/0.143.0/0.144.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/oxc-parser/0.144.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxc-parser/0.144.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxc-parser/0.143.0/0.144.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxc-parser/0.143.0/0.144.0?slim=true)
|

---

### Release Notes

<details>
<summary>oxc-project/oxc (@&#8203;oxc-project/types)</summary>

###
[`v0.144.0`](https://redirect.github.com/oxc-project/oxc/blob/HEAD/npm/oxc-types/CHANGELOG.md#01440---2026-08-10)

##### 💥 BREAKING CHANGES

-
[`44fd320`](https://redirect.github.com/oxc-project/oxc/commit/44fd320)
ast: \[**BREAKING**] Split TS external modules & Namespace Declarations
([#&#8203;25284](https://redirect.github.com/oxc-project/oxc/issues/25284))
(camc314)

</details>

<details>
<summary>oxc-project/oxc (oxc-parser)</summary>

###
[`v0.144.0`](https://redirect.github.com/oxc-project/oxc/blob/HEAD/napi/parser/CHANGELOG.md#01440---2026-08-10)

##### 💥 BREAKING CHANGES

-
[`a33788e`](https://redirect.github.com/oxc-project/oxc/commit/a33788e)
ast: \[**BREAKING**] Group class heritage into `ClassHeritage`
([#&#8203;25360](https://redirect.github.com/oxc-project/oxc/issues/25360))
(camc314)
-
[`5c5cdcd`](https://redirect.github.com/oxc-project/oxc/commit/5c5cdcd)
ast: \[**BREAKING**] Narrow `TSInterfaceHeritage::expression` to
TSTypeName
([#&#8203;24360](https://redirect.github.com/oxc-project/oxc/issues/24360))
(camc314)
-
[`6be314f`](https://redirect.github.com/oxc-project/oxc/commit/6be314f)
ast: \[**BREAKING**] Remove duplicated `VariableDeclarator::kind`
([#&#8203;25319](https://redirect.github.com/oxc-project/oxc/issues/25319))
(camc314)
-
[`44fd320`](https://redirect.github.com/oxc-project/oxc/commit/44fd320)
ast: \[**BREAKING**] Split TS external modules & Namespace Declarations
([#&#8203;25284](https://redirect.github.com/oxc-project/oxc/issues/25284))
(camc314)

##### 🐛 Bug Fixes

-
[`2a1058a`](https://redirect.github.com/oxc-project/oxc/commit/2a1058a)
napi: Omit parser header from WASI declarations
([#&#8203;25254](https://redirect.github.com/oxc-project/oxc/issues/25254))
(camc314)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMi4wIiwidXBkYXRlZEluVmVyIjoiNDQuMTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-10 13:52:38 +00:00
oxc-guard c42d6397ea release(apps): oxlint v1.78.0 && oxfmt v0.63.0 (#25473)
# Oxlint
### 💥 BREAKING CHANGES

- a33788e ast: [**BREAKING**] Group class heritage into `ClassHeritage` (#25360) (camc314)
- 5c5cdcd ast: [**BREAKING**] Narrow `TSInterfaceHeritage::expression` to TSTypeName (#24360) (camc314)
- 6be314f ast: [**BREAKING**] Remove duplicated `VariableDeclarator::kind` (#25319) (camc314)
- 44fd320 ast: [**BREAKING**] Split TS external modules & Namespace Declarations (#25284) (camc314)

### 🚀 Features

- ccb8fe8 linter/jsdoc: Implement `no-blank-blocks` rule (#25207) (Mikhail Baev)
- d4a897c linter/eslint: Implement `one-var` rule (#24470) (Cole Ellison)
- 5ab9340 linter/jsx-a11y/anchor-has-content: Add options to match eslint (#24571) (Cole Ellison)

### 🐛 Bug Fixes

- b746e00 linter/eslint/no-implicit-coercion: Preserve template coercion whitespace (#25470) (camc314)
- a92c541 linter: Preserve source text for JS plugin ignore fixes (#25280) (Norcleeh)
- 675c840 linter/eslint/prefer-promise-reject-errors: Handle parenthesized calls (#25378) (camc314)
- 1703739 linter/unicorn/new-for-builtins: Ignore optional chains (#25411) (tanakalucky)
- 95ece63 linter/unicorn/prefer-code-point: Downgrade the auto-fix to dangerous (#25412) (leemr)
- c451a0e linter/vitest: Validate `consistent-test-filename` regex patterns (#25408) (Mikhail Baev)
- 937825c react_compiler: Disable exhaustive memo validation by default (#25417) (Boshen)
- f0f7dae linter/eslint/no-unused-vars: Report invalid regex options (#25380) (Cameron)
- 44e73fd linter/unicorn/prefer-array-flat: Fix `concat.apply` suggestions (#25373) (Cameron)
- 6846a9a linter/react/rules-of-hooks: Detect constructor callbacks (#25377) (camc314)
- b247a9d linter/unicorn/new-for-builtins: Support `Float16Array` (#25382) (tanakalucky)
- 19109cd linter/unicorn/error-message: Support `SuppressedError` messages (#25375) (camc314)
- 9c13f5e linter: Assert token lookup invariants (#25368) (camc314)
- bc35f83 linter/eslint/no-unused-vars: Bound catch parameter lookup (#25367) (camc314)
- c159fb9 linter/unicorn/switch-case-braces: Bound token lookup (#25363) (camc314)
- 03b2eb2 linter/unicorn/no-static-only-class: Bound token lookup (#25361) (camc314)
- 0afc59e linter/unicorn/empty-brace-spaces: Bound token lookup (#25353) (camc314)
- 2963d98 linter/eslint/no-unreachable-loop: Do not report loops whose body has a finally block (#25335) (Todor Andonov)
- 589e5fb linter/eslint/no-param-reassign: Validate `ignorePropertyModificationsForRegex` property (#25346) (Mikhail Baev)
- aae5d8b linter/eslint/no-throw-literal: False positive on variable declared without initializer (#25275) (cjnoname)
- 6b1c479 oxlint: Normalize customized rule names (#25316) (camc314)
- d494eb5 linter/unicorn/consistent-existence-index-check: Bound token lookup (#25325) (camc314)
- 4266037 linter/typescript/prefer-namespace-keyword: Bound token lookup (#25322) (camc314)
- 4745b4e linter/typescript/no-namespace: Bound token lookup (#25321) (camc314)
- 648a481 linter/eslint/one-var: Avoid joining exported declarations (#25314) (camc314)
- 9573937 linter/typescript: Validate `ban-ts-comment` description_format (#25320) (Mikhail Baev)
- ebf7d18 linter/typescript/consistent-type-definitions: Bound token lookup (#25281) (camc314)
- 1501ccf linter/typescript/consistent-generic-constructors: Bound token lookup (#25258) (camc314)

### ⚡ Performance

- 8f784f3 linter: Reduce rule config dispatch size (#25461) (Boshen)
- 2de4ec2 linter: Reduce visitor code size (#25441) (Boshen)
- 6fb7f47 linter/unicorn/prefer-export-from: Narrow `ExportFromDeclaration` lookup (#25381) (camc314)
- e3f6263 linter/unicorn/prefer-default-parameters: Avoid reference allocation  (#25379) (camc314)
- d863473 linter/vue/max-props: Narrow AST dispatch (#25372) (camc314)
- 273d867 linter: Avoid diagnostic sorting after applying fixes (#25079) (Sysix)
- 4ec9189 oxlint/lsp: Avoid second lock for getting/removing unused directives (#25350) (Sysix)
- 6c0d01b oxlint/lsp: Preallocate fix-content vec (#25351) (Sysix)
- 3a94055 linter: Avoid per-call heap allocations in jest and unicorn helpers (#25210) (Connor Shea)
- 4abff11 linter: Avoid redundant message work in the agent reporter (#25315) (Connor Shea)
- 6bb5421 linter: Hoist `current_dir` out of the stylish reporter loop (#25313) (Connor Shea)
- 9a7c323 linter: Compute diagnostic `Info` once per diagnostic in junit reporter (#25312) (Connor Shea)
- 1cf7dde oxlint: Render JSON report into a single buffer (#25295) (connorshea)
- 8492cfd linter/typescript/ban-ts-comment: Bail early with substring guard (#25301) (Jacob Asper)
- 7607f04 linter/typescript/ban-tslint-comment: Replace regex with manual parser (#25299) (Jacob Asper)
# Oxfmt
### 💥 BREAKING CHANGES

- a33788e ast: [**BREAKING**] Group class heritage into `ClassHeritage` (#25360) (camc314)
- 5c5cdcd ast: [**BREAKING**] Narrow `TSInterfaceHeritage::expression` to TSTypeName (#24360) (camc314)
- 6be314f ast: [**BREAKING**] Remove duplicated `VariableDeclarator::kind` (#25319) (camc314)
- 44fd320 ast: [**BREAKING**] Split TS external modules & Namespace Declarations (#25284) (camc314)

### 🚀 Features

- fd02a89 oxfmt: Dispatch yaml-in-css(frontmatter) to `oxc_formatter_yaml` (#25336) (leaysgur)
- ab12665 formatter_core: Add `hardlineWithoutBreakParent` equivalent IR (#25273) (leaysgur)

### 🐛 Bug Fixes

- 95dc917 oxfmt: Drop IR Space at line start for js-in-xxx (#25460) (leaysgur)
- b63eccc formatter: Keep comments after TS this_param (#25459) (leaysgur)
- ab52a59 formatter: Format xxx-in-js inside JSDoc js fence (#25414) (leaysgur)
- 1a2c64a formatter,oxfmt: Apply effective print width for JSDoc fence (#25413) (leaysgur)
- 2eaede9 formatter_core: Unify leading-BOM handlings (#25340) (leaysgur)
- ef1d04b formatter: Break mapped type brackets (#25297) (leaysgur)
- 4e6f3f1 formatter: Break index signature brackets (#25296) (leaysgur)
- e23dccf formatter_css: Bump oxc-css-parser to accept unknown at-rule with interpolated (#25277) (leaysgur)
- c29b587 formatter_core: Measure decided-flat fill separator as flat during group re-measure (#25276) (leaysgur)
- f3c6953 formatter_yaml: Don't rewrite overflowing key to implicit (#25274) (leaysgur)

### ⚡ Performance

- c9d1a5b oxfmt: Spawn tinypool lazily (#25298) (leaysgur)

### 📚 Documentation

- 6eae5c9 formatter,oxfmt: Record embed-layer decisions in place (#25422) (leaysgur)
- 51224a7 formatter_yaml: Pin EOF blank lines divergence (#25269) (leaysgur)
2026-08-10 10:03:34 +00:00
renovate[bot] b91dc3a1f1 chore(deps): update napi (#25457)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) | Type |
Update |
|---|---|---|---|---|---|---|---|
| [@napi-rs/cli](https://napi.rs/)
([source](https://redirect.github.com/napi-rs/napi-rs)) | [`3.8.3` →
`3.8.5`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.8.3/3.8.5) |
![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.8.5?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.8.5?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.8.3/3.8.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.8.3/3.8.5?slim=true)
| pnpm.catalog.default | patch |
| [napi](https://redirect.github.com/napi-rs/napi-rs) | `3.12.0` →
`3.12.1` |
![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.12.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.12.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.12.0/3.12.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.12.0/3.12.1?slim=true)
| workspace.dependencies | patch |
| [napi-build](https://redirect.github.com/napi-rs/napi-rs) | `2.4.0` →
`2.4.1` |
![age](https://developer.mend.io/api/mc/badges/age/crate/napi-build/2.4.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-build/2.4.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-build/2.4.0/2.4.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-build/2.4.0/2.4.1?slim=true)
| workspace.dependencies | patch |
| [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | `3.6.2` →
`3.6.3` |
![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.6.3?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.6.3?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.6.2/3.6.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.6.2/3.6.3?slim=true)
| workspace.dependencies | patch |

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

###
[`v3.8.5`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.4...a5b5f277ab56e7e7e903b392b15c79da7a6520ce)

[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.4...@napi-rs/cli@3.8.5)

###
[`v3.8.4`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.3...@napi-rs/cli@3.8.4)

[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.3...@napi-rs/cli@3.8.4)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMi4wIiwidXBkYXRlZEluVmVyIjoiNDQuMTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cclark@cloudflare.com>
2026-08-10 08:39:38 +00:00
Boshen 030857b509 refactor(diagnostics): update oxc-miette to v4 (#25395)
Remove the miette `Report` wrapper and update oxc-miette to v4's narrowed diagnostic and source protocol.

AI-assisted by OpenAI Codex.
2026-08-10 07:48:02 +00:00
leaysgur 033ddf6d38 refactor(oxfmt,formatter): simplify js-in-html-in-js handling (#25464)
Prettier uses the `conditionalGroup` IR for JS and YAML.

When this appeared in JS(containing `conditionalGroup`)-in-HTML(`script` tags)-in-JS (`oxc_formatter`), we previously bypassed the `Doc` to IR conversion.

This PR adds support for this conversion and removes the string format fallback path.
2026-08-10 06:02:17 +00:00
leaysgur 95dc917441 fix(oxfmt): drop IR Space at line start for js-in-xxx (#25460)
Closes #25042
2026-08-10 04:24:03 +00:00
leaysgur b37b9f05b6 refactor(formatter_core): rename DispatchXxx (#25436)
Pure renaming.

- `DispatchOutcome` -> `DispatchResponse` (counter part of `DispatchRequest`)
- `DispatchResult` -> `DispatchPayload` (lives in `DispatchResponse`)
2026-08-09 15:07:42 +00:00
leaysgur 00f490d7f7 refactor(oxfmt,formatter): split sortImports validation and use type enum (#25432)
Reduce runtime validation.

Also, by using type `enum`, IDE and TS types are also covered.
2026-08-09 15:07:41 +00:00
leaysgur 13c5374ac1 refactor(oxfmt): rename "external_formatter" to "prettier" (#25430)
Use explicit wording.
2026-08-09 15:07:40 +00:00
leaysgur a26f856402 refactor(oxfmt): rename external_formatter to external_services (#25429)
`ExternalFormatter` is merely a transport that calls the JS side via napi; it is not referred to as a formatter.
2026-08-09 15:07:40 +00:00
leaysgur 36d5e13fc2 refactor(formatter_core,formatter,oxfmt): rename embedded meta to child_context (#25428)
`parent_context` <-> `child_context` is more intuitive.
2026-08-09 14:59:36 +00:00
leaysgur 6eae5c9803 docs(formatter,oxfmt): record embed-layer decisions in place (#25422)
Just notes.
2026-08-09 14:49:15 +00:00
leaysgur ab52a593f3 fix(formatter): format xxx-in-js inside JSDoc js fence (#25414)
Such as CSS-in-JS-in-JSDoc_Markdown-in-JS. 😇
2026-08-09 14:49:15 +00:00
leaysgur 1a2c64a356 fix(formatter,oxfmt): apply effective print width for JSDoc fence (#25413)
As JSDoc is always contained within the ` * ` fenced comments, the `printWidth` option should not have been used as is.

The dedicated `jsdocPrintWidth` option has not yet been implemented. #24633
2026-08-09 14:49:14 +00:00
leaysgur ce29325cfe refactor(oxfmt): consolidate embedded routing and service profiles (#25396)
Consolidated the criteria for determining which languages are handled by?

- natively by Rust
- passed to Prettier

when formatting embedded code, as these were previously scattered across various places.
2026-08-09 14:32:11 +00:00
leaysgur 8213e72f37 refactor(formatter,oxfmt): flatten embedded dispatch contract (#25391)
Due to historical reasons, the IR was passed as `[Doc, (Doc, ...Doc)]` only when processing `gql-in-js`, whilst for other cases such as `css-in-js` and `html-in-js`, it was always `[Doc]`.

Now, every result is single `Doc`.
2026-08-09 14:32:11 +00:00
leaysgur 465b723d04 refactor(formatter,oxfmt): unify host services as SessionServices on FormatSession (#25388)
- dispatcher
- string_embedder
- tailwind_sorter

Group these 3 together as `SessionServices`, make them available to `FormatSession`, and pass them around.
2026-08-09 14:32:10 +00:00
leaysgur aa1334f1c8 refactor(oxfmt): use dispatcher for non-napi xxx-in-js (#25387)
Although everything was ready in #25331, it was still behind the `napi` gate, so removed it.
2026-08-09 14:32:10 +00:00
leaysgur 2eaede9b0b fix(formatter_core): unify leading-BOM handlings (#25340)
Follow up on #25333.
2026-08-09 14:32:09 +00:00
leaysgur fd02a8956e feat(oxfmt): dispatch yaml-in-css(frontmatter) to oxc_formatter_yaml (#25336)
Using the `Dispatcher` set up so far, detect the YAML front matter and process it using `oxc_formatter_yaml`.
2026-08-09 14:15:05 +00:00
leaysgur 567089f3c5 refactor(oxfmt): route JSDoc fence through the dispatcher (#25334)
Markdown code fences can also be written in JSDoc, and other languages can be formatted as inline code within them.
2026-08-09 13:54:12 +00:00