renovate
a90dc5988c
chore(deps): update oxc to ^0.135.0 ( #23121 )
...
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.134.0` → `^0.135.0`](https://renovatebot.com/diffs/npm/@oxc-project%2ftypes/0.134.0/0.135.0 ) |  |  |  |  |
| [oxc-parser](https://oxc.rs/docs/guide/usage/parser ) ([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/napi/parser )) | [`^0.134.0` → `^0.135.0`](https://renovatebot.com/diffs/npm/oxc-parser/0.134.0/0.135.0 ) |  |  |  |  |
---
### Release Notes
<details>
<summary>oxc-project/oxc (oxc-parser)</summary>
### [`v0.135.0`](https://redirect.github.com/oxc-project/oxc/compare/6c30f81eca30854824aada41ebb302441ddf9773...e9b8fd595cf6c997e2bb14fc4cbb9ccf91739f87 )
</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:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2026-06-08 16:20:42 +00:00
Boshen
da1a6c6e2a
perf(diagnostics): migrate to allocation-optimized oxc-miette ( #23094 )
...
## Summary
Adopts the allocation-optimized oxc-miette diagnostic APIs (oxc-miette v3):
- `OxcDiagnostic` stores labels in `miette::Labels` (1–2 inline, no `Vec`); **drops the `smallvec` dependency**.
- `Diagnostic::labels`/`related` return owned inline containers; `code`/`help`/`note`/`url` return `Cow<str>`; `SourceCode::read_span` returns the concrete `MietteSpanContents` — all consumer call sites updated (linter `fixer`/`lib`/`runtime`/`tsgolint`, `oxc_napi`, napi/parser, oxlint LSP, coverage).
- `usize → u32` span conversions for the u32 `SourceSpan`.
## Allocation impact (parser benchmark)
`just allocs` — **~33% fewer sys allocations, no change in reallocations**:
| File | Sys allocs (before → after) | Sys reallocs |
|------|---|---|
| checker.ts | 5303 → 3543 | 10 (unchanged) |
| antd.js | 5392 → 3720 | 221 (unchanged) |
| App.tsx | 632 → 444 | 13 (unchanged) |
| pdf.mjs | 518 → 356 | 67 (unchanged) |
| binder.ts | 281 → 169 | 0 (unchanged) |
(The inline `Labels` removes the per-diagnostic `Vec`; an earlier `Box<str>` realloc regression was fixed in oxc-miette before this snapshot was taken.)
2026-06-08 16:00:57 +00:00
oxc-guard[bot]
44ae845fe1
release(apps): oxlint v1.69.0 && oxfmt v0.54.0 ( #23116 )
...
# Oxlint
### 🚀 Features
- e805174 linter: Add schema for `jest/vitest/max-expects` (#23105 )
(Sysix)
- 7850577 linter: Add schema for `jest/vitest/expect-expect` (#23104 )
(Sysix)
- 75f641a linter: Add schema for `jest/vitest/consistent-test-it`
(#23103 ) (Sysix)
- 5125f89 linter/unicorn: Support no-null `checkArguments` option
(#23098 ) (camc314)
- b8b9797 linter: Add schema for `import-max-dependencies` (#23096 )
(Sysix)
- 65cb47a linter/eslint: Support no-unused-expressions
`ignoreDirectives` option (#23097 ) (camc314)
- f6c36d5 linter: Add schema for `import/prefer-default-export` (#23091 )
(Sysix)
- 0d4a5d1 linter: Add schema for `eslint/sort-vars` (#23090 ) (Sysix)
- fdb5bf5 linter: Add schema for `eslint/radix` (#23082 ) (Sysix)
- 05b4dcf linter: Add schema for `eslint/prefer-const` (#23081 ) (Sysix)
- 5a06c4d linter/vue: Implement next-tick-style rule (#23041 ) (Alex
Peshkov)
- e38a36a linter: Add schema for `eslint/operator-assignment` (#23080 )
(Sysix)
- 907cee7 linter: Add schema for `eslint/no-warning-comments` (#23075 )
(Sysix)
- 9470bb2 linter: Add schema for `eslint/no-unused-vars` (#23073 )
(Sysix)
- 234b5cf linter: Add schema for `eslint/no-shadow` (#23072 ) (Sysix)
- de0dd8b linter: Add schema for `eslint/no-restricted-exports` (#23020 )
(Sysix)
- faa3e0d linter: Add schema for `eslint/no-param-reassign` (#23018 )
(Sysix)
- dbc9c27 linter: Add schema for `eslint/no-magic-numbers` (#23017 )
(Sysix)
- 38d3569 linter: Add schema for `eslint/no-inner-declarations` (#23016 )
(Sysix)
- 008fa41 linter: Add schema for `eslint/no-constant-condition` (#22991 )
(Sysix)
- ca44623 linter: Add schema for `eslint/no-empty-function` (#22988 )
(Sysix)
- 43eb04d linter: Add schema for `eslint/id-match` (#22987 ) (Sysix)
- a800f27 linter: Add schema for `eslint/capitalized-comments` (#22984 )
(Sysix)
- 96e2d32 linter: Add schema for `eslint/id-length` (#22963 ) (Sysix)
- 545493f linter: Add schema for `eslint/complexity` (#22960 ) (Sysix)
- 5f0b558 linter: Add schema for `eslint/class-methods-use-this`
(#22959 ) (Sysix)
- 719b720 linter: Add schema for simple rule configurations (#22948 )
(Sysix)
- fd00966 linter: Add right schema for `eslint/max-*` rules (#22923 )
(Sysix)
- 1226d78 linter: Fill schema with rule configurations (#22907 ) (Sysix)
- 8f423c1 linter/vue: Implement `require-direct-export` rule (#17623 )
(yefan)
- 78e915b linter/vue: Implement no-reserved-props rule (#22914 ) (bab)
- 0f200a9 linter/vue: Implement require-prop-types rule (#22083 ) (Alex
Peshkov)
- 5da9da9 linter/vue: Implement no-reserved-keys rule (#21780 ) (bab)
- 75e14a8 linter/vue: Implement prop-name-casing rule (#22892 ) (bab)
- 85efabf semantic: Make building the class table optional, off by
default (#22862 ) (Boshen)
### 🐛 Bug Fixes
- a49b0cf linter/no-map-spread: Remove ineffective autofix (#22956 )
(camc314)
- cf53285 parser: Report reserved type-declaration names in the parser
(#23035 ) (Boshen)
- 0383e61 linter: Fix schema for rules without a config (#22946 ) (Sysix)
- 4d722e0 parser: Report duplicate switch `default` clause in the parser
(#23012 ) (Boshen)
- 6cb34b8 linter/plugins: Make spreading `Token` instances keep `loc`
property (#22947 ) (Nicolas Le Cam)
- 27de044 linter/plugins: Make spreading `Comment` instances keep `loc`
property (#22238 ) (Nicolas Le Cam)
- 742fd0b linter/double-comparisons: Make fixer a suggestion (#22968 )
(camc314)
- 93f4494 linter: Respect default child config plugin when extending
parent config (#22903 ) (Sysix)
- 594ed86 linter: Deny unknown options for some rules (#22924 ) (Sysix)
- 3253038 linter/expect-expect: Align default rule options (#22890 )
(camc314)
- bbe44ea linter: Respect default plugins from extended config (#22896 )
(Sysix)
### ⚡ Performance
- 0b7ce7e linter/plugins: Create global prop vars at top level of
modules (#22928 ) (overlookmotel)
- 0f7c319 linter/plugins: Define class `#loc` setter functions as
`const`s (#22919 ) (overlookmotel)
### 📚 Documentation
- 7b0380d linter: Remove preserve-caught-error note (#22994 ) (camc314)
- dadafe3 oxlint, oxfmt: Mention migrate skills in npm READMEs (#22965 )
(Boshen)
# Oxfmt
### 🚀 Features
- 3da77e0 oxfmt: Format `parser:json5` files by `oxc_formatter_json`
(#22990 ) (leaysgur)
- c786f0d oxfmt: Format `parser:jsonc` files by `oxc_formatter_json`
(#22913 ) (leaysgur)
- 27a6db8 formatter_json: Implement jsonc variant (#22912 ) (leaysgur)
### 🐛 Bug Fixes
- 2aedd52 oxfmt: Avoid JS promise rejects for all TSFN call sites
(#23107 ) (leaysgur)
- 01e0871 formatter,formatter_json: Handle PS/LS as line terminator
(#22978 ) (leaysgur)
- 23902d9 formatter_json: Handle CR only line breaks (#22977 ) (leaysgur)
- 136b72b formatter_json: Use line_suffix for line comment outside array
(#22931 ) (leaysgur)
- 44e40fa formatter_json: Expand line comment inside array (#22911 )
(leaysgur)
- 2c86896 formatter_json: Avoid example binary name collision (#22904 )
(camc314)
### 📚 Documentation
- cc69d8d formatter_json: Update AGENTS.md (#22981 ) (leaysgur)
- 0490721 formatter_json: Update AGENTS.md (#22976 ) (leaysgur)
- dadafe3 oxlint, oxfmt: Mention migrate skills in npm READMEs (#22965 )
(Boshen)
- f88961a oxfmt: Annotate each config option with supported languages
(#22953 ) (leaysgur)
- 7e514bf formatter_json: Update AGENTS.md (#22930 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-06-08 21:58:18 +08:00
leaysgur
3da77e0080
feat(oxfmt): format parser:json5 files by oxc_formatter_json ( #22990 )
...
Now, `.json5` is also formatted by `oxc_formatter_json`.
2026-06-08 08:12:35 +00:00
leaysgur
5d1117a707
chore(oxfmt): update svelte@5.56 to support declaration tags ( #23108 )
...
Follow up on #23087 + #22993 , thanks @firatciftci !
NOTE: This is internal updates. If users want it, need to update `svelte` deps by yourself.
2026-06-08 03:47:16 +00:00
leaysgur
2aedd52ce6
fix(oxfmt): avoid JS promise rejects for all TSFN call sites ( #23107 )
...
Fixes #20525 , (thanks @oxura !)
```sh
# Many files that route to the Prettier `formatFile` callback and fail to parse
mkdir -p /tmp/repro
for i in $(seq 1 500); do printf '<template><div></template>' > /tmp/repro/broken$i.vue; done
# Run repeatedly with default concurrency
for run in $(seq 1 10); do node apps/oxfmt/dist/cli.js --write /tmp/repro; done
```
Within a few runs it crashes non-deterministically (exit codes varied: 133 / 138 / 139, and sometimes 2 = clean error report), with the same fatal as #20525 :
```
# Fatal error in , line 0
# Check failed: object_ != kGlobalHandleZapValue. (or: node->IsInUse())
...
napi_reference_unref
<napi::error::Error as ...Drop>::drop
core::ptr::drop_in_place<napi::error::Error>
oxfmt::core::external_formatter::wrap_format_file::{{closure}}
```
Each broken file makes the `formatFile` callback reject; the resulting `napi::Error` is dropped on the TSFN await path and reaches `napi_reference_unref` during teardown → V8 fatal check.
After this fix (callback resolves errors as data), the same workload runs clean.
2026-06-08 02:54:09 +00:00
Sysix
e8051744a1
feat(linter): add schema for jest/vitest/max-expects ( #23105 )
2026-06-07 21:55:12 +00:00
Sysix
7850577806
feat(linter): add schema for jest/vitest/expect-expect ( #23104 )
2026-06-07 21:29:10 +00:00
Sysix
75f641aa73
feat(linter): add schema for jest/vitest/consistent-test-it ( #23103 )
2026-06-07 21:29:09 +00:00
Sysix
d65b860b35
refactor(linter): reuse non-object references for rules schemas ( #23100 )
...
This reduces the generated JSON schema, but increases the TS config generation.
I think this is a good trade 🤞
2026-06-07 20:30:24 +00:00
Sysix
6bcd52ccde
refactor(linter): share "alway" | "never" option across rules ( #23099 )
...
Skipped two rules because their defaults are "never".
- `react/jsx-boolean-value`
- `eslint/unicode-bom`
Tried to avoid the `Clone` derive 🤞 and simplified `operator-assignment`.
Sadly some docs are getting removed. Feel free to close the issue if the docs are preferred over a shared option.
2026-06-07 20:20:51 +00:00
camc314
5125f8955a
feat(linter/unicorn): support no-null checkArguments option ( #23098 )
...
- Support `checkArguments` in `unicorn/no-null`, defaulting to upstream behavior of checking direct call and constructor arguments.
- Allow direct `null` call/constructor arguments when `checkArguments: false`, while still reporting nested `null` values.
- Port the missing upstream Unicorn cases and update generated config artifacts.
Fixes #23048
2026-06-07 18:13:58 +00:00
Sysix
b8b97973c4
feat(linter): add schema for import-max-dependencies ( #23096 )
2026-06-07 18:09:35 +00:00
camc314
65cb47a197
feat(linter/eslint): support no-unused-expressions ignoreDirectives option ( #23097 )
...
- Support the `ignoreDirectives` option in `eslint/no-unused-expressions` config parsing.
- Port missing upstream ESLint and TypeScript ESLint cases for directive handling and TypeScript assertion coverage.
Fixes #23051
2026-06-07 17:56:44 +00:00
Sysix
f6c36d54d9
feat(linter): add schema for import/prefer-default-export ( #23091 )
2026-06-07 17:53:07 +00:00
Sysix
0d4a5d113e
feat(linter): add schema for eslint/sort-vars ( #23090 )
2026-06-07 17:42:12 +00:00
Sysix
fdb5bf5142
feat(linter): add schema for eslint/radix ( #23082 )
2026-06-07 17:32:18 +00:00
Sysix
05b4dcf871
feat(linter): add schema for eslint/prefer-const ( #23081 )
2026-06-07 17:22:32 +00:00
Alex Peshkov
5a06c4dfbb
feat(linter/vue): implement next-tick-style rule ( #23041 )
...
related https://github.com/oxc-project/oxc/issues/11440
eslint-plugin-vue reference:
https://eslint.vuejs.org/rules/next-tick-style.html
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-07 18:22:12 +01:00
Sysix
e38a36adb6
feat(linter): add schema for eslint/operator-assignment ( #23080 )
2026-06-07 17:17:13 +00:00
Sysix
907cee7dc8
feat(linter): add schema for eslint/no-warning-comments ( #23075 )
2026-06-07 17:04:48 +00:00
Sysix
9470bb2ad1
feat(linter): add schema for eslint/no-unused-vars ( #23073 )
...
Added the two files into the typo ignore list, because it would flag the docs for a regex pattern:
```
/* no-unused-vars: ["error", { "reportUsedIgnorePattern": true, "varsIgnorePattern": "[iI]gnored" }]*/
```
See https://github.com/oxc-project/oxc/actions/runs/27093419108/job/79961070879
2026-06-07 16:53:32 +00:00
renovate[bot]
cdc0ac4aef
chore(deps): update npm packages ( #23087 )
...
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/ ) |
|---|---|---|---|---|---|
|
[@arethetypeswrong/core](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io )
([source](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/tree/HEAD/packages/core ))
| [`0.18.2` →
`0.18.3`](https://renovatebot.com/diffs/npm/@arethetypeswrong%2fcore/0.18.2/0.18.3 )
|

|

|

|

|
| [@codspeed/vitest-plugin](https://codspeed.io )
([source](https://redirect.github.com/CodSpeedHQ/codspeed-node )) |
[`5.4.0` →
`5.5.0`](https://renovatebot.com/diffs/npm/@codspeed%2fvitest-plugin/5.4.0/5.5.0 )
|

|

|

|

|
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser )
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser ))
| [`8.60.0` →
`8.60.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.60.0/8.60.1 )
|

|

|

|

|
|
[@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.60.0` →
`8.60.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.60.0/8.60.1 )
|

|

|

|

|
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io )
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys ))
| [`8.60.0` →
`8.60.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.60.0/8.60.1 )
|

|

|

|

|
| [@vitest/browser](https://vitest.dev/guide/browser/ )
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser ))
| [`4.1.7` →
`4.1.8`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.7/4.1.8 )
|

|

|

|

|
|
[@vitest/browser-playwright](https://vitest.dev/config/browser/playwright )
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright ))
| [`4.1.7` →
`4.1.8`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.7/4.1.8 )
|

|

|

|

|
| [degit](https://redirect.github.com/Rich-Harris/degit ) | [`3.3.2` →
`3.4.1`](https://renovatebot.com/diffs/npm/degit/3.3.2/3.4.1 ) |

|

|

|

|
| [eslint](https://eslint.org )
([source](https://redirect.github.com/eslint/eslint )) | [`10.4.0` →
`10.4.1`](https://renovatebot.com/diffs/npm/eslint/10.4.0/10.4.1 ) |

|

|

|

|
|
[prettier-plugin-svelte](https://redirect.github.com/sveltejs/prettier-plugin-svelte )
| [`4.0.1` →
`4.1.0`](https://renovatebot.com/diffs/npm/prettier-plugin-svelte/4.0.1/4.1.0 )
|

|

|

|

|
| [svelte](https://svelte.dev )
([source](https://redirect.github.com/sveltejs/svelte/tree/HEAD/packages/svelte ))
| [`5.55.10` →
`5.56.1`](https://renovatebot.com/diffs/npm/svelte/5.55.10/5.56.1 ) |

|

|

|

|
| [tsx](https://tsx.hirok.io )
([source](https://redirect.github.com/privatenumber/tsx )) | [`4.22.3` →
`4.22.4`](https://renovatebot.com/diffs/npm/tsx/4.22.3/4.22.4 ) |

|

|

|

|
| [type-fest](https://redirect.github.com/sindresorhus/type-fest ) |
[`5.6.0` →
`5.7.0`](https://renovatebot.com/diffs/npm/type-fest/5.6.0/5.7.0 ) |

|

|

|

|
| [vitest](https://vitest.dev )
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ))
| [`4.1.7` →
`4.1.8`](https://renovatebot.com/diffs/npm/vitest/4.1.7/4.1.8 ) |

|

|

|

|
|
[vscode-languageserver-protocol](https://redirect.github.com/Microsoft/vscode-languageserver-node )
([source](https://redirect.github.com/Microsoft/vscode-languageserver-node/tree/HEAD/protocol ))
| [`3.17.5` →
`3.18.0`](https://renovatebot.com/diffs/npm/vscode-languageserver-protocol/3.17.5/3.18.0 )
|

|

|

|

|
---
### Release Notes
<details>
<summary>arethetypeswrong/arethetypeswrong.github.io
(@​arethetypeswrong/core)</summary>
###
[`v0.18.3`](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/blob/HEAD/packages/core/CHANGELOG.md#0183 )
##### Patch Changes
-
[`14e61d5`](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/commit/14e61d5 ):
Update [@​types/node](https://redirect.github.com/types/node ), use
[@​typescript/native-preview](https://redirect.github.com/typescript/native-preview )
for local build/check
-
[`25031aa`](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/commit/25031aa ):
- Fix "Cannot read properties of undefined (reading 'filename')" caused
by fflate 0.8.3
([#​258](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/issues/258 ))
- Bump fflate to ^0.8.3
</details>
<details>
<summary>CodSpeedHQ/codspeed-node
(@​codspeed/vitest-plugin)</summary>
###
[`v5.5.0`](https://redirect.github.com/CodSpeedHQ/codspeed-node/releases/tag/v5.5.0 )
[Compare
Source](https://redirect.github.com/CodSpeedHQ/codspeed-node/compare/v5.4.0...v5.5.0 )
### Highlights
We are introducing `@codspeed/playwright`, for walltime benchmarking and
profiling of end to end browser applications through playwright.
Here's an example usage, but head to the
[docs](https://codspeed.io/docs/benchmarks/nodejs/playwright ) for more
information
```typescript
import { bench, type Page } from "@​codspeed/playwright-plugin";
import electronExecutable from "electron";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const appRoot = path.resolve(__dirname, "..");
async function waitUntilSettled(page: Page): Promise<void> {
await page.waitForFunction(() => {
const main = document.getElementById("main");
return !!main && !main.classList.contains("loading");
});
}
await bench(
"inbox-search-archive-threads",
async ({ page }) => {
await page.fill("#search", "update");
await waitUntilSettled(page);
await page.click("#select-visible-btn");
await page.click("#archive-btn");
await waitUntilSettled(page);
await page.click('#sidebar nav button[data-view="threads"]');
await waitUntilSettled(page);
},
{
target: {
kind: "electron",
appPath: path.join(appRoot, "out/main/index.js"),
cwd: appRoot,
},
beforeRound: async ({ page }) => {
page.setDefaultTimeout(180_000);
await page.waitForSelector("#main");
await waitUntilSettled(page);
},
},
);
```
Note: this plugin is only compatible with the walltime instrument.
#### What's Changed
- Add playwright profiling package by
[@​GuillaumeLagrange](https://redirect.github.com/GuillaumeLagrange )
in
[#​80](https://redirect.github.com/CodSpeedHQ/codspeed-node/pull/80 )
**Full Changelog**:
<https://github.com/CodSpeedHQ/codspeed-node/compare/v5.4.0...v5.5.0 >
</details>
<details>
<summary>typescript-eslint/typescript-eslint
(@​typescript-eslint/parser)</summary>
###
[`v8.60.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8601-2026-06-01 )
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.60.0...v8.60.1 )
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.60.1 )
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
(@​typescript-eslint/scope-manager)</summary>
###
[`v8.60.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8601-2026-06-01 )
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.60.0...v8.60.1 )
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.60.1 )
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
(@​typescript-eslint/visitor-keys)</summary>
###
[`v8.60.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8601-2026-06-01 )
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.60.0...v8.60.1 )
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.60.1 )
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>vitest-dev/vitest (@​vitest/browser)</summary>
###
[`v4.1.8`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.8 )
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8 )
##### 🐞 Bug Fixes
- **browser**:
- Disable client `cdp` API when `allowWrite/allowExec: false` \[backport
to v4] - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa )
and **Codex** in
[#​10450](https://redirect.github.com/vitest-dev/vitest/issues/10450 )
[<samp>(e4067)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e4067b3b1 )
- Remove orphaned Playwright route when same module is mocked via
multiple ids \[backport to v4] - by
[@​toxik](https://redirect.github.com/toxik ) and
[@​Zelys-DFKH](https://redirect.github.com/Zelys-DFKH ) in
[#​10474](https://redirect.github.com/vitest-dev/vitest/issues/10474 )
[<samp>(675b4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/675b4343f )
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8 )
</details>
<details>
<summary>Rich-Harris/degit (degit)</summary>
###
[`v3.4.1`](https://redirect.github.com/Rich-Harris/degit/compare/v3.4.0...v3.4.1 )
[Compare
Source](https://redirect.github.com/Rich-Harris/degit/compare/v3.4.0...v3.4.1 )
###
[`v3.4.0`](https://redirect.github.com/Rich-Harris/degit/compare/v3.3.2...v3.4.0 )
[Compare
Source](https://redirect.github.com/Rich-Harris/degit/compare/v3.3.2...v3.4.0 )
</details>
<details>
<summary>eslint/eslint (eslint)</summary>
###
[`v10.4.1`](https://redirect.github.com/eslint/eslint/releases/tag/v10.4.1 )
[Compare
Source](https://redirect.github.com/eslint/eslint/compare/v10.4.0...v10.4.1 )
#### Bug Fixes
-
[`e557467`](https://redirect.github.com/eslint/eslint/commit/e557467db7496220eebcbe2ac5ea6d38c12bb1ec )
fix: update `@eslint/plugin-kit` version to 0.7.2
([#​20930](https://redirect.github.com/eslint/eslint/issues/20930 ))
(Francesco Trotta)
-
[`d4ce898`](https://redirect.github.com/eslint/eslint/commit/d4ce898796ca22c3b96aa70d3014cb85f4bac1cd )
fix: propagate failures from delegated commands
([#​20917](https://redirect.github.com/eslint/eslint/issues/20917 ))
(Minh Vu)
-
[`f4f3507`](https://redirect.github.com/eslint/eslint/commit/f4f3507460bc016b5be979c05d2969793f570cbf )
fix: prefer-arrow-callback invalid autofix with newline after `async`
([#​20916](https://redirect.github.com/eslint/eslint/issues/20916 ))
(kuldeep kumar)
-
[`c5bc78b`](https://redirect.github.com/eslint/eslint/commit/c5bc78b37e08b9054a11f0cc2d81808bb24acb85 )
fix: false positive for reference in `finally` block
([#​20655](https://redirect.github.com/eslint/eslint/issues/20655 ))
(Tanuj Kanti)
-
[`27538c0`](https://redirect.github.com/eslint/eslint/commit/27538c01f5df4e9306f6f4ba867b2dd6307fae59 )
fix: add missing CodePath and CodePathSegment types
([#​20853](https://redirect.github.com/eslint/eslint/issues/20853 ))
(Pixel998)
#### Documentation
-
[`61b0add`](https://redirect.github.com/eslint/eslint/commit/61b0add61ffc52665562be7bb96f526690a78b30 )
docs: remove deprecated rule from related rules of `max-params`
([#​20921](https://redirect.github.com/eslint/eslint/issues/20921 ))
(Tanuj Kanti)
-
[`305d5b9`](https://redirect.github.com/eslint/eslint/commit/305d5b91aeac24d36fde42f75625a8f183d4ce43 )
docs: remove deprecated rules from related rules section
([#​20911](https://redirect.github.com/eslint/eslint/issues/20911 ))
(Tanuj Kanti)
-
[`49b0202`](https://redirect.github.com/eslint/eslint/commit/49b0202d01918b8061720d586dffd7c68047090c )
docs: fix `display: none` of ad
([#​20901](https://redirect.github.com/eslint/eslint/issues/20901 ))
(Tanuj Kanti)
-
[`9067f94`](https://redirect.github.com/eslint/eslint/commit/9067f9492ec998afc5b4f057a477ecf6ebd45e44 )
docs: switch build to Node.js 24
([#​20893](https://redirect.github.com/eslint/eslint/issues/20893 ))
(Milos Djermanovic)
-
[`c91b041`](https://redirect.github.com/eslint/eslint/commit/c91b0417e3420c76807ce1fa2aea76e2de87ab86 )
docs: Update README (GitHub Actions Bot)
-
[`e349265`](https://redirect.github.com/eslint/eslint/commit/e349265cb37f3ebc837e178e48a725bb782bd870 )
docs: clarify semver strings in rule deprecation objects
([#​20885](https://redirect.github.com/eslint/eslint/issues/20885 ))
(Milos Djermanovic)
#### Chores
-
[`b0e466b`](https://redirect.github.com/eslint/eslint/commit/b0e466b6ab47bfc7de43d8de0c315d8ee83aa584 )
test: add `data` property to invalid tests cases for rules
([#​20924](https://redirect.github.com/eslint/eslint/issues/20924 ))
(Tanuj Kanti)
-
[`f78838b`](https://redirect.github.com/eslint/eslint/commit/f78838bc4c86d487e1bcc7cede260c4467721c46 )
test: add CodePath type coverage
([#​20904](https://redirect.github.com/eslint/eslint/issues/20904 ))
(Pixel998)
-
[`1daa4bd`](https://redirect.github.com/eslint/eslint/commit/1daa4bd734b79a62e317d0394394a6b38cff49f9 )
chore: update `eslint-plugin-eslint-comments` test data to latest commit
([#​20922](https://redirect.github.com/eslint/eslint/issues/20922 ))
(Francesco Trotta)
-
[`002942c`](https://redirect.github.com/eslint/eslint/commit/002942ce988ea28b78e0a2f3b074081e638b552c )
ci: declare contents:read on update-readme workflow
([#​20919](https://redirect.github.com/eslint/eslint/issues/20919 ))
(Arpit Jain)
-
[`64bca24`](https://redirect.github.com/eslint/eslint/commit/64bca24e7bed35bc3c864fc625cb2d89eca87d5b )
chore: update ecosystem plugins
([#​20912](https://redirect.github.com/eslint/eslint/issues/20912 ))
(ESLint Bot)
-
[`6d7c832`](https://redirect.github.com/eslint/eslint/commit/6d7c832950d5e92499d88e504080661f888f8f56 )
chore: ignore fflate updates in renovate
([#​20908](https://redirect.github.com/eslint/eslint/issues/20908 ))
(Pixel998)
-
[`b2c8638`](https://redirect.github.com/eslint/eslint/commit/b2c86382164d87c6203b78d52068cd6a2a6ffe30 )
ci: bump pnpm/action-setup from 6.0.7 to 6.0.8
([#​20889](https://redirect.github.com/eslint/eslint/issues/20889 ))
(dependabot\[bot])
-
[`a9b8d7f`](https://redirect.github.com/eslint/eslint/commit/a9b8d7f74c50211701cfc49710fa541fd91b2aa5 )
chore: increase maxBuffer for ecosystem tests
([#​20881](https://redirect.github.com/eslint/eslint/issues/20881 ))
(sethamus)
-
[`b702ead`](https://redirect.github.com/eslint/eslint/commit/b702ead5e1ed7cb9f28238a454797662efb37396 )
chore: update ecosystem update PR settings
([#​20884](https://redirect.github.com/eslint/eslint/issues/20884 ))
(Pixel998)
-
[`507f60e`](https://redirect.github.com/eslint/eslint/commit/507f60e9a78c9a902bc8759f066ae17a1ea6cd81 )
chore: update ecosystem plugins
([#​20882](https://redirect.github.com/eslint/eslint/issues/20882 ))
(ESLint Bot)
-
[`92f5c5b`](https://redirect.github.com/eslint/eslint/commit/92f5c5bb6bf3a5d167c8ee53a430833410295c6d )
test: add unit test for message-count
([#​20878](https://redirect.github.com/eslint/eslint/issues/20878 ))
(kuldeep kumar)
-
[`df32108`](https://redirect.github.com/eslint/eslint/commit/df321080af5758b1fa25e4b9a40e26135642dd6e )
chore: add
[@​eslint/markdown](https://redirect.github.com/eslint/markdown )
and typescript-eslint ecosystem tests
([#​20837](https://redirect.github.com/eslint/eslint/issues/20837 ))
(sethamus)
-
[`327f91d`](https://redirect.github.com/eslint/eslint/commit/327f91d36aa49f2a50ded931d841a16374fd875f )
chore: use includeIgnoreFile internally
([#​20876](https://redirect.github.com/eslint/eslint/issues/20876 ))
(Kirk Waiblinger)
-
[`f0dc4bd`](https://redirect.github.com/eslint/eslint/commit/f0dc4bd893fb3a9f44e4ddc3ad7063ffb0beacd3 )
chore: pin fflate\@​0.8.2
([#​20877](https://redirect.github.com/eslint/eslint/issues/20877 ))
(Milos Djermanovic)
-
[`0f4bd25`](https://redirect.github.com/eslint/eslint/commit/0f4bd257a67a082b756de746d9e0c4842ab764ca )
ci: run Discord alert for ecosystem test failures
([#​20873](https://redirect.github.com/eslint/eslint/issues/20873 ))
(Copilot)
</details>
<details>
<summary>sveltejs/prettier-plugin-svelte
(prettier-plugin-svelte)</summary>
###
[`v4.1.0`](https://redirect.github.com/sveltejs/prettier-plugin-svelte/blob/HEAD/CHANGELOG.md#410 )
[Compare
Source](https://redirect.github.com/sveltejs/prettier-plugin-svelte/compare/prettier-plugin-svelte@4.0.1...prettier-plugin-svelte@4.1.0 )
##### Minor Changes
- feat: support Svelte 5 declaration tags
([#​533](https://redirect.github.com/sveltejs/prettier-plugin-svelte/pull/533 ))
</details>
<details>
<summary>sveltejs/svelte (svelte)</summary>
###
[`v5.56.1`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5561 )
[Compare
Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.56.0...svelte@5.56.1 )
##### Patch Changes
- fix: error at compile time on duplicate snippet/declaration tag
definitions
([#​18351](https://redirect.github.com/sveltejs/svelte/pull/18351 ))
- fix: parse declaration tag contents more robustly
([#​18353](https://redirect.github.com/sveltejs/svelte/pull/18353 ))
- fix: correctly transform references to earlier declarators in a
declaration tag (e.g. `{let a = $state(0), b = $derived(a * 2)}`)
([#​18348](https://redirect.github.com/sveltejs/svelte/pull/18348 ))
- fix: avoid spurious `state_referenced_locally` warnings for `$derived`
declarations in declaration tags
([#​18348](https://redirect.github.com/sveltejs/svelte/pull/18348 ))
- fix: tolerate whitespace before `let`/`const` in declaration tags
([#​18348](https://redirect.github.com/sveltejs/svelte/pull/18348 ))
- fix: prevent infinite loop when a tag's expression ends with a
trailing `/` at the end of the input
([#​18350](https://redirect.github.com/sveltejs/svelte/pull/18350 ))
- fix: more robust parsing of declaration tags with regards to `type`
([#​18330](https://redirect.github.com/sveltejs/svelte/pull/18330 ))
- fix: preserve newlines in spread input values when the `type`
attribute is applied after `value`
([#​18345](https://redirect.github.com/sveltejs/svelte/pull/18345 ))
- fix: update `SvelteURLSearchParams` when setting duplicate keys to the
same joined value
([#​18336](https://redirect.github.com/sveltejs/svelte/pull/18336 ))
- fix: check references for blockers on server, too
([#​18352](https://redirect.github.com/sveltejs/svelte/pull/18352 ))
###
[`v5.56.0`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5560 )
[Compare
Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.55.10...svelte@5.56.0 )
##### Minor Changes
- feat: allow declarations in the template
([#​18282](https://redirect.github.com/sveltejs/svelte/pull/18282 ))
##### Patch Changes
- perf: use `createElement` instead of `createElementNS` for HTML
elements
([#​18262](https://redirect.github.com/sveltejs/svelte/pull/18262 ))
- perf: store `current_sources` as a `Set` for O(1) membership checks
([#​18278](https://redirect.github.com/sveltejs/svelte/pull/18278 ))
- perf: deduplicate identical hoisted templates within a component
([#​18320](https://redirect.github.com/sveltejs/svelte/pull/18320 ))
- perf: hoist `rest_props` exclude list as a module-scope `Set`
([#​18252](https://redirect.github.com/sveltejs/svelte/pull/18252 ))
</details>
<details>
<summary>privatenumber/tsx (tsx)</summary>
###
[`v4.22.4`](https://redirect.github.com/privatenumber/tsx/releases/tag/v4.22.4 )
[Compare
Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.3...v4.22.4 )
##### Bug Fixes
- resolve CommonJS directory requires inside dependencies
([#​803](https://redirect.github.com/privatenumber/tsx/issues/803 ))
([1ce8463](https://redirect.github.com/privatenumber/tsx/commit/1ce846335b7c445a3328c7d27f06424949356d97 ))
***
This release is also available on:
- [npm package (@​latest
dist-tag)](https://www.npmjs.com/package/tsx/v/4.22.4 )
</details>
<details>
<summary>sindresorhus/type-fest (type-fest)</summary>
###
[`v5.7.0`](https://redirect.github.com/sindresorhus/type-fest/releases/tag/v5.7.0 )
[Compare
Source](https://redirect.github.com/sindresorhus/type-fest/compare/v5.6.0...v5.7.0 )
##### New types
-
[`RemoveSuffix`](https://redirect.github.com/sindresorhus/type-fest/blob/main/source/remove-suffix.d.ts )
([#​1439](https://redirect.github.com/sindresorhus/type-fest/issues/1439 ))
[`d685b77`](https://redirect.github.com/sindresorhus/type-fest/commit/d685b77 )
-
[`UnwrapRequired`](https://redirect.github.com/sindresorhus/type-fest/blob/main/source/unwrap-required.d.ts )
([#​1410](https://redirect.github.com/sindresorhus/type-fest/issues/1410 ))
[`3bfee8e`](https://redirect.github.com/sindresorhus/type-fest/commit/3bfee8e )
##### Improvements
- `ExtendsStrict`: Add `distributiveUnions`, `strictNever` & `strictAny`
options
([#​1408](https://redirect.github.com/sindresorhus/type-fest/issues/1408 ))
[`9ea810b`](https://redirect.github.com/sindresorhus/type-fest/commit/9ea810b )
- `TupleOf`: Improve implementation
([#​1441](https://redirect.github.com/sindresorhus/type-fest/issues/1441 ))
[`391e1bb`](https://redirect.github.com/sindresorhus/type-fest/commit/391e1bb )
##### Fixes
- `RemovePrefix`: Fix: Remove incorrect optimization and always fallback
to `string` for non-literal prefixes
([#​1438](https://redirect.github.com/sindresorhus/type-fest/issues/1438 ))
[`9f35398`](https://redirect.github.com/sindresorhus/type-fest/commit/9f35398 )
- `DelimiterCase`: Fix behavior with non-single character delimiters
([#​1424](https://redirect.github.com/sindresorhus/type-fest/issues/1424 ))
[`9b36590`](https://redirect.github.com/sindresorhus/type-fest/commit/9b36590 )
- `RemovePrefix`: Fix `any` prefix behavior in non-strict mode
([#​1423](https://redirect.github.com/sindresorhus/type-fest/issues/1423 ))
[`c49cb75`](https://redirect.github.com/sindresorhus/type-fest/commit/c49cb75 )
- `DelimiterCase`: Fix behavior with union delimiters
([#​1422](https://redirect.github.com/sindresorhus/type-fest/issues/1422 ))
[`96172c0`](https://redirect.github.com/sindresorhus/type-fest/commit/96172c0 )
- `ApplyDefaultOptions`: Fix behavior with generic instantiations &
`any` values
([#​1411](https://redirect.github.com/sindresorhus/type-fest/issues/1411 ))
[`c46020d`](https://redirect.github.com/sindresorhus/type-fest/commit/c46020d )
- `ApplyDefaultOptions`: Fix behavior with explicit `undefined`
([#​1407](https://redirect.github.com/sindresorhus/type-fest/issues/1407 ))
[`60bfd3f`](https://redirect.github.com/sindresorhus/type-fest/commit/60bfd3f )
***
</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:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-07 17:44:09 +01:00
Sysix
234b5cf283
feat(linter): add schema for eslint/no-shadow ( #23072 )
2026-06-07 15:57:38 +00:00
Sysix
de0dd8baec
feat(linter): add schema for eslint/no-restricted-exports ( #23020 )
2026-06-07 15:40:49 +00:00
Sysix
faa3e0d130
feat(linter): add schema for eslint/no-param-reassign ( #23018 )
2026-06-07 15:40:48 +00:00
Sysix
dbc9c27a5a
feat(linter): add schema for eslint/no-magic-numbers ( #23017 )
2026-06-07 15:40:48 +00:00
Sysix
38d35693c6
feat(linter): add schema for eslint/no-inner-declarations ( #23016 )
2026-06-07 15:40:48 +00:00
Sysix
008fa41609
feat(linter): add schema for eslint/no-constant-condition ( #22991 )
...
The generator changes was written by AI and reviewed on my side.
2026-06-07 15:28:26 +00:00
Sysix
ca44623ce9
feat(linter): add schema for eslint/no-empty-function ( #22988 )
2026-06-07 15:28:26 +00:00
Sysix
43eb04d82e
feat(linter): add schema for eslint/id-match ( #22987 )
2026-06-07 15:16:26 +00:00
Sysix
a800f27ad8
feat(linter): add schema for eslint/capitalized-comments ( #22984 )
2026-06-07 14:58:49 +00:00
Sysix
96e2d32bca
feat(linter): add schema for eslint/id-length ( #22963 )
2026-06-07 14:40:26 +00:00
Sysix
545493f25d
feat(linter): add schema for eslint/complexity ( #22960 )
...
The `apps/oxlint/scripts/generate-config-types.ts` was generated by AI 🤖
2026-06-07 14:40:26 +00:00
Sysix
5f0b558564
feat(linter): add schema for eslint/class-methods-use-this ( #22959 )
2026-06-07 14:40:25 +00:00
Sysix
719b72062a
feat(linter): add schema for simple rule configurations ( #22948 )
...
I asked AI to remove rules from the list which has the configuration syntax like:
```
serde_json::from_value::<XConfig<Self>>(value).map(XConfig::into_inner)
```
This pattern is safe to remove, because the right config is already auto generated.
Part of the command:
```
if grep -Eq 'serde_json::from_value::<[A-Za-z0-9_:]+<Self>>\(value\)[[:space:]]*\.map\([A-Za-z0-9_:]+::into_inner\)' "$target"; then
matched=$((matched+1))
echo "$entry|$target" >> /tmp/verified_with_default_from_value_pattern.txt
fi
done < <(extract_verified)
```
Re-added some rules where the TS Config has `Config & anotherType`
2026-06-07 14:25:02 +00:00
Sysix
fd0096665c
feat(linter): add right schema for eslint/max-* rules ( #22923 )
...
Adds richer JSON-schema/TypeScript typing for ESLint `max-*` rule configurations so oxlint’s published configuration schema (and the website snapshot) can validate and document these rules more accurately.
2026-06-06 21:35:55 +00:00
Sysix
0383e61514
fix(linter): fix schema for rules without a config ( #22946 )
2026-06-06 21:21:17 +00:00
Sysix
1226d78a37
feat(linter): fill schema with rule configurations ( #22907 )
...
This PR is a proof-of-concept to enrich the generated Oxlint configuration JSON schema (and corresponding generated TS types) with per-rule configuration shapes instead of defaulting everything to `DummyRule`, while temporarily skipping rules whose schema generation hasn’t been validated.
The 3 rules are new and do not get skipped. (I generated the list from an old commit), verified that the generated output is the expected user configuration for each rule.
All other rules are skipped and will be enabled in future PRs.
2026-06-06 20:45:54 +00:00
Boshen
324c8ae137
refactor(semantic): add SemanticBuilder::new_compiler / new_linter presets ( #23019 )
...
## Summary
Adds two named constructor presets to `SemanticBuilder` that bake in the options each use case needs, so the configuration lives in one place instead of being repeated at call sites:
- **`SemanticBuilder::new_compiler()`** — compiler pipeline. Enables syntax-error checking; leaves linter-only analyses (control flow graph, class table) off.
- **`SemanticBuilder::new_linter()`** — linter. Enables syntax-error checking, the control flow graph, and the class table.
The presets are applied at the real pipeline entry points:
- `new_linter()` → the linter service build.
- `new_compiler()` → `oxc::Compiler`, and the napi parser/transform bindings.
Everywhere else keeps `SemanticBuilder::new()` and turns on only the features it needs (mangler, minifier, formatter, transformer plugins, examples, tests, ...). Individual options can still be overridden after a preset (e.g. the linter service overrides `check_syntax_error` with its runtime flag).
Behavior is preserved at every migrated site. Node-store access is intentionally untouched in this PR.
## Verified
- Builds across the affected crates + napi; clippy clean; `oxc_linter` tests pass; full `cargo coverage` with no snapshot changes.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
2026-06-06 15:44:18 +00:00
Nicolas Le Cam
6cb34b8374
fix(linter/plugins): make spreading Token instances keep loc property ( #22947 )
...
Follow-up of #22238 , same logic applied to `Token` class
## Problem
`Token` instances are object-pooled and reused across files, similar to
`Comment`.
Their `loc` property is defined as a **prototype getter**, which means
it is not an own
property and is therefore invisible to the spread operator:
```js
const spread = { ...token };
"loc" in spread; // false ❌
```
This silently drops `loc` whenever a JS plugin (or rule) spreads a token
— e.g. when
building a diagnostic from `{ ...token, message: "…" }`.
`JSON.stringify` had the same problem and was patched with a `toJSON()`
workaround.
A separate `Object.defineProperty(Token.prototype, "loc", { enumerable:
true })` call
was used to make `loc` show up in `for…in` iteration, but it still
didn't fix spread.
## Fix
Define `loc` as an own accessor property on every `Token` instance using
`__defineGetter__`. Own properties are visible to spread,
`JSON.stringify,` and
`for…in` iteration, so all three work without any extra workarounds.
The getter function is defined in the class static block and captured in
a `const`
(`getTokenLoc`). Using a `const` rather than a `let` lets V8 skip
reassignment checks
at the `defineGetter(this, "loc", getTokenLoc)` call site — a pattern
already
established in the codebase for `resetLoc`.
As a result:
- `toJSON()` is removed — `JSON.stringify` now works via the own
property directly.
- `Object.defineProperty(Token.prototype, "loc", { enumerable: true })`
is removed —
no longer needed.
## Test
A spread assertion is added to the existing `tokens` fixture:
```js
const spread = { ...firstToken };
assert("loc" in spread); // was false before this fix
assert.deepEqual(spread.loc, firstToken.loc);
```
---------
Co-authored-by: overlookmotel <theoverlookmotel@gmail.com >
2026-06-06 02:24:56 +01:00
Nicolas Le Cam
27de0448ae
fix(linter/plugins): make spreading Comment instances keep loc property ( #22238 )
...
## Summary: Fixing unicorn/expiring-todo-comments via jsPlugin
## Problem
The `unicorn/expiring-todo-comments` rule failed when run through
oxlint's jsPlugin system with error:
```TypeError: Either `node` or `loc` is required```
The rule spreads Comment instances (`{...comment}`) to process each line of multi-line comments, but lost the `loc` property because:
- Comment's `loc` was a prototype getter (not an own enumerable property)
- Spread only copies own enumerable properties
## Solution
Define `loc` as an own accessor property on every `Comment` instance using
`__defineGetter__`. Own properties are visible to spread, `JSON.stringify,` and
`for…in` iteration, so all three work without any extra workarounds.
The getter function is defined in the class static block and captured in a `const`
(`getCommentLoc`). Using a `const` rather than a `let` lets V8 skip reassignment checks
at the `defineGetter(this, "loc", getCommentLoc)` call site — a pattern already
established in the codebase for `resetCommentLoc`.
As a result:
- `toJSON()` is removed — `JSON.stringify` now works via the own property directly.
- `Object.defineProperty(Comment.prototype, "loc", { enumerable: true })` is removed —
no longer needed.
## Test Results
- ✅ unicorn/expiring-todo-comments rule works (detects expired TODOs)
- ✅ updated comments fixture pass
- ✅ All untouched existing tests pass
---------
Co-authored-by: overlookmotel <theoverlookmotel@gmail.com >
2026-06-06 02:06:28 +01:00
leaysgur
f88961ae29
docs(oxfmt): annotate each config option with supported languages ( #22953 )
...
Currently, our config file is Prettier-compatible, which is not easy to tell which options apply to which languages.
(I've felt this way for a while, so) I've added some notes to clarify.
2026-06-04 08:28:02 +00:00
leaysgur
5778a2dfb5
refactor(formatter_core): purify core and define rules ( #22952 )
...
The Printer never consumes these; they belong with each language formatter.
- Evict `Quote` (each formatter owns `QuoteStyle`)
- `normalize_string` takes a quote byte
- Evict `Expand` / `BracketSpacing` / `TrailingCommas` into oxc_formatter and oxc_formatter_json
- JSON's `TrailingCommas` is now two-variant (`Always`/`Never`)
- collapse Prettier's `all`/`es5` at each translation layer
- Rename `util/` -> `spec/` (pure shared helpers)
- Split `SourceText`: mechanical access stays in core, JS/TS lexis moves to `SourceTextExt`
- Drop the `oxc_syntax` dependency from core
All behaviros, Prettier conformance are unchanged.
2026-06-04 07:03:56 +00:00
leaysgur
c786f0d797
feat(oxfmt): format parser:jsonc files by oxc_formatter_json ( #22913 )
...
Now Oxfmt formats `.jsonc` and other special extensions by `oxc_formatter_json`.
2026-06-04 06:54:42 +00:00
overlookmotel
0b7ce7edd9
perf(linter/plugins): create global prop vars at top level of modules ( #22928 )
...
Oxlint's JS-side code is processed by a TSDown plugin that transforms global property accesses to `const`s imported from `globals.ts`. e.g.:
```js
function foo(obj) {
return Object.keys(obj);
}
```
is transformed to:
```js
import { ObjectKeys } from "./utils/globals.ts";
function foo(obj) {
return ObjectKeys(obj);
}
```
The purpose of this transform is:
1\. Better perf - avoid a property lookup/check on each call.
2\. More robust in the face of user code (plugins) altering globals e.g. `Object.keys = function myWeirdFunction() {}`.
While delving into the assembly that V8 produces while reviewing #22238 , I discovered that in fact the transform was having a _negative_ effect on perf, because TSDown puts the global `const`s in a separate chunk `global.js`. Because the consts are in a different module, this actually makes them _more_ costly to access, rather than less.
In fact, it turns out that TurboFan doesn't insert a check at all in the original code - it instead has machinery to trigger de-opt if the global is reassigned. So the original perf rationale for this transform was completely misguided - it doesn't in fact produce a perf gain at all! We still want to keep it for the robustness advantage, but we don't want it to be perf _loss_, as it was before this PR.
This PR fixes the perf by instead defining consts inline in each file. The example above is now transformed to:
```js
const ObjectKeys = Object.keys;
function foo(obj) {
return ObjectKeys(obj);
}
```
This also removes the need to manually maintain the `globals.ts` file. It's now automatic.
Additionally, improve the transform in a few minor ways:
1. Support deeper nested global props e.g. `Object.prototype.toString`.
2. Skip converting e.g. `Array.prototype.slice.call(arguments)` (because `.call` requires `this`, so `ArrayPrototypeSliceCall(arguments)` is incorrect).
3. Do replace methods which take `this` (e.g. `Promise.resolve`) when they're not used in a method call.
Note: The robustness advantage of this transform may appear to be marginal, and not worth the bother of having this transform at all. Personally, I think it's worthwhile. Oxlint JS-side code has access to a slice of Rust's memory as a `Uint8Array`. Writing to that buffer could cause UB, reading/writing out of bounds, or other serious problems on Rust side, so IMO it's critical to protect against that in every way we can.
2026-06-03 00:53:31 +00:00
overlookmotel
1f965341ba
refactor(linter/config): do not import from globals.ts manually ( #22927 )
...
There's no need to import globals from `globals.ts` manually. TSDown plugin does this transform automatically. (I sense the hand of an LLM here)
2026-06-03 00:53:31 +00:00
yefan
8f423c1c1e
feat(linter/vue): implement require-direct-export rule ( #17623 )
...
related https://github.com/oxc-project/oxc/issues/11440
---------
Co-authored-by: Connor Shea <connor.james.shea@gmail.com >
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-02 20:41:00 +01:00
overlookmotel
0f7c31905b
perf(linter/plugins): define class #loc setter functions as consts ( #22919 )
...
Micro-optimization.`Token` and `Comment` classes create functions defined in static blocks to reset the value of `#loc` private property on class instances. Copy these functions into `const` vars, to avoid checks at these functions' call sites. Previously they were stored in `let` bindings, which incurs a check at each call site (because the value might have been re-assigned). The difference in Turbofan-optimized code is just an 8-byte load and a comparison, but why keep that when we can lose it?
Discovered the perf difference while digging into #22238 .
2026-06-02 13:45:39 +00:00
bab
78e915bc8b
feat(linter/vue): implement no-reserved-props rule ( #22914 )
...
Implements `vue/no-reserved-props` from eslint-plugin-vue.
Part of #11440 .
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-02 13:41:55 +01:00