Commit Graph

2615 Commits

Author SHA1 Message Date
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)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@oxc-project%2ftypes/0.134.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@oxc-project%2ftypes/0.134.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@oxc-project%2ftypes/0.133.0/0.134.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@oxc-project%2ftypes/0.133.0/0.134.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.133.0` →
`^0.134.0`](https://renovatebot.com/diffs/npm/oxc-parser/0.133.0/0.134.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/oxc-parser/0.134.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxc-parser/0.134.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxc-parser/0.133.0/0.134.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxc-parser/0.133.0/0.134.0?slim=true)
|

---

### 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) |
![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.7.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.7.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.6.2/3.7.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.6.2/3.7.0?slim=true)
|

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (@&#8203;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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@oxc-project%2ftypes/0.133.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@oxc-project%2ftypes/0.133.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@oxc-project%2ftypes/0.132.0/0.133.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@oxc-project%2ftypes/0.132.0/0.133.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.132.0` → `^0.133.0`](https://renovatebot.com/diffs/npm/oxc-parser/0.132.0/0.133.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/oxc-parser/0.133.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxc-parser/0.133.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxc-parser/0.132.0/0.133.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxc-parser/0.132.0/0.133.0?slim=true) |

---

### 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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.59.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.59.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.59.3/8.59.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.59.3/8.59.4?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.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.59.3/8.59.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.59.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.59.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.59.3/8.59.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.59.3/8.59.4?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.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.59.3/8.59.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.59.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.59.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.59.3/8.59.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.59.3/8.59.4?slim=true) |
| [@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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.1.7?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.1.7?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.1.6/4.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.1.6/4.1.7?slim=true) |
| [@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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.1.7?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.1.7?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.1.6/4.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.1.6/4.1.7?slim=true) |
| [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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/10.4.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/10.4.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/10.3.0/10.4.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/10.3.0/10.4.0?slim=true) |
| [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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/svelte/5.55.9?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/svelte/5.55.9?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/svelte/5.55.7/5.55.9?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/svelte/5.55.7/5.55.9?slim=true) |
| [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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/tsx/4.22.3?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tsx/4.22.3?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tsx/4.22.0/4.22.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tsx/4.22.0/4.22.3?slim=true) |
| [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) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.7?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.1.7?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.1.6/4.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.6/4.1.7?slim=true) |

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;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 (@&#8203;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 (@&#8203;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 (@&#8203;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 [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;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 ([#&#8203;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 ([#&#8203;18243](https://redirect.github.com/sveltejs/svelte/pull/18243))

- fix: deduplicate dependencies that are added outside the init/update cycle ([#&#8203;18243](https://redirect.github.com/sveltejs/svelte/pull/18243))

- fix: avoid false-positive batch invariant error ([#&#8203;18246](https://redirect.github.com/sveltejs/svelte/pull/18246))

- fix: inline primitive constants in attribute values during SSR ([#&#8203;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 ([#&#8203;18234](https://redirect.github.com/sveltejs/svelte/pull/18234))

- fix: execute uninitialized derived even if it's destroyed ([#&#8203;18228](https://redirect.github.com/sveltejs/svelte/pull/18228))

- fix: use named symbols everywhere ([#&#8203;18238](https://redirect.github.com/sveltejs/svelte/pull/18238))

- fix: don't run teardown effects when deriveds are unfreezed ([#&#8203;18227](https://redirect.github.com/sveltejs/svelte/pull/18227))

- fix: unset context synchronously in `run` ([#&#8203;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