oxc-guard
b4da00b621
release(apps): oxlint v1.82.0 && oxfmt v0.67.0 ( #26384 )
...
# Oxlint
### 🚀 Features
- 6a0e19c linter/eslint/no-unmodified-loop-condition: Support `checkConditionalExpressions` option (#26249 ) (camc314)
### 🐛 Bug Fixes
- 562dd14 jsx-a11y/anchor-has-content: Allow anchors passed as custom component props (#26360 ) (Mikhail Baev)
- 253cdb2 linter/eslint/id-length: Exempt TS interface/type-literal members with never (#26310 ) (Pearce Ropion)
- 8c7ea76 ast_visit: Account for trimmed source offsets (#26223 ) (Cameron)
- 5f9cffc linter/typescript/no-explicit-any: Fix rest parameter to `unknown[]` (#26279 ) (camc314)
- 4de9fa3 linter/react/jsx-no-literals: Check nested JSX expression literals (#26253 ) (camc314)
- 07851b9 parser: Fix debug assert failure when lexer error with tokens enabled (#26229 ) (overlookmotel)
- 9cee146 oxlint/lsp: Don't try to parse fix message, always fallback (#26204 ) (Sysix)
- a662c40 linter/eslint/no-useless-assignment: Handle destructuring assignments (#25925 ) (camc314)
- 304bd9a linter/eslint/no-array-constructor: Handle ASI hazards in fixer (#26166 ) (Hamody We)
- b41bb35 linter: Qualify rules in rules output (#26250 ) (camc314)
- 895c685 linter/typescript/no-extraneous-class: Avoid deleting class expressions (#26231 ) (camc314)
- 4ba33c8 linter/eslint/no-unused-vars: Handle stored arrow references (#26225 ) (camc314)
### 🛡️ Security
- 9a612d5 deps: Update npm packages (#26178 ) (renovate[bot])
# Oxfmt
### 💥 BREAKING CHANGES
- 2c9a947 parser: [**BREAKING**] Reduce `MAX_LEN` to 256 bytes below `u32::MAX` (#26352 ) (overlookmotel)
### 🚀 Features
- 68e12ab formatter_css: Follow the oxc-css-parser's acceptance line (#26337 ) (leaysgur)
### 🐛 Bug Fixes
- f7acdc0 formatter: Treat a JSDoc cast target as opaque in chain layouts (#26375 ) (leaysgur)
- 104061b formatter: Keep JSDoc cast parens with a comment inside them (#26374 ) (leaysgur)
- 3d00a76 formatter_css: Keep comment inside important and simple-vars colon (#26370 ) (leaysgur)
- 172ddb6 formatter_css: Keep a same-line line comment on its line (#26321 ) (leaysgur)
- cafaf32 formatter_css: Never drop comments inside an at-rule prelude (#26320 ) (leaysgur)
- 534a0fe formatter_css: Keep a line comment on its comma's line (#26319 ) (leaysgur)
- 99cfd75 formatter_css: Hide raw comment printing API, use strcut instead (#26316 ) (leaysgur)
- 2028896 formatter_css: Preserve comments around SCSS/Less variable values (#26276 ) (leaysgur)
- 6752abc formatter_css: Keep leading comments before (#26272 ) (leaysgur)
- 3b054de formatter_graphql: Align comment printing after open `{` (#26271 ) (leaysgur)
- b3c287a formatter_css: Fix SCSS bracket list printing (#26270 ) (leaysgur)
- bac770a formatter_css: Preserve comment in SCSS paren comma list (#26269 ) (leaysgur)
- c7b57ef formatter_css: Print SCSS map consisntent with and without comment (#26268 ) (leaysgur)
- 063e2b6 formatter_css: Preserve trailing comma in single-item scss lists (#26245 ) (leaysgur)
- 5f9580d oxfmt: Bump prettier-plugin-tailwindcss (#26273 ) (leaysgur)
### ⚡ Performance
- 1cad286 oxfmt: Match editorconfig once per file (#26239 ) (Yuji Sugiura)
- 260c5eb oxfmt: Match `overrides` once per file (#26238 ) (leaysgur)
- 61565bc oxfmt: Share resolved `FormatConfig` via `Arc` instead of cloning per file (#26237 ) (leaysgur)
### 📚 Documentation
- 32084d4 formatter_core: Clarify printer hard_line compression (#26312 ) (leaysgur)
- 4fabdcc formatter,formatter_css,formatter_graphql,formatter_yaml: Update DIVERGENCES.md (#26267 ) (leaysgur)
- 26a1fa4 formatter_core: Refine FORMATTER_POLICY (#26266 ) (leaysgur)
### 🛡️ Security
- 9a612d5 deps: Update npm packages (#26178 ) (renovate[bot])
2026-09-07 14:13:57 +00:00
renovate[bot]
8dd81f9bb8
chore(deps): update dependency @napi-rs/cli to v3.9.0 ( #26256 )
...
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.8.6` →
`3.9.0`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.8.6/3.9.0 ) |

|

|

|

|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the warning logs for
more information.
---
### Release Notes
<details>
<summary>napi-rs/napi-rs (@​napi-rs/cli)</summary>
###
[`v3.9.0`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.6...@napi-rs/cli@3.9.0 )
[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.6...@napi-rs/cli@3.9.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:eyJjcmVhdGVkSW5WZXIiOiI0NC41Ny4zIiwidXBkYXRlZEluVmVyIjoiNDQuNjEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-09-04 14:22:16 +00:00
oxc-guard
0b4e2e67f4
release(apps): oxlint v1.81.0 && oxfmt v0.66.0 ( #26199 )
...
# Oxlint
### 🚀 Features
- 60b945d linter/nextjs/no-typos: Implement suggestion (#26091 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 33ac4b0 linter/lsp: Prevent tsgolint from holding onto processes (#25570 ) (Adrian Schaedle)
- baf4b1e linter/import/no-empty-named-blocks: Make empty value import removal a suggestion (#26155 ) (camc314)
- 77cfaec linter/eslint/object-shorthand: Preserve `__proto__` semantics (#26154 ) (camc314)
- fa3c082 linter/unicorn/prefer-set-size: Ignore shadowed `Set` constructors (#26153 ) (camc314)
- e412cf2 linter: Clamp invalid JS plugin locations (#26144 ) (camc314)
- d86c113 linter: Normalize reversed JS plugin locations (#26138 ) (camc314)
- 73c09b2 linter/eslint/no-use-before-define: Run on JS, JSX files (#26114 ) (camc314)
- 03ef0f2 linter/unicorn/no-useless-spread: Treat typed arrays as a distinct value hint (#26067 ) (Aadharsh Pannirselvam)
- bd15905 linter/react/no-unstable-nested-components: Check nested component object property names (#26101 ) (camc314)
- 3910e2b linter/eslint/no-unassigned-vars: Skip Svelte and Vue files (#26042 ) (Hamody We)
- 047f7ca linter/plugins: Fix interaction between JS plugins and Vue rules (#26080 ) (overlookmotel)
- 8531b9b linter/plugins: Alter method for obtaining mutable `Program` when sending AST to JS plugins (#26077 ) (overlookmotel)
- dc464ff linter/unicorn/prefer-math-min-max: Avoid unsafe autofix (#26060 ) (camc314)
### 📚 Documentation
- 464ddd1 linter: Support a shared short description for jest/vitest rules (#26186 ) (connorshea)
- 9db5ad3 linter: Add short description to `vue/no-dupe-keys` (#26183 ) (connorshea)
- db66f58 linter: Correct export/import mismatch in bar and foo example (#25927 ) (billychannnnnn)
- d5be037 linter/typescript/switch-exhaustiveness-check: Clarify default case comment pattern (#26100 ) (camc314)
# Oxfmt
### 🚀 Features
- 1fb37b6 formatter/css: Format declaration-shaped raw-prelude rules (postcss nested config blocks) (#26194 ) (leaysgur)
### 🐛 Bug Fixes
- 57e8e22 formatter_css: Space a folded sign after a call in Less operations (#26134 ) (leaysgur)
- e4298fb formatter/jsdoc: Follow CommonMark for interrupting lists and guard wrapping from creating them (#26098 ) (leaysgur)
- a1e21c2 formatter: Apply head body policy everywhere (#26074 ) (leaysgur)
- 676b7e1 formatter: Keep comments in their for-head slot, before an empty-statement body and do-while (#26073 ) (leaysgur)
- 3bbcea6 formatter: Keep comments between a head and its body out of the braces across all constructs (#26071 ) (leaysgur)
- 57537a2 formatter: Place comments between a head and open paren (#26058 ) (leaysgur)
- e2d53e7 formatter: Place comments between a statement head and its body (#26043 ) (leaysgur)
- 662556c formatter: Print the idempotent placement for comments in dropped parens (#26041 ) (leaysgur)
- faf11d9 formatter_yaml: Keep trailing whitespace in block scalars (#26072 ) (leaysgur)
### ⚡ Performance
- ac4785a diagnostics: Use fixed ANSI styles (#26130 ) (Boshen)
### 📚 Documentation
- b879608 formatter,formatter_graphql,formatter_yaml: Annotate own-line comment inlining as known policy violation (#26131 ) (leaysgur)
- 181953b oxfmt,formatter_core,formatter,formatter_yaml,formatter_css,formatter_graphql: Extract `DIVERGENCES.md` out from `AGENTS.md` (#26121 ) (leaysgur)
- a67cb9d formatter,formatter_core: Document comment moving policy (#26075 ) (leaysgur)
- fc175b0 formatter_core: Clarify idempotency test infra (#26069 ) (leaysgur)
2026-09-01 08:25:16 +00:00
leaysgur
5ff57f83c0
fix(formatter/sort-imports): handle custom side effect groups ( #26217 )
...
Fixes #26165
- `side_effect` is predefined selector, it cannot be used as custom group name
- respect custom group which uses `side_effect` as side-effect-import correctly
- fix metadata detection bug
2026-09-01 03:56:36 +00:00
oxc-guard
97e99b8548
release(apps): oxlint v1.80.0 && oxfmt v0.65.0 ( #26045 )
...
# Oxlint
### 🚀 Features
- 70c3e35 linter/typescript/no-confusing-non-null-assertion: Implement suggestion (#26012 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 8a353a7 linter/eslint/no-control-regex: Refine help message text (#25996 ) (Rahul Mishra)
- 8a9bdbd estree: Include decorators in `FormalParameterRest ` spans (#26021 ) (camc314)
- 8d94cd1 linter/eslint/no-useless-rename: Preserve type modifiers (#26020 ) (Cameron)
- 2cde1f6 rust: Address nightly deprecations (#25998 ) (Boshen)
- 51d36d7 linter/vue: Resolve `vue` imports via shared import helpers (#25903 ) (Connor Shea)
- 83a68d2 linter/react/no-react-children: Resolve `react` imports by symbol (#25901 ) (Connor Shea)
- 124e196 linter: Resolve globals by reference, not by name (#25905 ) (Connor Shea)
- a701bcc linter: Remove invalid React compiler doc links (#25900 ) (Boshen)
### 📚 Documentation
- 9b7e153 linter: Set `version` to 1.79.0 for rules shipped in 1.79.0 (#25902 ) (connorshea)
# Oxfmt
### 🐛 Bug Fixes
- bf37dd5 formatter: Preserve class decorators before export when the statement is suppressed (#26034 ) (leaysgur)
2026-08-24 11:33:15 +00:00
Boshen
1193c9dbaf
chore(oxfmt): dogfood operator position at line start ( #25937 )
...
dogfood
2026-08-20 14:36:47 +00:00
oxc-guard[bot]
0db127cc16
release(apps): oxlint v1.79.0 && oxfmt v0.64.0 ( #25866 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 8c4552d linter: [**BREAKING**] Split react/react-compiler into
per-category rules (#25500 ) (Boshen)
### 🚀 Features
- 9b7394e linter/typescript/no-empty-object-type: Implement suggestion
(#25833 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 345f981 react_compiler: Skip node_modules by default (#25859 ) (Boshen)
- 2f40afa linter/unicorn/no-array-callback-reference: Ignore effect
library imports (#25857 ) (Michaël Bitard)
- 7b565a0 linter: Align React Compiler rule categories (#25840 ) (Boshen)
- 228e8e0 linter: Resolve inactive React compiler rules (#25830 )
(Boshen)
- f8e4884 linter/eslint/no-useless-constructor: Allow parameter
properties (#25811 ) (camc314)
- e4b6993 linter: Report exhaustive effect dependencies (#25829 )
(Boshen)
- 742e25f linter/eslint/no-return-assign: Anchor diagnostic on return
stmt (#25803 ) (camc314)
- b831ca8 react-compiler: Improve derived state diagnostic (#25804 )
(Boshen)
- 5908c87 linter/jest/prefer-mock-return-shorthand: Preserve
implementations using this (#25802 ) (camc314)
- f6b2265 linter/eslint/no-redeclare: Run in ES modules, skipping only
the globals check (#25691 ) (Hamody We)
- ca9f553 linter/unicorn/prefer-default-parameters: Mark fixer as a
suggestion (#25801 ) (camc314)
- aa49d86 linter: Allow spread rule options in config types (#25675 )
(ch3rry)
- d5483f8 linter/typescript/no-useless-empty-export: Skip TS declaration
files (#25789 ) (Evyatar Daud)
- 57f2199 linter/typescript/no-useless-empty-export: Report after
imports (#25786 ) (camc314)
- 633bc19 linter/typescript/no-unnecessary-type-conversion: Mark fixer
as `suggestion` (#25787 ) (camc314)
- dea3339 linter/typescript/explicit-module-boundary-types: Anchor
diagnostics on arrows (#25779 ) (camc314)
- 5cd6f02 linter/eslint/array-callback-return: Anchor diagnostic on
callback (#25780 ) (camc314)
- ef8cebf linter/eslint/preserve-caught-error: Handle AggregateError
options (#25775 ) (camc314)
- c108d5c linter: Improve React Compiler diagnostics (#25742 ) (Boshen)
- c9ec55e react-compiler: Improve diagnostic spans (#25731 ) (Boshen)
- 1cbbcb7 linter/unicorn/prefer-string-replace-all: Apply fixes in one
pass (#25709 ) (Mikhail Baev)
- dec0a86 react-compiler: Standardize diagnostics (#25702 ) (Boshen)
- 5fd77f7 linter/react/display-name: Report curried HOC inner component
(#25662 ) (camc314)
- 4dbb80e linter/import/no-named-as-default: Report local export
conflicts (#25658 ) (camc314)
- e8a7214 linter/react/rules-of-hooks: Report hooks inside try blocks
(#25670 ) (camc314)
- 36f8451 linter/eslint/no-eval: Align indirect default with ESLint
(#25656 ) (camc314)
- d901d24 linter/react/exhaustive-deps: Handle destructured object
dependencies (#25669 ) (camc314)
- beb724d linter/eslint/no-unused-vars: Report bare underscore
parameters (#25663 ) (camc314)
- fa36f26 linter/react/no-this-in-sfc: Detect this in nested arrow
callbacks (#25653 ) (camc314)
- 44d1be3 linter/typescript/no-var-requires: Run rule on JavaScript
(#25664 ) (camc314)
- 4004c10 linter/eslint/no-irregular-whitespace: Check comments by
default (#25660 ) (camc314)
- 625401d linter/import/no-named-default: Flag type-only named defaults
(#25661 ) (camc314)
- 8eacb2d linter/typescript/no-non-null-asserted-optional-chain: Detect
assertions after continued optional chains (#25659 ) (camc314)
- d55b76c linter/react/no-direct-mutation-state: Detect computed state
mutations (#25654 ) (camc314)
- f92c651 linter/unicorn/no-abusive-eslint-disable: Use directive prefix
in diagnostic (#25657 ) (camc314)
- ee44996 linter/eslint/max-classes-per-file: Anchor diagnostic at
program start (#25652 ) (camc314)
- 403ec40 linter/eslint/no-multi-assign: Handle parenthesized declarator
initializers (#25651 ) (camc314)
- 6c9ba37 linter/jest/expect-expect: Detect assertions in nested
function declarations (#25650 ) (camc314)
- 285820e linter/no-large-snapshots: Precompile and document allowed
snapshot matchers (#25611 ) (Mikhail Baev)
- 1be1e20 linter/eslint/prefer-promise-reject-errors: Report on spread
arguments (#25648 ) (Mikhail Baev)
- a38f7b3 oxlint,oxfmt: Apply .gitignore only to walk targets, not
explicitly named files (#25531 ) (leaysgur)
- 509931b semantic: Classify global references per identifier (#25608 )
(camc314)
- 0c68b7f estree: Emit `decorators` on `FormalParameterRest` (#25582 )
(camc314)
- 1d22912 linter/plugins: Parse rule-less directive justifications
(#25559 ) (camc314)
- eaf80d8 linter/unicorn/prefer-node-protocol: Validate exact Node.js
built-in specifiers (#25558 ) (camc314)
- 57b94af linter/promise/no-multiple-resolved: Ignore unresolved globals
(#25530 ) (Tushar Singh)
- 80e64c2 linter/expect-expect: Validate assertion regex (#25504 )
(Mikhail Baev)
- 7830604 linter/react/exhaustive-deps: Treat binary expressions as a
stable dependency (#25508 ) (Hamody We)
- 4df5835 linter: Allow capitalized built-in calls (#25516 ) (Boshen)
- 9d49d27 react_compiler: Bail out instead of panicking on "Expected a
node for all scopes" (#25506 ) (Boshen)
- d43b562 linter/vitest/prefer-expect-assertions: Handle parameterized
Vitest assertion suggestions (#25476 ) (camc314)
### ⚡ Performance
- e8303d6 linter: Shrink rule serialization dispatch (#25818 ) (Boshen)
- c84ede3 estree_tokens: Share JS token update entry point (#25826 )
(Boshen)
- 35c8eb2 linter: Compute sort keys once with sort_by_cached_key
(#25821 ) (Boshen)
- f0121ed linter: Share config deserialization entry point (#25820 )
(Boshen)
- 2dacf7a oxlint: Reduce debug formatting code size (#25797 ) (Boshen)
- 9ed10b7 linter: Use unstable sorts for unique keys (#25778 ) (Boshen)
- 63ff8ef linter: Outline diagnostic construction (#25762 ) (Boshen)
- 2dd7446 diagnostics: Preallocate graphical output (#25721 ) (Boshen)
- 9c8abab diagnostics: Batch graphical reports (#25710 ) (Boshen)
- 8e9b95f linter: Use table for rule names (#25458 ) (Boshen)
# Oxfmt
### 🚀 Features
- c07fe7c oxfmt: Support `experimentalOperatorPosition` (#25643 )
(leaysgur)
- 2adb8fb formatter: Implement `operatorPosition` option (#25581 )
(leaysgur)
### 🐛 Bug Fixes
- 44231fb formatter: Fix comment and indent issues around unions
(#25665 ) (leaysgur)
- 2465e87 formatter: Keep comments in place when dropping
`EmptyStatement` (#25730 ) (leaysgur)
- 7e4f3b7 formatter: Print `JSDocUnknownType` (#25729 ) (leaysgur)
- 5238d9e formatter: Keep nested awaited-paren member chain grouped in
call arguments (#25646 ) (leaysgur)
- a38f7b3 oxlint,oxfmt: Apply .gitignore only to walk targets, not
explicitly named files (#25531 ) (leaysgur)
- 5c0a5ff formatter_css: Fill own-line block comments inside
space-separated values (#25578 ) (leaysgur)
- 53debfa formatter_css: Keep trailing comma and indent after
comment-preceded last map value (#25577 ) (leaysgur)
- 1a83a8d oxfmt: Mirror printer line suppression and restore
dedent-to-root (#25573 ) (leaysgur)
- 7f350d1 formatter: Keep unary comment and print only needed parens
(#25526 ) (leaysgur)
- f405789 formatter_yaml: Consistent chomped eos behavior (#25523 )
(leaysgur)
- a243311 formatter_yaml: Bump oxc-yaml-parser for contentless block
scalar (#25519 ) (leaysgur)
- 40d38a0 formatter_css: Keep multi value function args intact after
leading comment (#25518 ) (leaysgur)
### 📚 Documentation
- 223e785 oxfmt/conformance: Update notes on conformance (#25757 ) (Yuji
Sugiura)
- 673dc6d oxfmt: Move some docs from AGENTS.md to code comment (#25649 )
(leaysgur)
- fed6681 oxfmt: Skip expanding overrides options (#25572 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-08-18 22:27:08 +08:00
leaysgur
c07fe7c217
feat(oxfmt): support experimentalOperatorPosition ( #25643 )
...
Fixes #16366
---
Option name requires `experimental` prefix for now.
Values are:
- `"start"`
- `"end"`(default)
This is also available on playground.
2026-08-14 08:12:16 +00:00
leaysgur
1a83a8ddb2
fix(oxfmt): mirror printer line suppression and restore dedent-to-root ( #25573 )
...
Fixes #25568 , #25569
2026-08-13 03:50:19 +00:00
leaysgur
fed6681eda
docs(oxfmt): skip expanding overrides options ( #25572 )
...
Follow up on #25544 .
Oxlint also omits `overrides[].rules`.
2026-08-13 02:35:53 +00:00
oxc-guard
c42d6397ea
release(apps): oxlint v1.78.0 && oxfmt v0.63.0 ( #25473 )
...
# Oxlint
### 💥 BREAKING CHANGES
- a33788e ast: [**BREAKING**] Group class heritage into `ClassHeritage` (#25360 ) (camc314)
- 5c5cdcd ast: [**BREAKING**] Narrow `TSInterfaceHeritage::expression` to TSTypeName (#24360 ) (camc314)
- 6be314f ast: [**BREAKING**] Remove duplicated `VariableDeclarator::kind` (#25319 ) (camc314)
- 44fd320 ast: [**BREAKING**] Split TS external modules & Namespace Declarations (#25284 ) (camc314)
### 🚀 Features
- ccb8fe8 linter/jsdoc: Implement `no-blank-blocks` rule (#25207 ) (Mikhail Baev)
- d4a897c linter/eslint: Implement `one-var` rule (#24470 ) (Cole Ellison)
- 5ab9340 linter/jsx-a11y/anchor-has-content: Add options to match eslint (#24571 ) (Cole Ellison)
### 🐛 Bug Fixes
- b746e00 linter/eslint/no-implicit-coercion: Preserve template coercion whitespace (#25470 ) (camc314)
- a92c541 linter: Preserve source text for JS plugin ignore fixes (#25280 ) (Norcleeh)
- 675c840 linter/eslint/prefer-promise-reject-errors: Handle parenthesized calls (#25378 ) (camc314)
- 1703739 linter/unicorn/new-for-builtins: Ignore optional chains (#25411 ) (tanakalucky)
- 95ece63 linter/unicorn/prefer-code-point: Downgrade the auto-fix to dangerous (#25412 ) (leemr)
- c451a0e linter/vitest: Validate `consistent-test-filename` regex patterns (#25408 ) (Mikhail Baev)
- 937825c react_compiler: Disable exhaustive memo validation by default (#25417 ) (Boshen)
- f0f7dae linter/eslint/no-unused-vars: Report invalid regex options (#25380 ) (Cameron)
- 44e73fd linter/unicorn/prefer-array-flat: Fix `concat.apply` suggestions (#25373 ) (Cameron)
- 6846a9a linter/react/rules-of-hooks: Detect constructor callbacks (#25377 ) (camc314)
- b247a9d linter/unicorn/new-for-builtins: Support `Float16Array` (#25382 ) (tanakalucky)
- 19109cd linter/unicorn/error-message: Support `SuppressedError` messages (#25375 ) (camc314)
- 9c13f5e linter: Assert token lookup invariants (#25368 ) (camc314)
- bc35f83 linter/eslint/no-unused-vars: Bound catch parameter lookup (#25367 ) (camc314)
- c159fb9 linter/unicorn/switch-case-braces: Bound token lookup (#25363 ) (camc314)
- 03b2eb2 linter/unicorn/no-static-only-class: Bound token lookup (#25361 ) (camc314)
- 0afc59e linter/unicorn/empty-brace-spaces: Bound token lookup (#25353 ) (camc314)
- 2963d98 linter/eslint/no-unreachable-loop: Do not report loops whose body has a finally block (#25335 ) (Todor Andonov)
- 589e5fb linter/eslint/no-param-reassign: Validate `ignorePropertyModificationsForRegex` property (#25346 ) (Mikhail Baev)
- aae5d8b linter/eslint/no-throw-literal: False positive on variable declared without initializer (#25275 ) (cjnoname)
- 6b1c479 oxlint: Normalize customized rule names (#25316 ) (camc314)
- d494eb5 linter/unicorn/consistent-existence-index-check: Bound token lookup (#25325 ) (camc314)
- 4266037 linter/typescript/prefer-namespace-keyword: Bound token lookup (#25322 ) (camc314)
- 4745b4e linter/typescript/no-namespace: Bound token lookup (#25321 ) (camc314)
- 648a481 linter/eslint/one-var: Avoid joining exported declarations (#25314 ) (camc314)
- 9573937 linter/typescript: Validate `ban-ts-comment` description_format (#25320 ) (Mikhail Baev)
- ebf7d18 linter/typescript/consistent-type-definitions: Bound token lookup (#25281 ) (camc314)
- 1501ccf linter/typescript/consistent-generic-constructors: Bound token lookup (#25258 ) (camc314)
### ⚡ Performance
- 8f784f3 linter: Reduce rule config dispatch size (#25461 ) (Boshen)
- 2de4ec2 linter: Reduce visitor code size (#25441 ) (Boshen)
- 6fb7f47 linter/unicorn/prefer-export-from: Narrow `ExportFromDeclaration` lookup (#25381 ) (camc314)
- e3f6263 linter/unicorn/prefer-default-parameters: Avoid reference allocation (#25379 ) (camc314)
- d863473 linter/vue/max-props: Narrow AST dispatch (#25372 ) (camc314)
- 273d867 linter: Avoid diagnostic sorting after applying fixes (#25079 ) (Sysix)
- 4ec9189 oxlint/lsp: Avoid second lock for getting/removing unused directives (#25350 ) (Sysix)
- 6c0d01b oxlint/lsp: Preallocate fix-content vec (#25351 ) (Sysix)
- 3a94055 linter: Avoid per-call heap allocations in jest and unicorn helpers (#25210 ) (Connor Shea)
- 4abff11 linter: Avoid redundant message work in the agent reporter (#25315 ) (Connor Shea)
- 6bb5421 linter: Hoist `current_dir` out of the stylish reporter loop (#25313 ) (Connor Shea)
- 9a7c323 linter: Compute diagnostic `Info` once per diagnostic in junit reporter (#25312 ) (Connor Shea)
- 1cf7dde oxlint: Render JSON report into a single buffer (#25295 ) (connorshea)
- 8492cfd linter/typescript/ban-ts-comment: Bail early with substring guard (#25301 ) (Jacob Asper)
- 7607f04 linter/typescript/ban-tslint-comment: Replace regex with manual parser (#25299 ) (Jacob Asper)
# Oxfmt
### 💥 BREAKING CHANGES
- a33788e ast: [**BREAKING**] Group class heritage into `ClassHeritage` (#25360 ) (camc314)
- 5c5cdcd ast: [**BREAKING**] Narrow `TSInterfaceHeritage::expression` to TSTypeName (#24360 ) (camc314)
- 6be314f ast: [**BREAKING**] Remove duplicated `VariableDeclarator::kind` (#25319 ) (camc314)
- 44fd320 ast: [**BREAKING**] Split TS external modules & Namespace Declarations (#25284 ) (camc314)
### 🚀 Features
- fd02a89 oxfmt: Dispatch yaml-in-css(frontmatter) to `oxc_formatter_yaml` (#25336 ) (leaysgur)
- ab12665 formatter_core: Add `hardlineWithoutBreakParent` equivalent IR (#25273 ) (leaysgur)
### 🐛 Bug Fixes
- 95dc917 oxfmt: Drop IR Space at line start for js-in-xxx (#25460 ) (leaysgur)
- b63eccc formatter: Keep comments after TS this_param (#25459 ) (leaysgur)
- ab52a59 formatter: Format xxx-in-js inside JSDoc js fence (#25414 ) (leaysgur)
- 1a2c64a formatter,oxfmt: Apply effective print width for JSDoc fence (#25413 ) (leaysgur)
- 2eaede9 formatter_core: Unify leading-BOM handlings (#25340 ) (leaysgur)
- ef1d04b formatter: Break mapped type brackets (#25297 ) (leaysgur)
- 4e6f3f1 formatter: Break index signature brackets (#25296 ) (leaysgur)
- e23dccf formatter_css: Bump oxc-css-parser to accept unknown at-rule with interpolated (#25277 ) (leaysgur)
- c29b587 formatter_core: Measure decided-flat fill separator as flat during group re-measure (#25276 ) (leaysgur)
- f3c6953 formatter_yaml: Don't rewrite overflowing key to implicit (#25274 ) (leaysgur)
### ⚡ Performance
- c9d1a5b oxfmt: Spawn tinypool lazily (#25298 ) (leaysgur)
### 📚 Documentation
- 6eae5c9 formatter,oxfmt: Record embed-layer decisions in place (#25422 ) (leaysgur)
- 51224a7 formatter_yaml: Pin EOF blank lines divergence (#25269 ) (leaysgur)
2026-08-10 10:03:34 +00:00
leaysgur
033ddf6d38
refactor(oxfmt,formatter): simplify js-in-html-in-js handling ( #25464 )
...
Prettier uses the `conditionalGroup` IR for JS and YAML.
When this appeared in JS(containing `conditionalGroup`)-in-HTML(`script` tags)-in-JS (`oxc_formatter`), we previously bypassed the `Doc` to IR conversion.
This PR adds support for this conversion and removes the string format fallback path.
2026-08-10 06:02:17 +00:00
leaysgur
00f490d7f7
refactor(oxfmt,formatter): split sortImports validation and use type enum ( #25432 )
...
Reduce runtime validation.
Also, by using type `enum`, IDE and TS types are also covered.
2026-08-09 15:07:41 +00:00
leaysgur
a26f856402
refactor(oxfmt): rename external_formatter to external_services ( #25429 )
...
`ExternalFormatter` is merely a transport that calls the JS side via napi; it is not referred to as a formatter.
2026-08-09 15:07:40 +00:00
leaysgur
8213e72f37
refactor(formatter,oxfmt): flatten embedded dispatch contract ( #25391 )
...
Due to historical reasons, the IR was passed as `[Doc, (Doc, ...Doc)]` only when processing `gql-in-js`, whilst for other cases such as `css-in-js` and `html-in-js`, it was always `[Doc]`.
Now, every result is single `Doc`.
2026-08-09 14:32:11 +00:00
leaysgur
c9d1a5b603
perf(oxfmt): spawn tinypool lazily ( #25298 )
...
Partially fixes #25196
- Before: create `child_process` worker pool on startup
- Spawned even when nothing needs JS side delegation (e.g. JS/TS-only projects)
- For LSP, the idle workers stayed resident for the whole session
- After: create the pool on the first format that actually delegates to JS side
- Runs that never reach JS side spawn zero workers
- As more formatters are rewritten in Rust, the share of such runs keeps growing
Trade-off: the first JS-delegated format in an LSP session now pays the spawn cost.
But that is what every one-shot CLI run already pays, so it is far from slow, and subsequent formats are unchanged.
2026-08-05 04:25:24 +00:00
oxc-guard
9a423f2f48
release(apps): oxlint v1.77.0 && oxfmt v0.62.0 ( #25251 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 4120da0 semantic: [**BREAKING**] Return borrowed JSDoc so the parse cache works (#25186 ) (Connor Shea)
- 067da8c ast: [**BREAKING**] Store single parameter in `TSIndexSignature::parameter` (#25154 ) (camc314)
- 1bdedd1 ast: [**BREAKING**] Introduce `ExportDeclaration`, `ExportFromDeclaration` (#25095 ) (camc314)
- c917f20 ast: [**BREAKING**] Introduce `ArrowFunctionBody` enum (#24987 ) (camc314)
### 🚀 Features
- 0b9f83c linter/oxc/bad-char-at-comparison: Expand coverage (#25001 ) (Mikhail Baev)
- 1fb3d70 oxlint: Show file:line:col in github format annotation messages (#25020 ) (Faris Tristan Fabian)
### 🐛 Bug Fixes
- 9d4592c linter: Reject duplicate JS plugin names (#25243 ) (camc314)
- 3213e7a linter: Ignore unsigned shifts in prefer-math-trunc (#25240 ) (camc314)
- 06579da linter/eslint/prefer-promise-reject-errors: Handle ambient error variables (#25238 ) (camc314)
- 6a7cd90 linter/oxc/no-async-await: Bound token lookup (#25222 ) (camc314)
- d8e390a linter/oxc/bad-bitwise-operator: Bound token lookups (#25220 ) (camc314)
- 351a777 linter/import/no-duplicates: Bound token lookup (#25219 ) (camc314)
- 4f70fb6 linter/import/consistent-type-specifier-style: Bound token lookup (#25218 ) (camc314)
- b89113c linter/eslint/yoda: Bound token lookup (#25202 ) (camc314)
- 7c7cda7 linter/oxc/no-map-spread: Avoid recursive declaration traversal (#25200 ) (camc314)
- 99efb30 linter/eslint/prefer-promise-reject-errors: Move category to `pedantic` (#25201 ) (camc314)
- 8edad2a linter/eslint/require-await: Bound token lookup (#25199 ) (camc314)
- 5aaec85 linter/eslint/prefer-template: Bound token lookup (#25197 ) (camc314)
- 0ea1af4 linter/unicorn/new-for-builtins: Align Date() diagnostic message with upstream (#25166 ) (tanakalucky)
- f6c8575 linter/eslint/prefer-object-spread: Bound token lookup (#25195 ) (camc314)
- 20f68e7 oxlint,oxfmt: Respect `.gitignore` for walk targets and explicit paths (#25133 ) (leaysgur)
- b83993b linter/eslint/prefer-const: Bound token lookup (#25194 ) (camc314)
- aeabf63 linter/eslint/object-shorthand: Bound token lookups (#25193 ) (camc314)
- 48f302c linter/eslint/no-var: Bound token lookup (#25192 ) (camc314)
- 1f595de linter/eslint/no-unused-vars: Bound token lookups (#25191 ) (camc314)
- e52f4c4 linter/eslint/no-unexpected-multiline: Use bounded token lookup (#25190 ) (camc314)
- ca80338 linter/eslint/eqeqeq: Use bounded token lookup (#25189 ) (camc314)
- df91684 linter: Make the remaining token lookups comment-aware (#25182 ) (connorshea)
- 2401bb8 linter/eslint/prefer-const: Skip Svelte and Vue files (#25148 ) (Pitiș Radu)
- b870897 linter: Don't match tokens inside comments when locating spans (#25181 ) (connorshea)
- b474da1 linter/typescript/consistent-type-imports: Make token lookups comment-aware (#25180 ) (connorshea)
- 81f82db linter: Don't insert an ASI semicolon into an unbraced statement body (#25160 ) (Vladexy88x)
- 31333be linter/no-magic-array-flat-depth: Scan for `(` by byte offset instead of character count (#25130 ) (connorshea)
- 56e9c83 linter: Index source text by byte offset instead of char count (#25131 ) (connorshea)
- 5c0fa61 linter/eslint/no-warning-comments: Unify config structs and remove manual options docs (#25151 ) (Mikhail Baev)
- a922355 docs: Incorrect quotations in `role_supports_aria_props.rs` (#25077 ) (Maximilian Franzke)
- e8c4c05 linter/eslint/no-unreachable-loop: Handle caught errors correctly (#25071 ) (camc314)
- 2b02711 oxlint: Correct --warn flag help text (#25059 ) (Faris Tristan Fabian)
- 97f084f linter/eslint/no-control-regex: Allow null escape (#25070 ) (camc314)
### ⚡ Performance
- 224c21a linter/vue/no-side-effects-in-computed-properties: Borrow property names in the mutation walk (#25212 ) (connorshea)
- d36e9c9 linter/unicorn/prefer-export-from: Skip non-violating imports early (#25183 ) (connorshea)
- 6f2b933 linter/import/no-cycle: Drop two Vec allocations per graph edge (#25004 ) (Connor Shea)
- 79ddb18 linter/import/no-cycle: Skip the graph walk for acyclic modules (#25003 ) (Connor Shea)
### 📚 Documentation
- f8392cd linter/eslint/prefer-promise-reject-errors: Recommend type aware rule (#25241 ) (camc314)
- 9dc7756 linter/typescript/no-unnecessary-condition: Clarify options (#25110 ) (camc314)
# Oxfmt
### 💥 BREAKING CHANGES
- 067da8c ast: [**BREAKING**] Store single parameter in `TSIndexSignature::parameter` (#25154 ) (camc314)
- a0c7788 ast: [**BREAKING**] Change `TSIndexSignatureName::name` to `Ident` (#25150 ) (camc314)
- 1bdedd1 ast: [**BREAKING**] Introduce `ExportDeclaration`, `ExportFromDeclaration` (#25095 ) (camc314)
- c917f20 ast: [**BREAKING**] Introduce `ArrowFunctionBody` enum (#24987 ) (camc314)
- 0c16cb5 oxfmt: [**BREAKING**] Format parser:yaml files by oxc_formatter_yaml (#24890 ) (leaysgur)
### 🚀 Features
- 1b57f78 oxfmt: Support tsx-in-vue (#25063 ) (leaysgur)
- be7f6da oxfmt: Colorize diff file list in check mode (#25061 ) (leaysgur)
### 🐛 Bug Fixes
- 68146bd formatter_css: Preserve glued plugin words in grid values (#25225 ) (leaysgur)
- 20f68e7 oxlint,oxfmt: Respect `.gitignore` for walk targets and explicit paths (#25133 ) (leaysgur)
- a9e76e9 oxfmt: Rework tsx-in-vue support (#25106 ) (leaysgur)
- dd28596 formatter_css: Bump oxc-css-parser for substituted at-rule preludes (#25104 ) (leaysgur)
- ca1ba71 formatter: Hug arrows with type-reference return annotations (#25044 ) (Pitiș Radu)
- f56009a oxfmt: Correct prose about comment width in fits measurement (#25054 ) (leaysgur)
- 22fdda4 oxfmt/conformance: Fix typo (#25053 ) (leaysgur)
- ee344bd formatter_yaml: Break long keys off a block scalar header (#25014 ) (leaysgur)
- d5e3476 formatter_yaml: Let ancestor collection values claim end comments after block scalars (#24897 ) (leaysgur)
- ec05297 formatter_yaml: Align sequence container end comments to the dash width (#24891 ) (leaysgur)
- e6e584b oxfmt: Type jsdoc. enum options (#25008 ) (leaysgur)
### ⚡ Performance
- b91d5a8 formatter_css,formatter_graphql,formatter_yaml,formatter_json: Pre alloc IR buffers (#25234 ) (leaysgur)
### 📚 Documentation
- eaa7c69 formatter_core: Extract FORMATTER_POLICY (#25233 ) (leaysgur)
- a1842e2 formatter_json: Fix outdated separeted.rs comments (#25144 ) (leaysgur)
- 193e16f formatter/jsdoc: Correct `str_width` attribution (#25142 ) (leaysgur)
2026-08-03 11:15:35 +00:00
renovate[bot]
b937e3e2f1
chore(deps): update napi ( #25019 )
...
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/ ) |
[Adoption](https://docs.renovatebot.com/merge-confidence/ ) |
[Passing](https://docs.renovatebot.com/merge-confidence/ ) |
[Confidence](https://docs.renovatebot.com/merge-confidence/ ) | Type |
Update |
|---|---|---|---|---|---|---|---|
| [@napi-rs/cli](https://napi.rs/ )
([source](https://redirect.github.com/napi-rs/napi-rs )) | [`3.7.4` →
`3.8.2`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.7.4/3.8.2 ) |

|

|

|

| pnpm.catalog.default | minor |
| [napi](https://redirect.github.com/napi-rs/napi-rs ) | `3.11.0` →
`3.12.0` |

|

|

|

| workspace.dependencies | minor |
| [napi-build](https://redirect.github.com/napi-rs/napi-rs ) | `2.3.2` →
`2.4.0` |

|

|

|

| workspace.dependencies | minor |
| [napi-derive](https://redirect.github.com/napi-rs/napi-rs ) | `3.6.0` →
`3.6.2` |

|

|

|

| workspace.dependencies | patch |
---
### Release Notes
<details>
<summary>napi-rs/napi-rs (@​napi-rs/cli)</summary>
###
[`v3.8.2`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.1...@napi-rs/cli@3.8.2 )
[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.1...@napi-rs/cli@3.8.2 )
###
[`v3.8.1`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.0...@napi-rs/cli@3.8.1 )
[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.8.0...@napi-rs/cli@3.8.1 )
###
[`v3.8.0`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.4...@napi-rs/cli@3.8.0 )
[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.4...@napi-rs/cli@3.8.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.
👻 **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:eyJjcmVhdGVkSW5WZXIiOiI0My4yODAuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-08-03 11:21:03 +01:00
leaysgur
a9e76e9e1f
fix(oxfmt): rework tsx-in-vue support ( #25106 )
...
Follow-up to #25063 .
tsx-in-vue was supported in #25063 with a parse-retry (ts fails → retry as tsx), chosen to keep the common ts path single-parse.
However, this leaves a hole: a `lang="tsx"` block without JSX parses fine as plain ts, so the retry never fires and the lone generic comma is removed:
```vue
<script setup lang="tsx">
const identity = <T,>(x: T) => x; // → <T>(x: T) => x, breaks as TS17008
</script>
```
Since parse failure fundamentally cannot detect this, the only fix is to scan the `lang` declaration itself.
The JS host now scans the SFC once per file and passes `_oxfmtVueScriptLang: "tsx"` down to `textToDoc()`. This makes the retry obsolete, so it is removed.
This PR also settles the comma policy: keep it only where it is load-bearing.
- JSX grammar (`<T>` would be a JSX opener)
- and `.mts/.cts` (TS7060, #18928 )
and remove it everywhere else, keyed on the grammar, regardless of context.
Deliberate divergence: Prettier keys on filepath and keeps the comma in ts-in-vue/svelte (while its own ts-in-md embed uses `dummy.ts` as `filepath` and removes it). Plain-TS sources now behave identically wherever they live.
2026-07-30 05:27:07 +00:00
leaysgur
1b57f783fb
feat(oxfmt): support tsx-in-vue ( #25063 )
...
Part of #16608 , closes #25046 .
---
Even with a simple regexp, I don't want to impact the performance of the vast majority of ts-in-vue paths.
With this approach, only tsx-in-vue use cases will be affected, and even that will be kept to a minimum since it can be handled entirely on the Rust side. (JS <-> Rust roundtrip is also slow)
2026-07-29 07:27:43 +00:00
leaysgur
e6e584b9be
fix(oxfmt): type jsdoc. enum options ( #25008 )
...
Fixes #24999
2026-07-28 01:22:23 +00:00
oxc-guard
65fe65d842
release(apps): oxlint v1.76.0 && oxfmt v0.61.0 ( #24976 )
...
# Oxlint
### 🚀 Features
- 8d31dfa linter: Verify eslint/no-restricted-globals config schema (#24598 ) (vigneshwar)
- 7069621 linter: Verify jest/vitest prefer-lowercase-title config schema (#24724 ) (Bartok)
- 016cf2a linter/oxc: Add bad-match-all-arg rule (#24900 ) (camc314)
- cdc941e linter/n: Implement `exports-style` rule (#24087 ) (Mikhail Baev)
- 1ad6f6c linter/eslint: Implement `id-denylist` rule (#24632 ) (Mikhail Baev)
- 678bbb5 linter/typescript-eslint: Implement suggestion for `class-literal-property-style` rule (#24766 ) (Mikhail Baev)
### 🐛 Bug Fixes
- a5f3a0e linter: Mark missing suggestions as pending (#24956 ) (Mikhail Baev)
- a065946 oxlint: Absolutize explicit CLI paths even with --no-ignore (#24646 ) (Bez Sahara)
- 17688bb linter/jsx-a11y/interactive-supports-focus: Match eslint behavior for custom components (#24780 ) (Cole Ellison)
- 0aef19e linter/typescript/no-confusing-non-null-assertion: Report `in` and `instanceof` (#24825 ) (Mikhail Baev)
- 361dce9 linter: Unicorn/no-array-reverse and no-array-sort replacements should be suggestions (#24848 ) (klem)
- 9213560 config: Preserve defineConfig field JSDoc (#24326 ) (周星星同学)
- 334d884 linter/node/no-top-level-await: Clarify diagnostic (#24803 ) (camc314)
- b9fc6af linter/eslint/func-names: Ignore overloads (#24801 ) (camc314)
- e80574f estree: Handle empty spans serializing `ImportMeta` and `NewTarget` (#24775 ) (overlookmotel)
### ⚡ Performance
- c75dc60 linter: Avoid `Vec` allocations via `bound_names` (#24959 ) (connorshea)
- 9f9f39d linter/eslint/no-const-assign: Avoid `Vec` allocation per `const` declarator (#24953 ) (connorshea)
- 10a621e linter/typescript/adjacent-overload-signatures: Avoid collecting vec in some cases (#24874 ) (connorshea)
- ed167e1 linter/node/exports-style: Iterate once over global references (#24877 ) (connorshea)
- 69908fe linter: Avoid allocations in jest/no-deprecated-functions (#24866 ) (Connor Shea)
- a3585d7 linter: Speed up jest/vitest prefer-each (#24872 ) (Connor Shea)
- 62fe640 linter/eslint/prefer-rest-params: Run once per file (#24873 ) (Connor Shea)
- 7a7aa54 linter/eslint/no-this-before-super: Skip files without classes (#24869 ) (Connor Shea)
- 4ad0c94 linter/plugins: Faster copying comments to JS allocator (#24858 ) (overlookmotel)
- 4c25b91 linter/plugins: Test booleans with explicit `=== false` (#24830 ) (overlookmotel)
- b7add00 linter/plugins: Remove check in loop in `getDisableDirectives` (#24833 ) (overlookmotel)
### 📚 Documentation
- 3ff2e0e linter: Clarify config extends types (#24936 ) (Boshen)
# Oxfmt
### 🚀 Features
- eabfe01 oxfmt/lsp: Support `oxc.fmt.disableNestedConfig` (#24965 ) (leaysgur)
- 2357a10 formatter_yaml: Implement YAML formatter (#24534 ) (leaysgur)
### 🐛 Bug Fixes
- 761a882 formatter_css: Keep leading `+` in An+B to enable idempotency check (#24973 ) (leaysgur)
- e037709 formatter: Stop preserving indent for embedded template exprs (#24972 ) (leaysgur)
- ae1a39b formatter_css: Align wrapped selector-arg indent (#24971 ) (leaysgur)
- 143fd1f formatter: Align quoted `new` signature (#24883 ) (leaysgur)
- 07ff12f formatter_yaml: Fix indent, blank, and spacing issues (#24837 ) (leaysgur)
- d076b40 formatter: Check calee chain is_simple (#24871 ) (leaysgur)
- fb34196 formatter_css: Keep non-ASCII strings with quotes (#24870 ) (leaysgur)
- 9213560 config: Preserve defineConfig field JSDoc (#24326 ) (周星星同学)
- 31783e9 formatter_css: Print nested SCSS map with consistent indent (#24789 ) (leaysgur)
- 8eb9eca formatter/jsdoc: Respect `singleQuote` option in `@import` (#24787 ) (leaysgur)
- 6f05ac4 formatter: Fix template literal formatting (#24786 ) (leaysgur)
### ⚡ Performance
- bb73b23 formatter_core: Bound the thread-local scratch cache (#24793 ) (leaysgur)
- a5f7b15 formatter: Stage assignment-like left hand side on the heap (#24613 ) (leaysgur)
- 94de05f formatter: Accumulate JSX child-list builders on the heap (#24585 ) (leaysgur)
- 7810e8a formatter_core: Share one thread-cached scratch vector across staging buffers (#24583 ) (leaysgur)
- c191f51 formatter_core: Stage IR buffers on the heap to reduce arena memory (#24582 ) (leaysgur)
### 📚 Documentation
- 69126a0 formatter_css,fomatter_graphql,formatter_yaml: Update AGENTS.md (#24821 ) (leaysgur)
2026-07-27 15:17:12 +00:00
周星星同学
9213560fe7
fix(config): preserve defineConfig field JSDoc ( #24326 )
...
## Summary
- contextually type oxlint and oxfmt `defineConfig` object arguments as
their config interfaces
- keep the identity-helper return type so literal inference is preserved
- restore field-level JSDoc hover for config object properties in
editors
## Validation
Manual expansion of `just ready` because `just` is not installed in my
local shell:
- `pnpm install`
- `typos`
- `cargo lintgen`
- `cargo shear --fix --check-test-targets` (returned 0; emitted an
unrelated existing redundant-ignore warning for `oxc_lexer` in workspace
metadata)
- `cargo fmt`
- `node --run fmt`
- `cargo ck`
- `env -u NO_COLOR cargo test --all-features`
- `cargo lint -- --deny warnings`
- `RUSTDOCFLAGS='-D warnings' cargo doc --no-deps
--document-private-items --all-features`
- `cargo run -p oxc_ast_tools`
TypeScript language-service probe using VS Code's bundled TypeScript
SDK:
- old `defineConfig<T extends Config>(config: T): T` returned no docs
for object fields
- new `defineConfig<T extends Config>(config: T & Config): T` returned
JSDoc for `oxlint.ignorePatterns` and `oxfmt.semi`
- invalid property/type probes still reported TS2561 and TS2322
- return literal inference stayed unchanged for representative
oxlint/oxfmt config objects
## AI Assistance
This PR was prepared with AI assistance. I reviewed the change,
validation approach, and PR contents before submission.
Co-authored-by: cixiangtao <cixiangtao@kanyun.com >
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-07-22 16:41:41 +01:00
oxc-guard[bot]
83abe3b49c
release(apps): oxlint v1.75.0 && oxfmt v0.60.0 ( #24713 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 54cc121 ast: [**BREAKING**] Split `MetaProperty` into `ImportMeta` and
`NewTarget` (#24557 ) (camc314)
### 🚀 Features
- 7b045cd minfier: Drop last break from last switch case (#24673 )
(Armano)
- dd18383 linter/node: Implement no-top-level-await rule (#24634 )
(Connor Shea)
- 16a65f2 linter/react: Implement function-component-definition rule
(#24471 ) (Cole Ellison)
- 7f1f585 linter: Reuse `jest/padding-around-test-blocks` for
`vitest/padding-around-test-blocks` (#24519 ) (Mikhail Baev)
- 99978a8 linter/import/consistent-type-specifier-style: Support
`prefer-top-level-if-only-type-imports` option (#24502 ) (camc314)
### 🐛 Bug Fixes
- 0184ad6 linter/unicorn/no-useless-undefined: Preserve valid parameter
defaults (#24686 ) (camc314)
- 8694167 linter/eslint/prefer-destructuring: Handle typed declarations
(#24616 ) (camc314)
- 477cf0f linter/eslint/no-throw-literal: Handle assigned errors
(#24561 ) (Cole Ellison)
- ac9200a linter: Detect React components from returned JSX (#24521 )
(camc314)
- c0a6522 linter/eslint/no-useless-computed-key: Allow TS syntax in
computed keys (#24524 ) (Cole Ellison)
### ⚡ Performance
- 346eed1 linter/unicorn/prefer-event-target: Only run on `Class` and
`NewExpression` nodes (#24685 ) (Mikhail Baev)
- 7be5cf0 oxlint/lsp: Only invoke lint on code actions when document is
not opened (#24676 ) (Sysix)
- d3f07a0 diagnostics: Box OxcDiagnosticInner to reduce binary size
(#24665 ) (Boshen)
- 90ae040 linter/reporter/stylish: Compute diagnostic Info once per
diagnostic (#24525 ) (connorshea)
### 📚 Documentation
- e6f7174 linter/valid-expect: Fix correct example being identical to
incorrect one (#24468 ) (mkan0141)
# Oxfmt
### 💥 BREAKING CHANGES
- 54cc121 ast: [**BREAKING**] Split `MetaProperty` into `ImportMeta` and
`NewTarget` (#24557 ) (camc314)
### 🚀 Features
- 3d22307 parser: Add `ParseOptions::enable_ident_hashes` (#24491 )
(Boshen)
### 🐛 Bug Fixes
- 6fe866a oxfmt: Keep tailwind classes glued to template expr with
`preserveWhitespace` (#24609 ) (leaysgur)
- 33e32d8 formatter_css: Use `line_suffix` for EOL line comment (#24580 )
(leaysgur)
- 5f76998 formatter_graphql: Keep same line comments pending across
intervening tokens (#24579 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-07-21 16:10:25 +01:00
oxc-guard[bot]
2d4e8d2064
release(apps): oxlint v1.74.0 && oxfmt v0.59.0 ( #24454 )
...
# Oxlint
### 🚀 Features
- 0433a83 linter/eslint/no-inner-declarations: Add `namespaces` option
(#24044 ) (Boshen)
- 92f154a oxlint,oxfmt: Auto-discover `.mts` config files (#24357 )
(camc314)
- 8c1d74b linter/import/no-duplicates: Add autofix logic (#24273 ) (Cole
Ellison)
### 🐛 Bug Fixes
- 0b086de linter/jest/prefer-lowercase-title: False positive when
`lowercaseFirstCharacterOnly` is false (#24414 ) (Connor Shea)
- 097cb95 linter: Allow `vite-plus/test` and `@effect as Vitest source
(#24196 ) (Liang)
- 8337835 linter: Error on `ignorePatterns` that cannot match files
aoutside the config directory (#24341 ) (leaysgur)
- 9ba30e5 linter/oxc/bad-replace-all-arg: Add note to enhance diagnostic
(#24346 ) (camc314)
- 2ce5a33 linter: Resolve `ignorePatterns` relative to the config dir
(#24339 ) (leaysgur)
- ab90eed linter/eslint/no-loop-func: Do not error on catch variables
(#24316 ) (Chris Opperwall)
- b67f0a6 linter/eslint/no-unused-vars: Count default parameter updates
as usage (#24323 ) (camc314)
- d193f8e linter: Detect Junie agent env vars (#24277 ) (Jeevan Mohan
Pawar)
- 2aecf60 linter/eslint/no-unreachable: Handle `break` in switch stmts
correctly (#24260 ) (camc314)
### ⚡ Performance
- 7f80cac linter/vue/prop-name-casing: Precompile `ignoreProps` regex
pattern (#24413 ) (connorshea)
- 6272051 linter/typescript/no-require-imports: Compile allow patterns
once (#24417 ) (connorshea)
- fb1edf1 linter: Compute comment fix span only for directive comments
(#24419 ) (connorshea)
- 33805b9 linter/jsdoc/require-param: Compile checkTypesPattern regex
once (#24420 ) (connorshea)
- 8de6fca linter/jest/valid-title: Compile disallowedWords regex once
(#24412 ) (Connor Shea)
- 4a0d8dc linter/eslint/no-underscore-dangle: Avoid String clone per
identifier (#24371 ) (Ian Macalinao)
- f3ab04c linter/typescript/consistent-type-imports: Remove redundant
Vec per violation (#24370 ) (Ian Macalinao)
- 4d2d78d linter/typescript/prefer-ts-expect-error: Avoid String clone
per comment (#24369 ) (Ian Macalinao)
# Oxfmt
### 🚀 Features
- 3a7fe74 formatter_css: Update oxc-css-parser to 0.0.7 (#24434 )
(leaysgur)
- 0173cd3 formatter_css: Format Less :extend and merge props (#24358 )
(leaysgur)
- 92f154a oxlint,oxfmt: Auto-discover `.mts` config files (#24357 )
(camc314)
- df250df formatter: Support `quoteProps` for TS enum and methods
(#24309 ) (leaysgur)
- a9a5cd6 formatter_core: Expose `SourceText::as_str()` (#24281 )
(leaysgur)
### 🐛 Bug Fixes
- 162bddf formatter: Add required parens for conditional type in type
parameter constraint (#24450 ) (leaysgur)
- 2d22a91 formatter: Determine type cast target from span instead of
lexical scan (#24447 ) (leaysgur)
- 25306e9 formatter: Do not add extra parens with type cast comment
(#24444 ) (leaysgur)
- bd6edfe formatter: Break arrow signature that exactly fills the line
when cond body may hug (#24440 ) (leaysgur)
- a99ef41 formatter: Keep quotes on method signature named new (#24432 )
(leaysgur)
- fcc28df formatter_css: Keep glued-braket-value tight (#24352 )
(leaysgur)
- 8337835 linter: Error on `ignorePatterns` that cannot match files
aoutside the config directory (#24341 ) (leaysgur)
- b7c7e15 formatter: Add parens for import and private field in new
callee chain (#24320 ) (leaysgur)
- 0c8f6e4 formatter: Update detect_code_removal for #24309 (#24314 )
(leaysgur)
- a85aad0 formatter: Fix member-chain and non-null parens (#24312 )
(leaysgur)
- 1c29c73 formatter: Preserve `TSNonNullExpression` in chain expression
(#24311 ) (leaysgur)
- 8933c0e formatter: Keep comment inside of empty `switch` block
(#24308 ) (leaysgur)
- ec26af2 formatter: Preserve blank lines between JSX attrs (#24290 )
(leaysgur)
- 70bd54d formatter: Keep arrow function body comment (#24287 )
(leaysgur)
- 415fe1e oxfmt: Error on ignorePatterns that cannot match files outside
the config directory (#24286 ) (leaysgur)
- eeabc4a formatter_css: Bail on EOF-recovered parse errors (#24282 )
(leaysgur)
- 42ec8de formatter: Keep comments inside surviving parens and
suppressed statement terminators (#24253 ) (leaysgur)
- 1343779 formatter: Keep comment inline for empty statements (#24249 )
(leaysgur)
- b996579 formatter: Print ; before trailing comments part 2 (#24246 )
(leaysgur)
- 4f86e8c formatter: Print `;` before trailing comments (#24244 )
(leaysgur)
- 01252e4 formatter: Add or remove parens for `let` declaration (#24215 )
(leaysgur)
### ⚡ Performance
- eeb1913 formatter_core: Avoid per-call `Vec` work-stack in soft-line
removal (#23775 ) (Marius Schulz)
- a2f255b formatter: Use `SmallVec` for `MemberChain` collections
(#23776 ) (Marius Schulz)
### 📚 Documentation
- b52d0f5 formatter: Add TODO comment about unsound code (#24372 )
(overlookmotel)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-07-14 15:02:14 +08:00
leaysgur
415fe1e7bb
fix(oxfmt): error on ignorePatterns that cannot match files outside the config directory ( #24286 )
...
Patterns in `ignorePatterns` use gitignore-style matching rooted at the config file's directory, so a `..` component can never match anything.
Reject such patterns at config load time instead of silently accepting them, and document the scoping.
Refs: #24276
2026-07-08 05:31:23 +00:00
oxc-guard[bot]
39677ba50d
release(apps): oxlint v1.73.0 && oxfmt v0.58.0 ( #24219 )
...
# Oxlint
### 🚀 Features
- 7db7a29 allocator: Add `ReplaceWith` trait (#24012 ) (overlookmotel)
- a2c97f3 linter/unicorn: Implement `explicit-timer-delay` rule (#23612 )
(Mikhail Baev)
- 85735cb linter/unicorn: Implement `no-confusing-array-with` rule
(#23638 ) (Shekhu☺️ )
- cb4fbb9 linter/eslint: Implement no-unreachable-loop rule (#23975 )
(Todor Andonov)
- dc32112 linter/eslint/no-constant-binary-expression: Check relational
comparisons (#24088 ) (camc314)
- 439c344 linter/jsdoc: Added missing options to `jsdoc/require-param`
rule (#23364 ) (kapobajza)
- 62af717 linter/unicorn/filename-case: Add `lowercase` and
`screamingSnakeCase` (#24045 ) (Boshen)
- d963967 linter/unicorn/no-array-sort: Add `allowAfterSpread` option
(#24043 ) (Boshen)
- 0a75682 linter: Add per-rule timings for type-aware linting (#22488 )
(camchenry)
- 743e222 linter/react: Add `disallowedValues` option for
`forbid-dom-props` rule (#23970 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 7b80010 linter: Use direct binding symbol ids (#24216 ) (camc314)
- 8f94b49 linter/import/no-duplicates: Don't flag a type-only import
beside a side-effect import (#24030 ) (Boshen)
- d8c3fee linter/react/rules-of-hooks: Flag `useEffectEvent` escapes
(#23764 ) (Rayan Salhab)
- 0a7312b linter/no-deprecated-functions: Map `require.requireActual` to
`jest.requireActual` (#23627 ) (Jerry Zhao)
- d9e3ab3 linter/eslint/no-useless-return: Handle switch case
continuation (#23984 ) (camc314)
- 0b25582 ast: Type binding node `typeAnnotation` as `TSTypeAnnotation |
null` (#23113 ) (Boshen)
- 122d112 linter/eslint/no-restricted-imports: Flag dynamic import()
expressions (#24029 ) (Boshen)
- 59b6b83 linter: Avoid `OnceLock` re-entry on cyclic `export *`
re-exports (#23632 ) (Jerry Zhao)
- dd09af0 linter/import/namespace: Avoid panic on destructuring of an
unresolvable namespace re-export (#23626 ) (Jerry Zhao)
- bdb51c7 linter/jest/prefer-ending-with-an-expect: Validate config
patterns (#24122 ) (camc314)
- e383843 linter/unicorn/prefer-modern-dom-apis: Skip fixer for non
identifier arguments (#23630 ) (Jerry Zhao)
- 0ac4c83 linter: Detect circular config extends (#24115 ) (camc314)
- bae1edf linter/import/namespace: Check namespace imports after named
imports (#24094 ) (camc314)
- cd8fdfe linter/eslint/no-eval: Recognize Array.from family thisArg
(#24091 ) (camc314)
- 851ee43 linter/eslint/no-eval: Resolve this binding for functions
returned from an IIFE (#23643 ) (Jerry Zhao)
- 002ab35 linter/unicorn: Avoid prefer-array-find rest destructuring
false positive (#23654 ) (ColemanDunn)
- 01c8775 linter/unicorn/filename-case: Keep digits attached in
screamingSnakeCase (#24056 ) (Boshen)
- f256941 linter: Recognize `@effect/vitest` as a vitest import source
(#24025 ) (Boshen)
- 73eeb1d linter/import/extensions: Honor per-extension `never` for
explicit extensions (#24031 ) (Boshen)
- d4ebe1f linter: Reject non-object oxlint config files (#24026 )
(Boshen)
- 45d607d linter/react/forbid-component-props: Make allow/disallow lists
optional in schema (#24024 ) (Boshen)
- 54076ad linter/unicorn/no-array-for-each: Suggest entries loop for
index callbacks (#24004 ) (camc314)
- d057736 linter/jsdoc: Avoid param root underflow (#23945 ) (camc314)
- 29c76bf linter/unicorn/prefer-at: Skip object numeric-key access
(#23909 ) (Gaurav Dubey)
### ⚡ Performance
- 657a8fc linter/oxc/bad-array-method-on-arguments: Only run on member
expressions instead of all identifiers (#24164 ) (camchenry)
- 073d9e7 linter/eslint/prefer-rest-params: Run on functions instead of
all identifiers (#24163 ) (camchenry)
- e5a4162 linter/jest/no-confusing-set-timeout: Early exit fast path
(#24092 ) (camc314)
- bca7ce5 linter: Only run react-perf rules on JSX attribute nodes
(#24083 ) (camchenry)
- 6881bf6 linter: Compute `apply_overrides` rule set lazily (#23648 )
(Jerry Zhao)
- 911c106 linter/eslint/no-obj-calls: Use resolved reference instead of
scope walk (#23895 ) (Marius Schulz)
- dc8fd9a linter/unicorn/prefer-dom-node-text-content: Change dispatch
to run only on less common node types (#23897 ) (Connor Shea)
- fdbd34d linter/eslint/no-useless-call: Fast-path static callees
(#24077 ) (camc314)
- b1be114 linter/import/extensions: Skip empty config and borrow
extensions (#24075 ) (camc314)
- 4781b2d linter/eslint/no-obj-calls: Use direct global matches (#24076 )
(camc314)
- e6cee89 linter: Avoid node-chain allocation for non-Jest calls
(#23907 ) (Yagiz Nizipli)
- 30dc517 linter/typescript/no-restricted-types: O(1) banned-type
lookups (#23827 ) (Yagiz Nizipli)
### 📚 Documentation
- 6ca9125 linter/typescript: Clarify consistent-type-imports behavior
(#23972 ) (camc314)
# Oxfmt
### 🚀 Features
- 4f4313e formatter_css: Update oxc-css-parser 0.0.5 (#24120 ) (leaysgur)
- 0ccd8a1 formatter_graphql: Update oxc-graphql-parser 0.0.5 (#24106 )
(leaysgur)
- 89ec3d9 formatter_core: Add literal line and root indention primitives
(#24051 ) (leaysgur)
- 213a96b formatter_core: Add no-expand-parent for multiline text
(#24050 ) (leaysgur)
- 0e5bcc9 formatter_graphql: Update oxc-graphql-parser 0.0.4 (#24039 )
(leaysgur)
- e0b35a1 formatter_css: Update `oxc-css-parser@0.0.3` (#23974 )
(leaysgur)
### 🐛 Bug Fixes
- 1fe6546 formatter: Omit unneeded `;` for type members with `no-semi`
(#24212 ) (leaysgur)
- 0ad7316 formatter: Print space for `ForStatement`.`update` only if
exists (#24211 ) (leaysgur)
- 3abbed5 formatter: Print `;` before jsdoc type-cast parens with
no-semi (#24208 ) (leaysgur)
- 9af3833 formatter_css: Make scss formatter consistent (#24207 )
(leaysgur)
- 46d7194 formatter_css: Use fill IR for `@forward` members (#24206 )
(leaysgur)
- e31038f formatter_css: Keep comment inside sass config list (#24205 )
(leaysgur)
- d3b9591 formatter: Add parens around `await/yield` with `<T>` (#24202 )
(leaysgur)
- 2121a55 oxfmt: Reuse tinypool process during the same LSP process
(#24197 ) (leaysgur)
- 9bf4b4a formatter_css: Align CSS output to Prettier 3.9.1 (#24100 )
(leaysgur)
- cd2452e formatter_css: Align SCSS output to Prettier 3.9.1 (#24097 )
(leaysgur)
- 4ee8745 formatter_css: Keep selector value contain line-break without
breaking line (#24055 ) (leaysgur)
- e1ece97 formatter_graphql: Break `implements` list by print-width
(#23997 ) (leaysgur)
- 0a6b16c formatter_json: Preserve key and literal value for
json-stringify (#23996 ) (leaysgur)
- 903ab6e formatter_css: Preserve newlines in css-in-js selector list
(#23992 ) (leaysgur)
- ea5d095 oxfmt: Update `--migrate prettier` (#23963 ) (leaysgur)
### ⚡ Performance
- 468e1e3 formatter_core: Make printer queues cursor-based (#24098 )
(Boshen)
- c59f2fe rust: Return impl ExactSizeIterator from slice-backed
accessors (#24144 ) (Boshen)
- c292fb2 formatter: Inline fits element dispatcher (#23982 ) (camc314)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-07-06 23:26:00 +08:00
leaysgur
2121a552ba
fix(oxfmt): reuse tinypool process during the same LSP process ( #24197 )
...
Fixes #24147 , closes #24183 .
2026-07-06 00:55:31 +00:00
leaysgur
ea5d09534d
fix(oxfmt): update --migrate prettier ( #23963 )
...
A bit outdated, updated it to reflect the latest situation.
- Support `svelte` migration
- Better (but not yet complete) `overrides` detection
- Remove warning about `embeddedLanguageFormatting` (already supported)
- etc
2026-06-30 00:59:07 +00:00
oxc-guard[bot]
5306f24d9e
release(apps): oxlint v1.72.0 && oxfmt v0.57.0 ( #23935 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 88f4455 str: [**BREAKING**] `Str` and `Ident` methods take
`&GetAllocator` (#23781 ) (overlookmotel)
### 🚀 Features
- f2091b3 ast: Unify old and new `AstBuilder`s (#23875 ) (overlookmotel)
- 1c8f50c linter: Add schema for `eslint/no-restricted-import` (#23642 )
(Sysix)
### 🐛 Bug Fixes
- 7cb85c4 linter/eslint/no-negated-condition: Add autofix for negated
conditions (#23825 ) (Yagiz Nizipli)
- f7d1f50 oxlint, oxfmt: Enable `disable_old_builder` Cargo feature for
`oxc_ast` crate (#23886 ) (overlookmotel)
- d891990 linter/jsx-a11y/role-supports-aria-props: Ignore nullish prop
values (#23865 ) (Mikhail Baev)
- 94b6599 linter: Deduplicate missing plugin errors (#23853 ) (camc314)
- eff3eff linter/oxc/branches-sharing-code: Avoid else-if false
positives (#23843 ) (camc314)
- 2a2d3b9 linter/eslint/prefer-destructuring: Skip
`AssignmentExpression` autofixes (#23818 ) (camc314)
- ddc24ae linter/eslint/id-length: Respect checkGeneric for mapped type
keys (#23802 ) (bab)
- cd89202 linter/react/exhaustive-deps: Skip wrapper expression when
analyzing hook initializers (#23793 ) (camc314)
- 20e8285 linter/unicorn/prefer-native-coercion-function: Allow ts type
predicates (#23774 ) (camc314)
- d86f60b lsp: Normalize user config path to watch pattern (#23723 )
(Sysix)
- 52032cf linter: Newline-terminate tsgolint errors (#23762 ) (Mikhail
Baev)
- 368fda7 linter/eslint/no-warning-comments: Avoid dropping generated
regex patterns (#23741 ) (camc314)
- ce44fbd linter/valid-title: Escape disallowed words regex (#23742 )
(camc314)
- 3100d11 linter/prefer-called-exactly-once-with: Avoid out-of-bounds
slice panic at end of file (#23625 ) (Jerry Zhao)
- 742be36 refactor/node/handle-callback-err: Reject invalid regex config
(#23740 ) (camc314)
- d7be179 linter/eslint/no-restricted-globals: Handle shadowed locals
(#23736 ) (camc314)
- b3b1ff8 linter/vitest/expect-expect: Handle global vitest detection
correctly (#23734 ) (camc314)
### ⚡ Performance
- 68f9472 linter/jsx-a11y: Skip lowercasing non-aria attribute names
(#23906 ) (Lawrence Lin)
- b9312b4 linter/unicorn/prefer-export-from: Use keyed binding lookup
(#23893 ) (Marius Schulz)
- cd5204e linter/typescript/no-unsafe-declaration-merging: Use keyed
binding lookup (#23894 ) (Marius Schulz)
- e948498 linter/eslint/prefer-named-capture-group: Only dispatch for
relevant node types (#23868 ) (Connor Shea)
- 4ac7a8e linter/eslint/max-depth: Derive node types (#23896 ) (Connor
Shea)
- daeed09 linter/eslint/no-restricted-globals: Only scan unresolved
references (#23890 ) (camc314)
- e808514 linter/jest-vitest: Speed up no-standalone-expect (#23883 )
(camc314)
- 8b165e5 linter/react/exhaustive-deps: Skip non-reactive calls early
(#23882 ) (camc314)
- 54005e7 linter/eslint/no-unused-vars: Precompute exported bindings
(#23881 ) (camc314)
- 9bc2f8c linter/unicorn/prefer-number-properties: Speed up global
checks (#23880 ) (camc314)
- 4ff104f linter: Optimize `require-hook` and `prefer-mock-*` rules to
run on specific node types (#23871 ) (Connor Shea)
- cc2213b linter: Run `no-underscore-dangle` only when relevant node
types are present (#23867 ) (Connor Shea)
- 3e55c21 linter/promise/always-return: Narrow to function node types
(#23878 ) (Connor Shea)
- 7136182 linter/jest-vitest: Speed up no-commented-out-tests (#23864 )
(camc314)
- f138264 linter/eslint/no-script-url: Match javascript: prefix without
allocating (#23861 ) (Lawrence Lin)
- 7ef6895 linter/react/no-array-index-key: Delay index symbol lookup
(#23857 ) (camc314)
- 26bc171 linter/react/no-array-index-key: Match callback methods
directly (#23856 ) (camc314)
- 44fbbda linter/jsx-a11y/interactive-supports-focus: Check cheap
conditions first (#23854 ) (camc314)
- 84a5aa3 linter/eslint/no-extend-native: Skip lowercase references
early (#23851 ) (camc314)
- 88a74b2 linter/eslint/no-nonoctal-decimal-escape: Scan decimal escapes
as bytes (#23850 ) (camc314)
- fca69a8 linter: Skip traversal without this expressions (#23845 )
(camc314)
- 838fd63 linter: Reduce preallocation for per-file diagnostics `Vec`
(#23705 ) (Marius Schulz)
- 417b506 linter/typescript/array-type: Remove full source text clone
(#23751 ) (Marius Schulz)
### 📚 Documentation
- 57e4469 linter/unicorn: Update prefer-dom-node-text-content rationale
(#23933 ) (Mikhail Baev)
- 3d61dea all: Correct capitalization in comments (#23887 )
(overlookmotel)
### 🛡️ Security
- 3cdd18f deps: Update npm packages (#23690 ) (renovate[bot])
# Oxfmt
### 💥 BREAKING CHANGES
- 259e0cd oxfmt,formatter_graphql: [**BREAKING**] Support draft syntax
with removing prettier fallback (#23326 ) (leaysgur)
- accbc49 oxfmt: [**BREAKING**] Format `parser:css,less,scss` files +
css-in-js by `oxc_formatter_css` (#23321 ) (leaysgur)
### 🚀 Features
- dffa4b3 formatter_css: Implement `oxc_formatter_css` (#23320 )
(leaysgur)
- 01de9ec oxfmt: Format `parser:graphql` files by
`oxc_formatter_graphql` (#23318 ) (leaysgur)
- 4e66212 formatter_graphql: Implement oxc_formatter_graphql (#23317 )
(leaysgur)
### 🐛 Bug Fixes
- 67325ae formatter_css: Handle frontmatter language (#23819 ) (leaysgur)
- 3f355e5 formatter_graphql: Improve major prettier diffs (#23419 )
(leaysgur)
- 48e2d78 formatter_css: Improve major prettier diffs (#23327 )
(leaysgur)
- 8c07cad all: Enable `disable_old_builder` Cargo feature for `oxc_ast`
crate in tests (#23888 ) (overlookmotel)
- f7d1f50 oxlint, oxfmt: Enable `disable_old_builder` Cargo feature for
`oxc_ast` crate (#23886 ) (overlookmotel)
- d86f60b lsp: Normalize user config path to watch pattern (#23723 )
(Sysix)
### ⚡ Performance
- 4ddcba0 formatter_core: Add printable-ASCII fast path to TextWidth
(#23913 ) (Lawrence Lin)
### 📚 Documentation
- b4d0dc9 oxfmt,formatter,formatter_css,formatter_core: Update AGENTS.md
(#23814 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-06-29 20:11:12 +01:00
oxc-guard[bot]
c4be770f24
release(apps): oxlint v1.71.0 && oxfmt v0.56.0 ( #23707 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 36009dd allocator: [**BREAKING**] `GetAllocator::allocator` take
`&self` (#23676 ) (overlookmotel)
### 🚀 Features
- ff65285 linter: `no-restricted-globals` add missing upstream options
(#23663 ) (Sysix)
- 7b8bd89 linter/typescript: Implement suggestion for
`no-unnecessary-type-constraint` rule (#23646 ) (Mikhail Baev)
- 0dc2405 linter: Add schema for `eslint/no-restricted-properties`
(#23619 ) (Sysix)
- b638d0e linter: Add schema for `node/callback-return` (#23615 ) (Sysix)
- eb8bedc linter: Add schema for `import/extensions` (#23557 )
(WaterWhisperer)
- 46f3625 linter: Implement node/no-sync rule (#23589 ) (fujitani sora)
- b01739a linter: Add schema for `unicorn/numeric-separators-style`
(#23554 ) (Mikhail Baev)
- 68afd2a linter/node: Implement `no-mixed-requires` rule (#23539 )
(fujitani sora)
- 59d8893 linter: `unicorn/numeric-separators-style` support missing
options (#23524 ) (Sysix)
- a421215 linter: Add schema for `eslint/prefer-destructuring` (#23410 )
(WaterWhisperer)
- 84438be linter/jsdoc: Added missing options to
`require-param-description` (#23416 ) (kapobajza)
- c145b72 linter/jsdoc/require-param-type: Implement fixer (#23513 )
(camc314)
- 51910df linter/jsdoc: Add missing options to `require-param-type` rule
(#23418 ) (kapobajza)
- e90925f linter/unicorn: Implement prefer-number-coercion rule (#23497 )
(Shekhu☺️ )
- dd1c866 linter/vue: Implement no-async-in-computed-properties rule
(#23493 ) (bab)
- b02444e linter: Add schema for `react/jsx-no-script-url` (#23475 )
(WaterWhisperer)
- 53509a8 minifier: Treeshake pure typed arrays and Set/Map array
literals (#23469 ) (Dunqing)
- a8dce46 linter/unicorn: Implement `max-nested-calls` rule (#23461 )
(arieleli01212)
### 🐛 Bug Fixes
- b1948a1 linter/radix: Avoid panic on `parseInt` with a spread radix
argument (#23623 ) (Jerry Zhao)
- f28ccfd linter/prefer-query-selector: Use a compound selector for
multiple classes (#23628 ) (Jerry Zhao)
- 13f2970 linter/prefer-numeric-literals: Avoid panic on `parseInt` with
a spread radix argument (#23624 ) (Jerry Zhao)
- 57612b3 linter: Report invalid capitalized-comments ignore patterns
(#23608 ) (camc314)
- 800ee2a linter/consistent-vitest-vi: Preserve import aliases when
rewriting the import (#23568 ) (Yunfei He)
- f78b5e1 linter/consistent-indexed-object-style: Don't leak a stray
comma into the value type (#23566 ) (Yunfei He)
- 6b104e8 linter/radix: Detect a trailing comma only after the argument
(#23569 ) (Yunfei He)
- 2de20cb linter/unicorn/prefer-at: Correct two-argument `slice().pop()`
index (#23565 ) (Yunfei He)
- de778ec linter: `unicorn/numeric-separators-style` preserve dot for
floats without decial part (#23553 ) (Sysix)
- 651027c linter/curly: Remove only the block's own braces (#23580 )
(Yunfei He)
- 687e835 linter/array-type: Parenthesize a conditional-type element
(#23579 ) (Yunfei He)
- 9c80dff linter/unicorn/no-unnecessary-await: Don't paste operators
into invalid syntax (#23556 ) (Yunfei He)
- 46e1463 linter/no-compare-neg-zero: Delete the `-` of a parenthesized
`-0` (#23578 ) (Yunfei He)
- d172a97 linter/unicorn/prefer-math-trunk: Skip fixer for LHS with side
effects (#23548 ) (camc314)
- 1c3a9bd linter/unicorn/prefer-negative-index: Don't report
`Array#with` (#23518 ) (Yunfei He)
- c17db5d linter/unicorn/prefer-spread: Don't report `.slice()` on
non-array receivers (#23520 ) (Yunfei He)
- 9cd0c2f linter/unicorn/prefer-date-now: Keep `BigInt` wrapper when
fixing `BigInt(new Date())` (#23523 ) (Yunfei He)
- 16bb890 linter/unicorn/prefer-array-flat: Skip non-array `flatMap`
receivers (#23527 ) (Yunfei He)
- 3e6f90f linter/unicorn/no-zero-fractions: Insert a space after any
preceding keyword (#23529 ) (Yunfei He)
- 79a7d69 linter/eslint/no-useless-assignment: Handle exceptional
control-flow paths (#23544 ) (camc314)
- e8e2741 linter/unicorn/prefer-math-min-max: Preserve operand source
text in the fix (#23533 ) (Yunfei He)
- f592154 linter/react/display-name: Ignore lowercase jsx helpers
(#23510 ) (camc314)
- df7612f linter/jsx-a11y/no-noninteractive-element-to-interactive-role:
Allow custom roles config (#23507 ) (camc314)
- 924b931 linter/unicorn/prefer-at: Handle checking all indexes
correctly (#23504 ) (camc314)
- ca9686b linter/unicorn/prefer-at: Report zero indexes (#23503 )
(camc314)
- e96a4e3 linter/unicorn/explicit-length-check: Ignore optional chains
(#23487 ) (camc314)
- a303c23 linter/jsx-a11y: Align `anchor-is-valid` config with upstream
(#23446 ) (camc314)
- f27a6d1 linter: False positives with non `*.setTimeout` call in
`no-confusing-set-timeout` (#23444 ) (camc314)
### ⚡ Performance
- 8e0dd65 linter: Emit RuleEnum dispatch match once instead of per
timing branch (#23499 ) (Boshen)
- d5c7d99 linter/expect-expect: Avoid recompiling matches on every
traversal (#23593 ) (camc314)
- f191520 linter/no-useless-spread: Avoid collecting `Vec` before
iterating (#23546 ) (camc314)
- 79340d1 linter: Stream React lifecycle ancestors (#23545 ) (camc314)
- 1923169 linter/eslint/max-classes: Gate rule by rule config threshold
(#23509 ) (camc314)
- 3f60de3 linter: Use bucketed dispatch for all files (#23452 ) (camc314)
- 3699971
linter/typescript/no-unnecessary-parameter-property-assignment: Avoid
temporary vec allocations (#23492 ) (camc314)
- 4ef0ceb linter/eslint/no-useless-switch-case: Avoid temporary vec
allocations (#23489 ) (camc314)
- 2e09dd3 linter: Avoid JSX fragment child collections (#23486 )
(camc314)
- f30a64c linter/oxc/branches-sharing-code: Borrow shared branch
suggestion text (#23484 ) (camc314)
- 097a317 linter/eslint/no-control-regex: Retain control regex
candidates in place (#23482 ) (camc314)
- b3a093d linter: Reuse rule dispatch buckets (#23450 ) (camc314)
- 9f1a985 oxlint: Start Tokio only for LSP (#23447 ) (camc314)
### 📚 Documentation
- 9e219de linter/plugins: Update usage instruction (#23495 ) (Tony)
- b50bf4d linter: Remove manually written options doc for
`eslint/arrow-body-style` (#23490 ) (Mikhail Baev)
# Oxfmt
### 💥 BREAKING CHANGES
- 36009dd allocator: [**BREAKING**] `GetAllocator::allocator` take
`&self` (#23676 ) (overlookmotel)
### 🐛 Bug Fixes
- f21ed2c formatter_json: Normalize CRLF for suppressed text (#23702 )
(leaysgur)
- 7cd1737 formatter: Normalize CRLF for suppressed text (#23701 )
(leaysgur)
- a36e444 formatter: Member chain panic when tail is merged with comment
in dev build (#23698 ) (leaysgur)
- 600d306 formatter: Preserve parens with default export and type cast
(#23697 ) (leaysgur)
- 61290f2 formatter: Single-member intersection/union type with comment
formatting (#21915 ) (Leonabcd123)
- 5a1b0b4 formatter: Parenthesize a type assertion used as the base of
`**` (#23633 ) (Jerry Zhao)
- 91827e2 formatter: Use `Ordering::reverse()` with `order: desc` for
idempotency (#23543 ) (leaysgur)
- 8fa7394 formatter_json: Handle wrapped error span (#23472 ) (leaysgur)
- 37a34a1 oxfmt/lsp: Avoid newlines line ending changes (#23463 ) (Sysix)
### ⚡ Performance
- 80f1697 formatter: Avoid arena copy for already-lowercase bigint
literals (#23534 ) (Yunfei He)
- 1a40b71 formatter: Avoid arena copy for borrowed numeric-literal text
(#23512 ) (Yunfei He)
- 12e4451 formatter: Avoid arena copy for borrowed string-literal text
(#23465 ) (Yunfei He)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-06-22 19:49:06 +08:00
oxc-guard[bot]
aa79b5be99
release(apps): oxlint v1.70.0 && oxfmt v0.55.0 ( #23442 )
...
# Oxlint
### 🚀 Features
- 5e1627d linter/unicorn: Flag all Error() calls without new in
`throw-new-error` (#23363 ) (Cason Kervis)
- 2e8bda4 linter/vue: Implement no-dupe-keys rule (#23350 ) (bab)
- 1490a0a linter/react: Implement react-compiler rule (#23202 ) (Boshen)
- dd560ae linter/unicorn: Implement `no-array-fill-with-reference-type`
rule (#23397 ) (Mikhail Baev)
- af36c2f linter: Add schema for `react/jsx-curly-brace-presence`
(#23400 ) (WaterWhisperer)
- 47d34a3 linter: Add schema for `react/jsx-handler-names` (#23393 )
(WaterWhisperer)
- f4250d0 linter: Add schema for `unicorn/import-style` (#23386 )
(WaterWhisperer)
- 30c74ce linter: Add schema for
`jsx_a11y/no-noninteractive-element-to-interactive-role` (#23384 )
(Sysix)
- cfbe8dc linter: Add schema for
`jsx_a11y/no-interactive-element-to-noninteractive-role` (#23382 )
(WaterWhisperer)
- d15b7ff linter: Add schema for `typescript/no-restricted-types`
(#23381 ) (WaterWhisperer)
- 028a811 linter: Add schema for `jsx-a11y/media-has-caption` (#23377 )
(Sysix)
- b3b1038 linter: Add schema for `jsx-a11y/label-has-associated-control`
(#23376 ) (Sysix)
- 7ada6b2 linter: Add schema for `jsx_a11y/no-distracting-elements`
(#23379 ) (WaterWhisperer)
- ee3dd49 linter: Add schema for `jsx-a11y/img-redundant-alt` (#23374 )
(Sysix)
- df5f8dd linter: Add short descriptions to most lint rules. (#23365 )
(Connor Shea)
- e3fd735 linter: Add schema for `jsx_a11y/alt-text` (#23369 ) (Sysix)
- 0f2fff4 linter: Add schema for `react/exhaustive-deps` (#23372 )
(Mikhail Baev)
- e3e4e10 linter: Add schema for `react_perf/jsx-no-new-object-as-prop`
(#23368 ) (Mikhail Baev)
- 9366d44 linter: Add schema for `unicorn/prefer-at` (#23366 )
(WaterWhisperer)
- f57b55d linter: Add schema for `typescript/array-type` (#23355 )
(Sysix)
- 0dcf912 linter: Add schema for `typescript/ban-ts-comment` (#23354 )
(Sysix)
- 51fa83e linter: Add schema for `react/no-did-update-set-state`
(#23357 ) (Mikhail Baev)
- 59db0bd linter: Add schema for `consistent-generic-constructors`
(#23353 ) (Sysix)
- c4775c0 linter: Add schema for `typescript/consistent-type-assertions`
(#23349 ) (Sysix)
- 6e516f7 linter: Add schema for `typescript/consistent-type-imports`
(#23348 ) (Sysix)
- 012134d linter: Add schema for `react/jsx-no-target-blank` (#23345 )
(WaterWhisperer)
- 0806aae linter: Add schema for `jsx_a11y/no-noninteractive-tabindex`
(#23337 ) (Mikhail Baev)
- 0708b5a linter: Add schema for `react/jsx-filename-extension` (#23315 )
(Mikhail Baev)
- 150bce1 linter: Add schema for `typescript/no-empty-object-type`
(#23309 ) (Sysix)
- f9e36f1 linter: Add schema for
`typescript/no-duplicate-type-constituents` (#23308 ) (Sysix)
- 937accf linter: Add schema for `typescript/no-invalid-void-type`
(#23307 ) (Sysix)
- 3e042b9 linter: Add schema for `typescript/no-misused-promises`
(#23306 ) (Sysix)
- da212d1 linter: Add schema for `typescript/no-unnecessary-condition`
(#23305 ) (Sysix)
- f8f0d38 linter: Add schema for `typescript/parameter-properties`
(#23304 ) (Sysix)
- 2275fc7 linter: Add schema for `typescript/prefer-nullish-coalescing`
(#23302 ) (Sysix)
- d353858 linter: Add schema for
`typescript/prefer-string-starts-ends-with` (#23301 ) (Sysix)
- 03060f5 linter: Add schema for `typescript/triple-slash-reference`
(#23300 ) (Sysix)
- 6619cee linter: Add schema for `promise/param-names` (#23298 ) (Sysix)
- 8bf108e linter: Add schema for `promise/catch-or-return` (#23297 )
(Sysix)
- 48158d0 linter: Add schema for `vitest/consistent-each-for` (#23294 )
(Sysix)
- 7e74c98 linter: Add schema for `vitest/consistent-test-filename`
(#23293 ) (Sysix)
- ff94d4a linter: Add schema for `vitest/consistent-vitest-vi` (#23292 )
(Sysix)
- 2409a10 linter: Add schema for `vitest/prefer-import-in-mock` (#23291 )
(Sysix)
- 3d782b7 linter: Add schema for `react/no-unstable-nested-components`
(#23287 ) (Mikhail Baev)
- 0a0bc2f linter/jsx-a11y: Add `allowedRedundantRoles` option to
`no-redundant-roles` (#22820 ) (bab)
- 80758a5 linter/vue: Implement no-side-effects-in-computed-properties
rule (#23282 ) (bab)
- e3869ac linter: Add schema for `react/no-object-type-as-default-prop`
(#23279 ) (Mikhail Baev)
- 4480609 linter: Add schema for `react/jsx-props-no-spreading` (#23276 )
(Mikhail Baev)
- 08d68a5 linter/react: Implement `jsx-no-literals` rule (#23145 )
(kapobajza)
- 9a2788b linter/unicorn: Implement `prefer-export-from` rule (#22935 )
(AliceLanniste)
- bdb723c linter/unicorn: Implement prefer-single-call rule (#23235 )
(Yuzhe Shi)
- 31543ed linter: Add schema for `vue/define-props-destructuring`
(#23252 ) (Sysix)
- 21b6c3d linter: Add schema for `oxc/no-async-endpoint-handlers`
(#23251 ) (Sysix)
- e77ff81 linter: Add schema for `unicorn/prefer-object-from-entries`
(#23249 ) (Mikhail Baev)
- bcac2d6 linter: Add schema for `jest/vitest/no-restricted-matchers`
(#23247 ) (Sysix)
- 539f036 linter: Add schema for `jest/vitest/no-restricted-*-methods`
(#23246 ) (Sysix)
- dd1b927 linter/vue: Implement require-default-prop rule (#22951 ) (bab)
- 3f018e7 linter: Add schema for `unicorn/no-instanceof-builtins`
(#23225 ) (Mikhail Baev)
- 5b9a793 linter/react-perf: Support `nativeAllowList` config (#22996 )
(Cole Ellison)
- b4e19d4 linter: Improve promise/catch-or-return termination
diagnostics (#23218 ) (camc314)
- 9b72a41 linter/promise/catch-or-return: Add support for
`allowThenStrict` option (#23206 ) (camc314)
- e0d0f78 linter: Verify promise/no-callback-in-promise schema (#23141 )
(beanscg)
- 123d4f4 linter: Add schema for `jest/vitest/valid-expect` (#23185 )
(Sysix)
- 46c8a21 linter: Add schema for
`jest/vitest/require-top-level-describe` (#23184 ) (Sysix)
- 41465cf linter: Add schema for `jest/vitest/prefer-snapshot-hint`
(#23183 ) (Sysix)
- d068b9b linter: Add schema for `jest/vitest/prefer-expect-assertions`
(#23181 ) (Sysix)
- 064a1ee linter: Add schema for `jest/prefer-ending-with-an-expect`
(#23180 ) (Sysix)
- d046797 linter: Add schema for `jest/vitest/no-standalone-expect`
(#23179 ) (Sysix)
- 137b9a6 linter: Add schema for `jest/vitest/no-large-snapshots`
(#23178 ) (Sysix)
- 0f3e4a5 linter: Add schema for `jest/vitest/no-hooks` (#23177 ) (Sysix)
- 00244d8 parser: Report definite property initializer errors (#23160 )
(camc314)
- cd0b384 linter: Add schema for `unicorn/explicit-length-check`
(#23155 ) (Mikhail Baev)
- 01b74c4 linter: Add schema for `jest/no-deprecated-functions` (#23136 )
(Sysix)
- 9d6a387 linter: Add schema for `unicorn/catch-error-name` (#23137 )
(Mikhail Baev)
- 0da8efa linter: Add schema for `jest/vitest/max-nested-describe`
(#23131 ) (Sysix)
- d71c9fd linter: Add schema for `eslint/no-use-before-define` (#23129 )
(Sysix)
### 🐛 Bug Fixes
- 019be2e linter/unicorn: Align throw-new-error parity (#23437 )
(camc314)
- b9e5e51 linter/jest: Validate no-restricted-jest-methods config
(#23436 ) (camc314)
- f302f41 linter: Normalize oxlint jsPlugin prefixes (#23335 ) (konh)
- 2bdf8ce linter/jest: Validate no-restricted-matchers config (#23434 )
(camc314)
- 5c2fb45 linter/eslint: Validate max-depth config (#23430 ) (camc314)
- eafc280 linter/eslint: Validate no-unused-vars config (#23433 )
(camc314)
- 25aebb0 linter/typescript: Validate no-empty-object-type config
(#23432 ) (camc314)
- 7cafe3b linter/unicorn: Validate catch-error-name config (#23431 )
(camc314)
- af1b897 linter/unicorn: Validate prefer-object-from-entries config
(#23429 ) (camc314)
- 68d48fe linter/eslint: Validate max-classes-per-file config (#23428 )
(camc314)
- 02932b6 linter/eslint: Validate `complexity` config (#23427 ) (camc314)
- 375e574 linter/eslint: Use shared id-length regex config (#23426 )
(camc314)
- ba3e2e0 linter/eslint: Preserve used imports in no-unused-vars fixer
(#23425 ) (camc314)
- 26ddac6 linter: Avoid config schema generation for
`jsx_a11y/no-noninteractive-element-interactions` (#23385 ) (Sysix)
- 40556ad linter: Parse `jsx-a11y/control-has-associated-label` config
with `DefaultRuleConfig` (#23373 ) (Sysix)
- dacbda8 linter/unicorn/prefer-string-starts-ends-with: Mark rule as
deprecated (#23342 ) (camc314)
- 956309a lsp: Use protocol line breaks for positions (#23329 ) (konh)
- 71e9648 linter: Expose no-noninteractive-element-interactions schema
(#23283 ) (camc314)
- 4c4c19c linter: `no-noninteractive-element-interactions` fix default
values (#23288 ) (Sysix)
- e63a139 linter/jsx-a11y: Restore control label defaults (#22737 )
(konh)
- 0e4e59f linter/jsx-a11y: No-redundant-roles attribute-aware implicit
roles for `<input>`, skip ancestor-conditional elements (#23015 ) (Gaurav
Dubey)
- 06e215e linter/vitest: Validate `consistent-each-for` config (#23278 )
(camc314)
- cd278e1 linter/promise: Validate param-names config (#23277 ) (camc314)
- 7f46013 linter/react/display-name: Handle default export function
correctly (#23271 ) (camc314)
- 22ff6a6 linter/unicorn: Deserialize filename-case config with serde
(#23266 ) (camc314)
- b644da0 linter/eslint: Add fixer for `sort_vars` (#23262 ) (Cason
Kervis)
- 778af4d linter/unicorn: Support array of patterns for
`unicorn/filename-case` `ignore` option (#23260 ) (kapobajza)
- 127fb2c linter: Deserialize rule config with serde for
`unicorn/prefer-object-from-entries` (#23253 ) (Sysix)
- f89b909 linter/react/jsx-no-target-blank: Handle compound conditions
(#23245 ) (camc314)
- c30419a linter/typescript: Deserialize rule config with serde for
`consistent-generic-constructors` (#23238 ) (camc314)
- 7d17d37 linter/react: Report invalid exhaustive-deps config (#23239 )
(camc314)
- 1060186 linter/eslint: Add `deny_unknown_fields` to
`prefer-destructuring` (#23237 ) (camc314)
- fd2e4eb linter/react: Add `deny_unknown_fields` to `exhaustive-deps`
(#23236 ) (camc314)
- 6c3c904 linter/react/jsx-curly-brace-presence: Avoid false positive
with comment within braces (#23234 ) (camc314)
- 6c86d1c linter/react-perf: Correct nativeAllowList all schema (#23229 )
(camc314)
- c393760 linter/react/rules-of-hooks: Align try/catch semantics
(#23221 ) (camc314)
- 4dd52de linter/react-perf: Re-generate stale snapshots (#23228 )
(camc314)
- de2d23b linter/unicorn/prefer-dom-node-dataset: Preserve optional
chaining in fixer (#23148 ) (Bruno Carvalho)
- d7038de linter/react/exhaustive-deps: Ignore non `React` namespace
hooks (#23175 ) (camc314)
- 7111903 linter/react/exhaustive-deps: FP with wrapped literal
expressions (#23172 ) (camc314)
- 93326e7 linter/react: Align hook errors with anonomous async callbacks
(#23158 ) (camc314)
- 8f3db61 linter: Allow options for `eslint/capitalized-comments`
(#23139 ) (Sysix)
- f533565 linter: Support nofunc string option in no-use-before-define
(#23115 ) (bab)
### ⚡ Performance
- f09707e linter: `jest/no-deprecated-functions` store config version as
`usize` (#23138 ) (Sysix)
- da1a6c6 diagnostics: Migrate to allocation-optimized oxc-miette
(#23094 ) (Boshen)
### 📚 Documentation
- f682e25 linter: Remove manually written options doc for
`eslint/prefer-arrow-callback` (#23438 ) (Mikhail Baev)
- 64c942c linter: Remove manually written options doc for
`eslint/no-sequences` (#23420 ) (Mikhail Baev)
- d6d1189 linter: Add `short_descriptions` to more rules (#23417 )
(Connor Shea)
- b979722 linter: Clarify valid-define-emits description (#23408 )
(camc314)
- ccd0a69 linter: Clarify only-used-in-recursion description (#23407 )
(camc314)
- b0fd30b linter: Clarify no-sync-scripts description (#23406 ) (camc314)
- c23290d linter: Clarify no-cycle description (#23405 ) (camc314)
- 3612e0b linter: Clarify no-nodejs-modules description (#23403 )
(camc314)
- c67c5b1 linter: Clarify no-misused-new description (#23402 ) (camc314)
- 88bf0bc linter: Clarify require-render-return description (#23401 )
(camc314)
- 9fff263 linter: Add short descriptions to more rules that lacked them
(#23389 ) (Connor Shea)
- ac69042 linter: Add short_description fields to more lint rules
(#23391 ) (Connor Shea)
- 99a3c78 linter: Add info for more skipped rule schemas (#23380 )
(Sysix)
- c966384 linter: Fix the example of `unicorn/prefer-string-replace-all`
(#23367 ) (Liang)
- 2120ecf linter: Describe problems on not verified rules schema
(#23351 ) (Sysix)
- 14abf32 linter/react-perf: Use autogenerated docs (#23227 ) (camc314)
# Oxfmt
### 🚀 Features
- 9a2788b linter/unicorn: Implement `prefer-export-from` rule (#22935 )
(AliceLanniste)
- 0c6fb23 oxfmt: Format `parser:json-stringify` files by
`oxc_formatter_json` (#23194 ) (leaysgur)
- 8cc82c4 formatter_json: Implement json-stringify variant (#23192 )
(leaysgur)
### 🐛 Bug Fixes
- 956309a lsp: Use protocol line breaks for positions (#23329 ) (konh)
- 769de65 oxfmt: Handle compound json extensions (#23198 ) (leaysgur)
- b0b5d39 formatter_json: Support JSON5/JSON6 value in json/jsonc/json5
(#23193 ) (leaysgur)
### 📚 Documentation
- 4986613 formatter_json: Update AGENTS.md (#23199 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-06-15 13:58:15 +01:00
renovate[bot]
e745892d4c
chore(deps): update napi ( #23394 )
...
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/ ) |
[Adoption](https://docs.renovatebot.com/merge-confidence/ ) |
[Passing](https://docs.renovatebot.com/merge-confidence/ ) |
[Confidence](https://docs.renovatebot.com/merge-confidence/ ) | Type |
Update |
|---|---|---|---|---|---|---|---|
| [@napi-rs/cli](https://napi.rs/ )
([source](https://redirect.github.com/napi-rs/napi-rs )) | [`3.7.1` →
`3.7.2`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.7.1/3.7.2 ) |

|

|

|

| pnpm.catalog.default | patch |
| [napi](https://crates.io/crates/napi ) | `3.9.1` → `3.9.2` |

|

|

|

| workspace.dependencies | patch |
---
### Release Notes
<details>
<summary>napi-rs/napi-rs (@​napi-rs/cli)</summary>
###
[`v3.7.2`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.1...@napi-rs/cli@3.7.2 )
[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.1...@napi-rs/cli@3.7.2 )
</details>
---
### Configuration
📅 **Schedule**: (in timezone Asia/Shanghai)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions ) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/oxc-project/oxc ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com >
2026-06-14 14:10:12 +01:00
leaysgur
1228a0e968
refactor(oxfmt): load native bindings lazily for API ( #23144 )
...
Also fixes #23125
2026-06-09 03:47:48 +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
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
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
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
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
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
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
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
oxc-guard[bot]
557020642e
release(apps): oxlint v1.66.0 && oxfmt v0.51.0 ( #22528 )
...
# Oxlint
### 🚀 Features
- 1ae291e linter/no-underscore-dangle: Add `allowInUsingDeclarations`
option (#22483 ) (吴杨帆)
- 0440b0f linter/eslint: Implement `id-match` rule (#22379 ) (Vladislav
Sayapin)
- 65bf119 linter: Implement react no-object-type-as-default-prop
(#22481 ) (uhyo)
- 2a6ddce linter/eslint: Implement `no-implied-eval` rule (#22391 )
(Vladislav Sayapin)
- d3a3c1d linter: Auto detect agents from CLI and transition to the
agent output format (#22068 ) (Jovi De Croock)
- 625758a linter/vitest: Implement padding-around-after-all-blocks rule
(#21788 ) (kapobajza)
- 37680b0 linter: Implement react no-unstable-nested-components (#22248 )
(Jovi De Croock)
- d8d9c74 linter: Implement import/newline-after-import rule (#19142 )
(Ryuya Yanagi)
### 🐛 Bug Fixes
- 3f59e03 linter: Only call rayon/miette/tracing inits once (#21899 )
(Matiss Janis Aboltins)
- 602dfd6 linter/promise/no-return-wrap: Detect Promise calls in all
branches (#22474 ) (zennnnnnn11)
- e182aee linter: Allow dialogs and popovers for no_autofocus (#22289 )
(mehm8128)
- 7ffb710 linter/jest/vitest: Jest/no-standalone-expect ignores
additionalTestBlockFunctions option for jest/vitest hooks (#22477 )
(kapobajza)
- c6f2d3f linter: Add more expression support for iframe-has-title
(#22460 ) (mehm8128)
- 5747ff1 linter: Avoid enabling jest with vitest plugin (#22499 )
(camc314)
- 863984f linter/no-find-dom-node: Run on all files (#22479 ) (bab)
### ⚡ Performance
- 2afef79 linter: Optimize `no-loop-func` (#22491 ) (camchenry)
- 4c9ca72 oxlint: Align walker thread count with rayon pool (#22494 )
(Boshen)
### 📚 Documentation
- f7967c7 linter/id-match: Clarify `onlyDeclarations` config docs
(#22523 ) (camc314)
- 1e0c97f linter: Fix closing code block in documentation for
`padding-around-after-all-blocks` rule. (#22513 ) (connorshea)
- a9049fd linter: Exclude directly provide autoFocus to dialog pattern
(#22510 ) (mehm8128)
# Oxfmt
### 🐛 Bug Fixes
- 8ee946f formatter/sort_imports: Use label to classify lines (#22512 )
(leaysgur)
- 8c1da44 formatter: Normalize destructuring keys in DCR (#22478 )
(camc314)
2026-05-18 12:09:34 +01:00
leaysgur
dcc6d38330
refactor(oxlint,oxfmt): Use shared/importJsConfig for js config ( #22453 )
...
Consolidate the following parts:
- Using native `import()`s
- Specifying `cacheKey`
- Extracting default exports
- Returning hints for TS incompatibility errors
2026-05-18 08:05:48 +00:00
leaysgur
37d49fcd40
refactor(oxlint,oxfmt): Share src-js code via apps/shared ( #22452 )
...
New place to share code for use in `src-js`, similar to how `crates/oxc_config` works.
Initially, I considered creating an `apps/oxc_cli` and moving `crates/oxc_config` there. However, it felt unnatural deps for `crates/oxc_linter` -> `apps/oxc_cli`, so I decided to keep the Rust code as is for now and share only the JS code.
Since `apps/shared` exports `.ts` files directly, each app is responsible for bundling them via `@oxapps/shared`. Tests still live in `apps/shared`, so separate CI is also added and hooked by each app.
To start, I've only shared the function that reports TS incompatibility errors. This is just for verification purposes and will be fixed in a later PR.
2026-05-18 07:56:26 +00:00
leaysgur
f6114d3f48
refactor(oxfmt): Drop unused resolvePlugins stub ( #22518 )
2026-05-18 06:31:22 +00:00
oxc-guard[bot]
25e5cbc76f
release(apps): oxlint v1.65.0 && oxfmt v0.50.0 ( #22458 )
...
# Oxlint
### 🚀 Features
- 5478fb5 linter/jsdoc: Implement `require-throws-description` rule
(#22386 ) (Mikhail Baev)
- b46d4de linter: Add `--debug` options and add per-rule timing info
(#22282 ) (camchenry)
- c73225e linter/eslint: Implement `prefer-arrow-callback` rule (#22312 )
(박천(Cheon Park))
- de82b59 linter: Add support for `eslint-plugin-jsx-a11y-x` (#22356 )
(mehm8128)
- b170da3 linter: Implement no-implicit-globals (#22249 ) (Jovi De
Croock)
- f44b6c8 linter: Fill schemas `DummyRuleMap` with built-in rules
(#22288 ) (Sysix)
- 5cdb80d linter/jsx-a11y/: Implement
no-interactive-element-to-noninteractive-role (#22332 ) (anarefolio)
- 2749422 linter/jsx-a11y: Add no-noninteractive-element-interactions
(#22337 ) (Pablo Tovar)
- ba2a1d3 linter/jsdoc: Implement `require-throws-type` rule (#22358 )
(Mikhail Baev)
- d90729d linter/jsx-a11y: Implement control-has-associated-label
(#21985 ) (mehm8128)
- 1d04903 linter/jsdoc: Implement `require-yields-type` rule (#22331 )
(Mikhail Baev)
### 🐛 Bug Fixes
- 04c4609 linter/no-nullable-type-assertion-style: Mark as suggestion
(#22450 ) (camc314)
- 1c2b7ec linter/no-unused-vars: Handle shadowed self assignments
(#22387 ) (camc314)
- 9faa1d5 linter/no-noninteractive-tabindex: Check conditional
expressions (#22435 ) (camc314)
- 0854b3a linter/prefer-arrow-callback: Preserve TSX generic arrows in
fixer (#22434 ) (camc314)
- 410b814 linter: Supply `source_type` to codegen fixer (#22433 )
(camc314)
- 3c1bb6f linter: Skip per-node dispatch for run_once-only rules in
large files (#22398 ) (Connor Shea)
- 5206cde linter/no-unused-vars: Improve type-only rest parameters
diagnostic (#22385 ) (camc314)
- c9a22b5 linter/consistent-function-scoping: Allow imported bindings
(#22384 ) (camc314)
- c1e966d linter: Report type-only unused parameters in no-unused-vars
(#22368 ) (camchenry)
- 4818d98 linter: Check whether path is under root before ignoring it
(#20101 ) (Leonabcd123)
- 41fcdcf linter: Fix rule count not including override rules (#19898 )
(Daniel Osmond)
- 59b4f0e linter: Fix 'explicit-module-boundary-types' false positive
with 'allowOverloadFunctions' (#22341 ) (camchenry)
### ⚡ Performance
- 6d42395 linter: Narrow no-unsafe-optional-chaining dispatch (#22437 )
(camchenry)
- 08595fb linter: Optimize no-unreachable (#22397 ) (camchenry)
- 3b46a8d linter: Optimize `no-loss-of-precision` (#22395 ) (camchenry)
- b3e2dc9 linter: Optimize `oxc/bad-array-method-on-arguments` (#22393 )
(camchenry)
### 📚 Documentation
- dcbf62c linter: Remove some duplicate spaces (#22359 ) (camc314)
# Oxfmt
### 💥 BREAKING CHANGES
- 21bb5d1 oxfmt: [**BREAKING**] Avoid config pre-scan (#22258 )
(leaysgur)
### 🐛 Bug Fixes
- 441d724 oxfmt: Fix "race probe" logic with unit tests (#22378 )
(leaysgur)
- e49ee26 formatter: Respect `singleQuote` for jsdoc `import()` type
paths (#22353 ) (Colin Lienard)
- 43b9978 formatter/sort_imports: Treat subpath imports as internal
(#22440 ) (leaysgur)
- 7c5cfa0 formatter: Handle jsx trailing comment with parens (#22370 )
(leaysgur)
- ac5f120 formatter: Fix erroneous formatting inside a template literal
with parentheses (#22262 ) (Jovi De Croock)
- 3c53a95 formatter/sort_imports: Handle ignore comment as boundary
(#22369 ) (leaysgur)
- 4dd83dd oxfmt: Send expandedStates variants as shared refs (#22366 )
(leaysgur)
- 055cc61 formatter: Expand JSX logical chain with leading line comment
(#22346 ) (leaysgur)
- 8046222 formatter: Preserve type alias comment break (#22261 ) (Jovi De
Croock)
### ⚡ Performance
- 123c493 oxfmt: Reduce more syscalls (#22380 ) (leaysgur)
Co-authored-by: overlookmotel <557937+overlookmotel@users.noreply.github.com >
2026-05-15 15:40:11 +01:00
leaysgur
43b997847b
fix(formatter/sort_imports): Treat subpath imports as internal ( #22440 )
...
Closes #22371 , follows https://github.com/azat-io/eslint-plugin-perfectionist/pull/732
---
As a baseline, while the result effectively follows the behavior of a perfectionist, there is no fundamental reason why it must be done that way.
Node.js subpaths are more flexible and aren't necessarily "internal", you can also alias external modules.
However, I do think it's consistent in the sense that it treats them the same way as other conventions like `@`.
2026-05-15 00:45:24 +00:00
leaysgur
4dd83ddaa0
fix(oxfmt): Send expandedStates variants as shared refs ( #22366 )
...
Fixes #22350
Currently, the js-in-vue process involves formatting the code on the Rust side using `oxc_formatter`, converting it into an IR, transforming that into a Prettier `Doc`, serializing it into JSON, and then sending it to the JS side, where it is finally passed to Prettier.
Some types of `Docs` include multiple variations that are selected based on the `printWidth`, and all of these variations were being included as part of the JSON payload.
As a result, deep nesting caused the payload size to grow exponentially, leading to hangs.
This PR resolves the issue by sending these variations separately as shared references.
2026-05-13 01:55:13 +00:00