Alex Peshkov
0f200a98a5
feat(linter/vue): implement require-prop-types rule ( #22083 )
...
related https://github.com/oxc-project/oxc/issues/11440
eslint-plugin-vue reference:
https://eslint.vuejs.org/rules/require-prop-types.html#vue-require-prop-types
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-01 19:38:40 +01:00
bab
5da9da9d88
feat(linter/vue): implement no-reserved-keys rule ( #21780 )
...
AI disclosure: implemented with Claude Code, reviewed manually.
Part of #11440 (eslint-plugin-vue rules).
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-01 19:05:40 +01:00
renovate[bot]
602bb049de
chore(deps): update oxc to ^0.134.0 ( #22901 )
...
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.133.0` →
`^0.134.0`](https://renovatebot.com/diffs/npm/@oxc-project%2ftypes/0.133.0/0.134.0 )
|

|

|

|

|
| [oxc-parser](https://oxc.rs/docs/guide/usage/parser )
([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/napi/parser ))
| [`^0.133.0` →
`^0.134.0`](https://renovatebot.com/diffs/npm/oxc-parser/0.133.0/0.134.0 )
|

|

|

|

|
---
### 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:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDYuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIwNi4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-01 17:59:08 +00:00
bab
75e14a86c1
feat(linter/vue): implement prop-name-casing rule ( #22892 )
...
related: eslint-plugin-vue migration umbrella issue (https://github.com/oxc-project/oxc/issues/11440 )
upstream: https://eslint.vuejs.org/rules/prop-name-casing.html
One upstream invalid test (cross-file `import` of a TS interface) is
skipped — cross-file type resolution is the tsgolint domain in oxc.
Follow-up: extract shared casing helpers, currently duplicated with the
component-definition-name-casing rule
(https://github.com/oxc-project/oxc/pull/22818 ).
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-01 17:57:49 +01:00
oxc-guard[bot]
964a758084
release(apps): oxlint v1.68.0 && oxfmt v0.53.0 ( #22883 )
...
# Oxlint
### 🚀 Features
- e4b1f46 linter/typescript: Implement `method-signature-style` rule
(#22679 ) (Mikhail Baev)
- bc462ca linter/vue: Implement no-reserved-component-names rule
(#22741 ) (bab)
- ef9e751 linter/vue: Implement component-definition-name-casing rule
(#22818 ) (bab)
- d67f51a linter/vue: Implement require-prop-type-constructor rule
(#22708 ) (bab)
- 1444f82 linter/promise/spec-only: Add `Promise.try` to `Promise`
static methods (#22812 ) (Ben Saufley)
- 8422e8b linter/jsdoc: Implement `require-yields-description` rule
(#22805 ) (Mikhail Baev)
- fe93f97 linter/eslint: Implement `prefer-named-capture-group` rule
(#22759 ) (Sebastian Poxhofer)
- 1a7798b linter: Add suggestion for `unicorn/no-new-array` (#22682 )
(Sysix)
### 🐛 Bug Fixes
- 760a9f9 linter: Report errors when writing to the filesystem (#22881 )
(camc314)
- e5a2748 linter: Avoid no-unreachable false positive after conditional
loop (#22869 ) (camc314)
- 39d92d6 linter/arrow-body-style: Preserve comments within function
(#22854 ) (Sysix)
- 3d13e29 parser: Reject `declare` in an already-ambient context
(TS1038) (#22850 ) (Boshen)
- 5152854 parser: Reject statements in ambient contexts (TS1036)
(#22849 ) (Boshen)
- 2eafea6 parser: Reject function implementations in ambient contexts
(TS1183) (#22845 ) (Boshen)
- c645615 parser: Reject incompatible class member modifiers (#22843 )
(Boshen)
- 4a1ca4a linter/export: Detect duplicate explicit exports (#22798 )
(camc314)
- 0a9a735 linter/no-loop-func: Allow safe let closures (#22811 )
(camc314)
- 1599f11 linter: Align lsp extends default plugins (#22788 ) (camc314)
- db32ec9 linter/no-accumulating-spread: Use loop as primary span
(#22800 ) (camc314)
- 33ec6b4 linter/consistent-test-it: Avoid adjacent describe leakage
(#22796 ) (camc314)
- 2606069 linter/no-array-sort: Unwrap parenthesized sort args (#22794 )
(camc314)
- 9f2f709 linter/no-array-sort: Skip non compare fn sort arguments
(#22752 ) (Gaurav Dubey)
- 27268a0 linter/no-else-return: Preserve statement boundary in fixer
(#22687 ) (camc314)
- d9cb6d8 linter/no-empty-function: Allow functions callbacks with
`allow: functions` (#22764 ) (camc314)
- a40a314 linter/no-shadow-restricted-names: Ignore enum members
(#22762 ) (camc314)
- 82366d9 linter/no-cond-assign: Align ternary handling (#22761 )
(camc314)
### 📚 Documentation
- 5e113ba linter: Add license notices for ported ESLint plugins (#22768 )
(Boshen)
# Oxfmt
### 🚀 Features
- d75cbbf oxfmt: Format `parser:json` files by `oxc_formatter_json`
(#22709 ) (leaysgur)
- 49db054 formatter_json: Implement `oxc_formatter_json` (json variant
only) (#22641 ) (leaysgur)
- 9c71f2e ast, codegen, formatter: Add `WithClauseKeyword::as_str`
helper and use it (#22791 ) (camc314)
### 🐛 Bug Fixes
- d3cdd62 oxfmt: Skip formatting for whitespace-only file (#22780 )
(leaysgur)
- 23f0cc8 formatter: Don't move comments inside variable declaration in
for in loop (#22776 ) (leaysgur)
- f200c40 formatter: Don't move comments inside variable declaration in
for of loop (#22773 ) (Leonabcd123)
### 📚 Documentation
- 845f393 oxfmt,formatter,formatter_json,formatter_core: Add/update
AGENTS.md (#22873 ) (leaysgur)
2026-06-01 17:31:52 +01:00
camc314
3f05c5e126
feat(linter): expose override::exclude_files option ( #22884 )
...
We originally removed this option from documentation as we wanted to flesh it out a little bit more before shipping it.
After that meeting, and some more thought, I think we have to ship it as is; the alternative ideas (negation in files matched) doesn't really work wihtout a breaking change which will be really annoying for users.
fixes #22837
2026-06-01 11:10:53 +00:00
Mikhail Baev
e4b1f46bec
feat(linter/typescript): implement method-signature-style rule ( #22679 )
...
This PR implements `typescript-eslint/method-signature-style`.
Part of issue #2180 .
It uses all upstream test cases. The only changes are to 4 setter test
cases, changing this:
```
set f(value: number): void;
```
to this:
```
set f(value: number);
```
because they failed with `TS(1095): A 'set' accessor cannot have a
return type annotation.`
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-01 10:29:17 +01:00
bab
bc462ca5a7
feat(linter/vue): implement no-reserved-component-names rule ( #22741 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream:
https://eslint.vuejs.org/rules/no-reserved-component-names.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-01 10:14:37 +01:00
leaysgur
845f393362
docs(oxfmt,formatter,formatter_json,formatter_core): add/update AGENTS.md ( #22873 )
...
- Update: apps/oxfmt
- Add: crates/oxc_formatter_core,oxc_formatter,oxc_formatter_json
2026-06-01 08:18:15 +00:00
leaysgur
705c0e969b
refactor(formatter): introduce text-in public APIs ( #22872 )
...
Align `oxc_formatter` with `oxc_formatter_json`, both now expose `format(...) -> Result<Formatted<'a, _>, OxcDiagnostic>`.
- Add text-in `format` and `format_fragment`, also `format_program`, `parse_for_format` and the `FragmentContext` enum
- Parse options, JSX enabling, js-in-xxx context aware handlings are applied internally
- Make the `Formatter` struct and AST/IR primitives crate-internal
- Fold `get_parse_options` / `enable_jsx_source_type` and the `service` module into `parse_for_format`
2026-06-01 06:40:34 +00:00
bab
ef9e75170d
feat(linter/vue): implement component-definition-name-casing rule ( #22818 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/component-definition-name-casing.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-29 13:02:26 +01:00
bab
d67f51aba1
feat(linter/vue): implement require-prop-type-constructor rule ( #22708 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream:
https://eslint.vuejs.org/rules/require-prop-type-constructor.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-29 12:32:07 +01:00
leaysgur
8e5d5b81cb
refactor(oxfmt): centralize core option resolution and decouple validation ( #22823 )
...
For historical reasons, Oxfmt's option resolution depended on `oxc_formatter(_js)`.
This now resolves core options from `oxc_formatter_core`.
Validation also went through the JS formatter's option resolution; it now uses a neutral implementation as well.
2026-05-29 09:13:39 +00:00
leaysgur
1bbbcfb0b4
refactor(oxfmt): fast-path JS/TS detection in classify_file_kind ( #22822 )
...
Also reduces the cost to get `filename`/`extension`.
2026-05-29 09:13:38 +00:00
leaysgur
5733868456
refactor(formatter_core,formatter,formatter_json): share Expand and BracketSpacing options ( #22821 )
...
We chose `core` as the location for duplicate `struct`s, but the final options will continue to be built by each formatter.
2026-05-29 09:13:38 +00:00
leaysgur
6eda4ebad8
test(oxfmt): Add tests for #22780 ( #22815 )
...
Refs: #22780
2026-05-29 01:26:11 +00:00
leaysgur
d75cbbf154
feat(oxfmt): Format parser:json files by oxc_formatter_json ( #22709 )
...
Use `oxc_formatter_json` for major `.json` files, originally formatted by Prettier.
2026-05-29 00:49:51 +00:00
leaysgur
c323187f37
refactor(formatter): Split oxc_formatter and oxc_formatter_core ( #22611 )
...
Split `oxc_formatter` into:
- `oxc_formatter(_js)`: JS/TS specific formatter, comment handling, sortImports, jsdoc, etc
- `oxc_formatter_core`: Language agnostic IR, printer, etc
The naming convention is different from Biome or Ruff (they do not have `_core`, and `_formatter` is equivalent to the core), but this is because in Oxc, items without `_js` are the default.
As a basic task, I have added `Context` as a generic to all relevant parts to ensure support for multiple languages.
There might still be other components that could be refactored into the core, but I would like to finish them as I implement support for other languages.
Also moved some shared utilities to the core in advance.
2026-05-29 00:49:49 +00:00
camc314
1599f111b6
fix(linter): align lsp extends default plugins ( #22788 )
...
Fixes #22758 .
The LSP path was not materializing the default plugin set before resolving a root config with `extends`, while the CLI path already did that before building the config. That meant a child config launched as the LSP workspace root could extend a parent config with an explicit `plugins` array and accidentally lose default plugins like `typescript`, even though `oxlint` CLI and `--print-config` showed those plugins as active.
This moves the default-plugin materialization into a shared helper used by both CLI and LSP config loading, so both paths resolve the same effective root config before `extends` are applied.
I added a regression fixture for the reported nested config shape and snapshot coverage for the missing TypeScript diagnostic.
2026-05-28 19:37:30 +00:00
Mikhail Baev
8422e8bc44
feat(linter/jsdoc): implement require-yields-description rule ( #22805 )
...
this PR implements `jsdoc/require-yields-description` rule.
[rule doc](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-description.md )
[rule source](https://github.com/gajus/eslint-pluginjsdoc/blob/3d53b88baed2b49e04b4aa71599d1b449efcc3f8/src/index.js#L245 )
issue #1170
---------
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-05-28 20:34:08 +01:00
renovate[bot]
b7568d54d7
chore(deps): update dependency @napi-rs/cli to v3.7.0 ( #22771 )
...
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/cli](https://napi.rs/ )
([source](https://redirect.github.com/napi-rs/napi-rs )) | [`3.6.2` →
`3.7.0`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.6.2/3.7.0 ) |

|

|

|

|
---
### Release Notes
<details>
<summary>napi-rs/napi-rs (@​napi-rs/cli)</summary>
###
[`v3.7.0`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.6.2...@napi-rs/cli@3.7.0 )
[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.6.2...@napi-rs/cli@3.7.0 )
</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:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-28 10:06:39 +01:00
leaysgur
d3cdd626d6
fix(oxfmt): skip formatting for whitespace-only file ( #22780 )
...
Prettier behaves in the same way.
2026-05-28 08:02:09 +00:00
Sebastian Poxhofer
fe93f9718a
feat(linter/eslint): implement prefer-named-capture-group rule ( #22759 )
...
## Disclaimer
- The PR is mostly generated by ClaudeCode using Opus 4.7 and Sonnet 4.6
- Every line has been reviewed by myself ( with negligible Rust
experience )
- Some adaptions have been done manually
## Changes
Reimplements
[prefer-named-capture-group](https://eslint.org/docs/latest/rules/prefer-named-capture-group )
as linting rule.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-27 14:09:14 +01:00
leaysgur
ebb19debe3
chore(oxfmt): Restore changelog for v0.51 ( #22749 )
...
Fixes #22726
2026-05-26 23:23:55 +00:00
renovate
02951db875
chore(deps): update oxc to ^0.133.0 ( #22739 )
...
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.132.0` → `^0.133.0`](https://renovatebot.com/diffs/npm/@oxc-project%2ftypes/0.132.0/0.133.0 ) |  |  |  |  |
| [oxc-parser](https://oxc.rs/docs/guide/usage/parser ) ([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/napi/parser )) | [`^0.132.0` → `^0.133.0`](https://renovatebot.com/diffs/npm/oxc-parser/0.132.0/0.133.0 ) |  |  |  |  |
---
### 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2026-05-26 08:41:29 +00:00
oxc-guard[bot]
68b455d84f
release(apps): oxlint v1.67.0 && oxfmt v0.52.0 ( #22735 )
...
# Oxlint
### 🚀 Features
- 10da26b linter: `no-misleading-character-class` add suggestions for
regex literal (#22681 ) (Sysix)
- b84941e linter/vue: Implement no-expose-after-await rule (#22675 )
(bab)
- 98b98c1 linter/vue: Implement no-computed-properties-in-data rule
(#22674 ) (bab)
- 868e2e8 linter: Add suggestion for `no-misleading-character-class`
(#22631 ) (Sysix)
- 2d4c919 oxlint: Support `vite-plus/resolveConfig` for vite.config.ts
(#22456 ) (leaysgur)
- 2a60012 linter/vue: Implement require-render-return rule (#22613 )
(bab)
- 9f227fd linter/vue: Implement no-deprecated-props-default-this rule
(#21892 ) (bab)
- 9cd28b3 linter: Add debug option to print files to be linted (#22546 )
(camchenry)
- 87f065e linter/vue: Implement return-in-emits-validator rule (#21935 )
(bab)
- ea0380c linter/unicorn: Implement `import-style` rule (#22173 ) (Hao
Chen)
- dde40fe linter/vue: Implement no-watch-after-await rule (#22006 ) (bab)
- a735eb0 linter/vue: Implement valid-next-tick rule (#22531 ) (bab)
- 6dc615d linter/vue: Implement no-shared-component-data rule (#21842 )
(bab)
- a656418 linter/vue: Implement valid-define-options rule (#22107 ) (bab)
- bb6f1b2 linter/vue: Implement require-slots-as-functions rule (#22244 )
(bab)
- 5fa4774 linter/n: Implement `callback-return` rule (#22470 ) (Mikhail
Baev)
### 🐛 Bug Fixes
- 52bd016 linter: Respect allow unused disable directives in LSP
(#22715 ) (camc314)
- fa7c463 semantic: Correct TS enum member symbol spans (#22689 )
(camc314)
- ed445ba linter: Respect flags overrides for `RegExp(/regex/i, "u")`
(#22678 ) (Sysix)
- 26b9396 semantic: Resolve parameter decorators outside parameter scope
(#22623 ) (camc314)
- 203952d linter: `no-misleading-character-class` fix
`is_unicode_code_point_escape` check (#22655 ) (Sysix)
- 2f64d3d linter: `no-misleading-character-class` own diagnostic for
surrogate pairs without u flag (#22654 ) (Sysix)
- 0c6ebc2 linter/eslint/no-lone-blocks: Do not flag empty loops (#22649 )
(Mikhail Baev)
- 2a7562e linter/no-focused-tests: Mark fixer as a suggestion (#22645 )
(camc314)
- dbe644f linter: Respect args none for unused rest parameters (#22627 )
(camc314)
- d0211b0 linter: Allow undefined in DummyRuleMap index (#22626 )
(camc314)
- 36fc0ec oxlint/lsp: "ignore this" actions merge with existing
directive (#22604 ) (Sysix)
- f7f370e linter/vitest/prefer-expect-type-of: Recommend `toBeTypeOf`
instead of `expectTypeOf` (#22612 ) (Mikhail Baev)
- 77063e5 linter/consistent-indexed-object-style: Preserve interface
modifiers in fixes (#22579 ) (camc314)
- 4f33aa7 linter: Treat `TSGlobalDeclaration` as ambient in
`has_ambient_typescript_ancestor` (#22577 ) (camc314)
### ⚡ Performance
- c22938d linter/no-async-endpoint-handlers: Populate node types
(#22601 ) (camc314)
- 607486e linter/no-negated-condition: Populate node types (#22602 )
(camc314)
- 4dcaa59 linter/consistent-type-imports: Populate node types (#22600 )
(camc314)
- 5bd3b25 linter/no-unused-vars: Avoid cloned ancestor iterator (#22598 )
(camc314)
- 97fe9ba linter/no-extra-non-null-assertion: Reduce node matches
(#22588 ) (camc314)
- ae98296 linter/consistent-indexed-object-style: Populate node types
(#22578 ) (camc314)
# Oxfmt
### 🚀 Features
- 16b8058 oxfmt: Support `vite-plus/resolveConfig` for vite.config.ts
(#22454 ) (leaysgur)
### 🐛 Bug Fixes
- 5a26479 formatter: Preserve import phases (#22692 ) (Cameron)
### ⚡ Performance
- 78cf83f formatter: Pre-size output buffer using source text length
(#22594 ) (Dunqing)
Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com >
2026-05-26 14:34:02 +08:00
camc314
52bd016237
fix(linter): respect allow unused disable directives in LSP ( #22715 )
...
Fixes #22713
This updates the LSP handling for `unusedDisableDirectives: "allow"` so it disables unused directive reporting instead of producing warning diagnostics and remove-directive code actions.
The behavior now matches the CLI path: only `warn` and `deny` enable unused-disable reporting, while `allow`/`off` are treated as disabled.
Added an LSP snapshot regression test covering the `"allow"` case.
2026-05-25 12:42:28 +00:00
renovate
aa3de22643
chore(deps): update npm packages ( #22699 )
...
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/ ) |
|---|---|---|---|---|---|
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser ) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser )) | [`8.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.59.3/8.59.4 ) |  |  |  |  |
| [@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.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.59.3/8.59.4 ) |  |  |  |  |
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io ) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys )) | [`8.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.59.3/8.59.4 ) |  |  |  |  |
| [@vitest/browser](https://vitest.dev/guide/browser/ ) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser )) | [`4.1.6` → `4.1.7`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.6/4.1.7 ) |  |  |  |  |
| [@vitest/browser-playwright](https://vitest.dev/config/browser/playwright ) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright )) | [`4.1.6` → `4.1.7`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.6/4.1.7 ) |  |  |  |  |
| [eslint](https://eslint.org ) ([source](https://redirect.github.com/eslint/eslint )) | [`10.3.0` → `10.4.0`](https://renovatebot.com/diffs/npm/eslint/10.3.0/10.4.0 ) |  |  |  |  |
| [svelte](https://svelte.dev ) ([source](https://redirect.github.com/sveltejs/svelte/tree/HEAD/packages/svelte )) | [`5.55.7` → `5.55.9`](https://renovatebot.com/diffs/npm/svelte/5.55.7/5.55.9 ) |  |  |  |  |
| [tsx](https://tsx.hirok.io ) ([source](https://redirect.github.com/privatenumber/tsx )) | [`4.22.0` → `4.22.3`](https://renovatebot.com/diffs/npm/tsx/4.22.0/4.22.3 ) |  |  |  |  |
| [vitest](https://vitest.dev ) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest )) | [`4.1.6` → `4.1.7`](https://renovatebot.com/diffs/npm/vitest/4.1.6/4.1.7 ) |  |  |  |  |
---
### Release Notes
<details>
<summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary>
### [`v8.59.4`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8594-2026-05-18 )
[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.3...v8.59.4 )
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.59.4 ) 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.59.4`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8594-2026-05-18 )
[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.3...v8.59.4 )
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.59.4 ) 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.59.4`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8594-2026-05-18 )
[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.3...v8.59.4 )
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.59.4 ) 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.7`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.7 )
[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7 )
##### 🐞 Bug Fixes
- **runner**: Limit concurrency per task branch in addition to per leaf callbacks (backport) - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa ) in [#​10384](https://redirect.github.com/vitest-dev/vitest/issues/10384 ) [<samp>(4f0f2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4f0f2a1ee )
##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7 )
</details>
<details>
<summary>eslint/eslint (eslint)</summary>
### [`v10.4.0`](https://redirect.github.com/eslint/eslint/compare/v10.3.0...452c4010c07dc2e36fe6ec6a8c48298878e86887 )
[Compare Source](https://redirect.github.com/eslint/eslint/compare/v10.3.0...v10.4.0 )
</details>
<details>
<summary>sveltejs/svelte (svelte)</summary>
### [`v5.55.9`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5559 )
[Compare Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.55.8...svelte@5.55.9 )
##### Patch Changes
- fix: don't unset batch when calling `{#await ...}` promise ([#​18243](https://redirect.github.com/sveltejs/svelte/pull/18243 ))
- fix: promise-ify `{#await await ...}` expressions on the server and correctly hydrate them on the client ([#​18243](https://redirect.github.com/sveltejs/svelte/pull/18243 ))
- fix: deduplicate dependencies that are added outside the init/update cycle ([#​18243](https://redirect.github.com/sveltejs/svelte/pull/18243 ))
- fix: avoid false-positive batch invariant error ([#​18246](https://redirect.github.com/sveltejs/svelte/pull/18246 ))
- fix: inline primitive constants in attribute values during SSR ([#​18232](https://redirect.github.com/sveltejs/svelte/pull/18232 ))
### [`v5.55.8`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5558 )
[Compare Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.55.7...svelte@5.55.8 )
##### Patch Changes
- fix(print): handle `svelte:body` and fix keyframe percentage double-printing ([#​18234](https://redirect.github.com/sveltejs/svelte/pull/18234 ))
- fix: execute uninitialized derived even if it's destroyed ([#​18228](https://redirect.github.com/sveltejs/svelte/pull/18228 ))
- fix: use named symbols everywhere ([#​18238](https://redirect.github.com/sveltejs/svelte/pull/18238 ))
- fix: don't run teardown effects when deriveds are unfreezed ([#​18227](https://redirect.github.com/sveltejs/svelte/pull/18227 ))
- fix: unset context synchronously in `run` ([#​18236](https://redirect.github.com/sveltejs/svelte/pull/18236 ))
</details>
<details>
<summary>privatenumber/tsx (tsx)</summary>
### [`v4.22.3`](https://redirect.github.com/privatenumber/tsx/compare/v4.22.2...dce02fc3b8b64a58d24560714902b16f89332f1f )
[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.2...v4.22.3 )
### [`v4.22.2`](https://redirect.github.com/privatenumber/tsx/compare/v4.22.1...v4.22.2 )
[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.1...v4.22.2 )
### [`v4.22.1`](https://redirect.github.com/privatenumber/tsx/compare/v4.22.0...6979f28810829dc79ec9baf406e162a18b65ab4b )
[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.0...v4.22.1 )
</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 becomes conflicted, 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2026-05-25 10:22:30 +00:00
leaysgur
b3185b96ab
chore(deps): Bump degit and use from catalog ( #22707 )
2026-05-25 05:34:28 +00:00
leaysgur
a474264ac8
chore(oxfmt): Bump svelte and tailwind plugin version ( #22705 )
...
Upadte `prettier-plugin-svelte` along with `prettier-plugin-tailwindcss`.
- `prettier-plugin-svelte@4` has just released
- This plugin requires Svelte 5 and uses new AST internally
- This breaks `prettier-plugin-tailwindcss`, which does not support new AST shape
- So we also update `prettier-plugin-tailwindcss` to support new AST
While `prettier-plugin-svelte@3` previously supported Svelte 4 and below, this new version has dropped that support. (= breaking change)
However, since Oxfmt has specified Svelte 5 as a peer dependency ever since adding Svelte support, it has never supported Svelte 4 or earlier.
In that sense, this is not a breaking change for Oxfmt.
2026-05-25 05:09:17 +00:00
bab
b84941e69e
feat(linter/vue): implement no-expose-after-await rule ( #22675 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/no-expose-after-await.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-22 11:17:31 +01:00
bab
98b98c11f7
feat(linter/vue): implement no-computed-properties-in-data rule ( #22674 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream:
https://eslint.vuejs.org/rules/no-computed-properties-in-data.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-22 11:15:53 +01:00
leaysgur
6e29c56baf
test(oxfmt): Fix windows snapshots for Vite+ diagnostics ( #22635 )
...
Fixes https://github.com/oxc-project/oxc/actions/runs/26157008185/job/76938896278
2026-05-21 01:42:28 +00:00
camc314
d0211b0fd2
fix(linter): allow undefined in DummyRuleMap index ( #22626 )
...
fixes #22624
2026-05-20 15:49:58 +00:00
leaysgur
1ccaf767d6
refactor(oxlint,oxfmt): Fix up apps/shared usage ( #22457 )
...
Final clean up.
- Share `isObject()` function
- Clean up directory structure
- Use `Error.cause` for TS hint error
2026-05-20 08:21:39 +00:00
leaysgur
2d4c9194bd
feat(oxlint): Support vite-plus/resolveConfig for vite.config.ts ( #22456 )
...
Fixes #21417 and #21057
Now Oxlint can use the common functions defined in `shared` as well.
2026-05-20 08:21:38 +00:00
leaysgur
1a752eab42
refactor(oxfmt): Use shared/loadViteConfigField ( #22455 )
...
Move `loadViteConfigField()` from Oxfmt to shared.
2026-05-20 08:21:38 +00:00
leaysgur
16b8058cd6
feat(oxfmt): Support vite-plus/resolveConfig for vite.config.ts ( #22454 )
...
Closes #21603 , fixes #21418
To simplify the review process, I'll first add support to Oxfmt.
In the next PR, I'll move that implementation to `shared`.
2026-05-20 08:21:37 +00:00
Sysix
36fc0ec5f0
fix(oxlint/lsp): "ignore this" actions merge with existing directive ( #22604 )
...
> ## Pull request overview
> This PR updates oxlint’s LSP “ignore this” code actions so that when a relevant disable directive already exists (oxlint or ESLint form), the action appends the new rule to the existing directive instead of inserting a new comment.
Now it will check for `oxlint-disable-line` first and searched `oxlint-disable-next-line` if no comment after the diagnostic is found.
closes https://github.com/oxc-project/oxc/issues/16060
Generated by GPT-5.3-Codex 🤖
Reviewed & manually tested by me.
2026-05-20 07:54:38 +00:00
bab
2a600127f8
feat(linter/vue): implement require-render-return rule ( #22613 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/require-render-return.html
- 9ed6e4b290 : implement `require-render-return`.
- 12d3b43250 : extract `definitely_returns_in_all_codepaths` into shared
`utils/control_flow.rs`, and migrate `return-in-computed-property` to
use it.
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-05-20 08:53:51 +01:00
bab
9f227fdaf7
feat(linter/vue): implement no-deprecated-props-default-this rule ( #21892 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/no-deprecated-props-default-this.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-19 11:12:56 +01:00
camchenry
9cd28b36ba
feat(linter): add debug option to print files to be linted ( #22546 )
...
- supersedes https://github.com/oxc-project/oxc/pull/17233
- part of https://github.com/oxc-project/oxc/issues/19833
Adds a `--debug files` option to print all files that will be linted, for debugging purposes.
2026-05-19 01:31:11 +00:00
bab
87f065ebf7
feat(linter/vue): implement return-in-emits-validator rule ( #21935 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/return-in-emits-validator.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 19:21:59 +01:00
Hao Chen
ea0380c189
feat(linter/unicorn): implement import-style rule ( #22173 )
...
part of #684
---------
Co-authored-by: Cam McHenry <camchenry@users.noreply.github.com >
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 18:54:38 +01:00
bab
dde40fe432
feat(linter/vue): implement no-watch-after-await rule ( #22006 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/no-watch-after-await.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 18:34:34 +01:00
bab
a735eb01cb
feat(linter/vue): implement valid-next-tick rule ( #22531 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/valid-next-tick.html
Vue 2 forms (`new Vue({...})` and `Vue.extend({...})`) are also detected
via a local helper in this rule. The shared
`utils::is_vue_component_options_object` does not cover them yet — can
submit a follow-up PR to consolidate.
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 18:09:46 +01:00
bab
6dc615d0ef
feat(linter/vue): implement no-shared-component-data rule ( #21842 )
...
Implements `vue/no-shared-component-data` (vue3-essential +
vue2-essential).
AI disclosure: implemented with Claude Code, reviewed manually.
Part of #11440 (eslint-plugin-vue rules).
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 17:56:51 +01:00
bab
a656418109
feat(linter/vue): implement valid-define-options rule ( #22107 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/valid-define-options.html
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 17:39:52 +01:00
bab
bb6f1b23dd
feat(linter/vue): implement require-slots-as-functions rule ( #22244 )
...
related https://github.com/oxc-project/oxc/issues/11440
upstream: https://eslint.vuejs.org/rules/require-slots-as-functions.html
same detection pattern as `no-deprecated-events-api`. `is_this_alias` is
a local copy of `is_this` from `no_deprecated_events_api.rs` — can
submit a follow-up PR to consolidate if needed.
AI disclosure: implemented with Claude Code, reviewed manually.
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 17:33:27 +01:00
Mikhail Baev
5fa47746a3
feat(linter/n): implement callback-return rule ( #22470 )
...
this PR implements `callback-return` rule, passes all upstream tests.
issue #493
there is an issue with config doc generation for array with default
values. Ill fix it a little later and then move the PR out of draft.
---------
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-05-18 15:54:28 +01:00