Releases: oxc-project/oxc
Releases · oxc-project/oxc
Release list
oxlint v1.64.0 & oxfmt v0.49.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.64.0
💥 BREAKING CHANGES
- 00ce512 oxlint/lsp: [BREAKING] Don't fix suggestions on fixAll code actions & command (#22195) (Sysix)
🚀 Features
- 0eeceaf linter/no-unused-vars: Rename parameter with initializer (#22308) (camc314)
- fa0232b linter/no-unused-vars: Add param rename suggestion (#22285) (Ryota Misumi)
- ae59305 linter/promise/no-promise-in-callback: Add
exemptDeclarationsoption (#22275) (Mikhail Baev) - 60bed4a linter: Extends
no-redundant-rolesandprefer-tag-over-rolesupport roles (#22069) (mehm8128) - 545c80f linter/eslint: Implement
prefer-regex-literalsrule (#22192) (Mikhail Baev) - 23abd22 linter/jsx-a11y: Implement no-noninteractive-element-to-interactive-role (#21264) (Pedro Tainha)
- fbb8f22 linter: Support
ignoresin overrides (#22148) (camc314) - 5a4414d oxlint/lsp: Support
rulesCustomizationlsp option (#21858) (Sysix)
🐛 Bug Fixes
- 0e207b5 linter: Remove bulk supressions commands from CLI help (#22328) (camc314)
- 7e93bf2 linter/import/no-named-as-default: Avoid same-binding false positive (#22321) (camc314)
- 610f4c7 linter/no-unused-vars: Avoid renaming captured vars (#22310) (camc314)
- 6b50f23 oxlint/cli: Load root config by searching up parent directories (#22272) (Sysix)
- 31a5de7 linter: Rename override
ignorestoexcludeFiles(#22283) (camc314) - 26d5d7b linter: Add missing vitest/valid-describe-callback functionality (#22279) (camchenry)
- 784530f linter:
valid-title: detectString.rawstrings (#22271) (Sysix) - 080d90e linter: Move
no-debuggerfix to suggestion (#22256) (Sysix) - 25b7017 linter: Undocument override
ignoresoption (#22213) (camc314) - 7bb00dd linter: Fix role-has-required-aria-props (#22097) (mehm8128)
- d25279e linter/disable-directives: Improve parsing of names, descriptions (#22184) (camc314)
- a59e447 linter/disable-directives: Ignore invalid enable suffixes (#22179) (camc314)
- aafef0f ci: Disable bulk supression test on big endian (#22175) (camc314)
- 281daec linter/vue/define-props-destructuring: Add
only-when-assignedconfig opt (#22142) (camc314) - 46ab679 linter/plugins: Trim leading newline for partial sources (#20928) (bab)
- 29ff6d9 linter: Update docs for no_alias_methods rule to be Vitest-specific and add toThrowError alias (#22129) (camchenry)
⚡ Performance
- 9414bee linter/role-has-required-aria-props: Avoid intermediate vec (#22212) (camc314)
- 3883ea3 linter/no-useless-escape: Drop unnecessary Vec collect (#22171) (connorshea)
- 42c3029 linter/check-property-names: Replace split-collect-pop-join with rfind (#22172) (connorshea)
- 9551d53 linter: Remove unnecessary Vec collect in CFG edge traversal (#22167) (connorshea)
- 26fa2fc linter/aria-role: Remove unnecessary string allocations in run method (#22168) (connorshea)
- c9ce045 linter/getter-return: Remove unnecessary Vec collect in CFG edge traversal (#22166) (connorshea)
- 72bd846 linter/no-this-in-sfc: Reorder cheap name check, avoid String allocation (#22164) (connorshea)
📚 Documentation
- 4da212a linter/no-unused-vars: Add docs to
rename_unused_function_parameter(#22311) (camc314) - 27c4628 linter/forbid-dom-props: Escape jsx examples in lint rule docs (#22254) (4MBL)
- 3f81147 linter: Improve the
react/jsx-keyrule docs. (#22162) (connorshea) - 07f03cc linter/consistent-return: Add note about
noImplicitReturnscoverage (#22156) (camc314) - 7c1e049 oxlint/lsp: Improve autogenerated lsp docs (#22154) (Sysix)
- 87b3e38 linter: Update docs to be vitest-specific for consistent-test-it (#22128) (camchenry)
Oxfmt v0.49.0
💥 BREAKING CHANGES
🚀 Features
🐛 Bug Fixes
⚡ Performance
- b756682 oxfmt: Optimize nested config prescan (#22232) (Jovi De Croock)
- f14e81e formatter/sort_imports: Skip sort for single import runs (#22204) (leaysgur)
- 32255b1 formatter: Process
ImportDeclarations in a run (#22079) (overlookmotel)
📚 Documentation
oxc crates_v0.129.0
Immutable
release. Only release title and notes can be modified.
💥 BREAKING CHANGES
🚀 Features
🐛 Bug Fixes
- 81e834c parser: Prevent multiple
Parserinstances in binary (#22120) (overlookmotel) - 429deac napi/parser: Export
visitorKeysfromwasmentrypoint (#21996) (NullVoxPopuli) - e852911 codegen: Preserve legal comments orphaned by upstream passes (#21575) (Dunqing)
- e3399ec transformer/class-properties: Preserve RHS in logical-assignment to static private field (#21950) (Dunqing)
- c59c199 transformer/typescript: Emit class fields for parameter properties (#21831) (Dunqing)
- aaabde4 parser: Attach legal comments to following token (#21670) (Dunqing)
⚡ Performance
📚 Documentation
oxlint v1.63.0 & oxfmt v0.48.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.63.0
🚀 Features
- 1884833 linter/plugins: Implement
SourceCode.getDisableDirectivesmethod (#21029) (Nicolas Le Cam) - 00f9a9d linter/sort-keys: Support autofix with comments (#22061) (Amund Eggen Svandal)
- 5b9ea93 linter/eslint: Implement
require-unicode-regexprule (#22096) (Mikhail Baev) - 1d40d60 linter: Implement SARIF formatter (#22067) (camchenry)
- c0982fe linter/eslint: Implement no-restricted-properties rule (#22080) (AJ Bienz)
- 5699d53 linter: Add help text to
agentformatter (#22064) (camchenry) - fe7194d oxlint: Add agent output mode (#21955) (Jovi De Croock)
- fb2f052 linter: Suggest moving shared branch code (#22022) (camc314)
- 5868335 linter/no-else-return: Improve nested if diagnostic spans (#22009) (camc314)
- 8b4829b linter: Split
no-negated-conditionrule to unicorn & eslint (#21998) (Sysix) - fea301a linter: Split jest/prefer-to-be into separate vitest rule (#21977) (camchenry)
- 44aa0d6 linter: Split jest/prefer-strict-equal into separate vitest rule (#21976) (camchenry)
- 2262b27 linter: Split jest/prefer-spy-on into separate vitest rule (#21975) (camchenry)
- fef9143 linter: Split jest/prefer-mock-return-shorthand into separate vitest rule (#21974) (camchenry)
- 2bda504 linter: Split jest/prefer-mock-promise-shorthand into separate vitest rule (#21973) (camchenry)
- 6ef6c7d linter: Split jest/prefer-lowercase into separate vitest rule (#21972) (camchenry)
- f4d2498 linter: Split jest/prefer-hooks-on-top into separate vitest rule (#21971) (camchenry)
- fb8e366 linter: Split jest/prefer-hooks-in-order into separate vitest rule (#21970) (camchenry)
- adcd85c linter: Split jest/prefer-expect-resolves into separate vitest rule (#21969) (camchenry)
- 8ddc7ec linter: Split jest/prefer-equality-matcher into separate vitest rule (#21968) (camchenry)
- 46bb1f3 linter: Split jest/prefer-each into separate vitest rule (#21967) (camchenry)
- bdbff66 linter: Implement interactive-supports-focus (#21767) (mehm8128)
- 733b094 linter: Split
prefer-to-have-been-called-timesrule (#21898) (Said Atrahouch) - 8804425 linter/eslint: Implement
logical-assignment-operatorsrule (#21900) (Mikhail Baev) - 296d147 linter: Split jest/prefer-comparison-matcher into separate vitest rule (#21929) (camchenry)
- 38146b6 linter: Split jest/prefer-called-with into separate vitest rule (#21927) (camchenry)
- 6f86175 linter/vue: Implement return-in-computed-property rule (#21909) (bab)
- dc2d0e4 linter: Split jest/no-unneeded-async-expect-function into separate vitest rule (#21878) (camchenry)
- a03fc37 linter: Split jest/no-test-return-statement into separate vitest rule (#21877) (camchenry)
- f11313e linter: Split jest/no-test-prefixes into separate vitest rule (#21876) (camchenry)
- 4380812 linter: Split
prefer-to-have-lengthrule (#21893) (Said Atrahouch) - 511bcc1 linter: Split jest
require-hookrule (#21889) (Said Atrahouch) - 64a8180 linter: Split
jest/prefer-snapshot-hintinto a Jest rule and a Vitest rule. (#21881) (connorshea) - ae7924a linter/vue: Implement no-deprecated-model-definition rule (#21886) (bab)
- 0dfe8b3 linter: Split
jest/require-to-throw-messageinto Jest and Vitest rules. (#21879) (connorshea) - 51229ff linter: Split jest
valid-describe-callbackrule (#21882) (Said Atrahouch) - 2d102fd linter: Split
no-standalone-expectrule into jest and vitest (#21862) (Sysix) - ee46a29 linter: Split
no-restricted-matchersrule into jest and vitest (#21860) (Sysix) - 1f29459 linter: Split
no-restricted-jest-methodsrule into jest and vitest (#21859) (Sysix) - e7f8d55 linter: Remove eslint prefixes from plugin names in diagnostics (#21806) (Connor Shea)
- 89fff8b linter: Split valid-expect-in-promise/jest rule into jest and vitest rules (#21854) (Said Atrahouch)
🐛 Bug Fixes
- 7c9bf88 linter/no-single-promise-in-promise-methods: Avoid unused array fix (#22116) (camc314)
- 0b48848 linter/prefer-array-some: Make find rewrite a suggestion (#22103) (camc314)
- d24027e linter/prefer-array-some: Preserve find comparison fixes (#22094) (camc314)
- af2d26c linter/astro: Handle js
---after frontmatter in .astro files (#22091) (Andrew Powell) - 78d4ff0 linter/jsdoc/require-returns: Only look at the nearest jsdoc block (#22077) (camc314)
- fa88857 linter/no-map-spread: Use default codegen options for fix (#22074) (camc314)
- 2047a35 linter: Treat adjacent fixes as overlapping (#22071) (camc314)
- 75fc551 linter: Handle no-extra-boolean-cast edge cases (#22031) (camc314)
- e9d5284 linter/sort-keys: Don't autofix if comment could be misplaced (#22052) (Amund Eggen Svandal)
- d7230b0 linter/no-constant-condition: Handle generator yields (#22046) (camc314)
- e8dbc56 linter/array-type: Enable edge case tests (#22047) (camc314)
- d57b51f linter/no-constant-condition: Propagate config errors (#22045) (camc314)
- bdb6d95 linter/typescript: Remove duplicate rule tests (#22044) (camc314)
- 0beaffc linter: Print resolved extended config (#22040) (camc314)
- 192ad0e linter/react/only-export-components: Align rule with upstream cases (#22039) (camc314)
- cdf4c53 linter/only-export-components: Support tanstack router (#21937) (camc314)
- 893e18f linter: Stop gitignore lookup at repo boundary (#22033) (camc314)
- 7100712 linter/constructor-super: Clarify duplicate super diagnostics (#22035) (camc314)
- fce5b7c linter/constructor-super: Improve invalid
supercalls diagnostic (#22032) (camc314) - b3de93c linter/rules-of-hooks: Clarify conditional diagnostics (#22030) (camc314)
- 4f9f629 linter/rules-of-hooks: Clarify loop diagnostics (#22029) (camc314)
- e6f0978 linter/rules-of-hooks: Clarify async component diagnostics (#22024) (camc314)
- e262f51 linter/rules-of-hooks: Improve diagnostic for hook inside class component (#22023) (camc314)
- 7b71b0d linter/no-restricted-imports: Report once per import declaration (#22021) (camc314)
- 3d5ae3d linter/vitest/require-mock-type-parameters: Handle chained typed mocks (#22019) (camc314)
- 959a2db linter/reporter/github: Omit empty
fileannotations (#22017) (camc314) - 16003a1 linter/unicorn: Remove duplicate rule tests (#22018) (camc314)
- 86b7547 linter/no-unreachable: Suppress nested unreachable diagnostics (#22011) (camc314)
- 1d92ae8 linter/oxc: Remove duplicate rule tests (#22013) (camc314)
- f270246 linter/branches-sharing-code: Ignore empty statements (#22012) (camc314)
- f1c25dd linter: Stabilize debug diagnostic comparison (#22010) (camc314)
- b6bc421 linter: Skip linting astro scripts with non JS script types (#21954) (camc314)
- a77547d linter: Support plugin-qualified disable directives (#21999) (camc314)
- 079cfdd linter: Match disable directive rule names exactly, not by substring (#21906) (Christian Vuerings)
- 11a4e67 linter: Comptibles rules need to be disabled in jest and vitest at same time (#21982) (Said Atrahouch)
- ce62f16 linter:
jsx-a11y/prefer-tag-over-roledetect more roles (#21933) (bab) - 024c390 linter/jest/vitest: Padding around after all blocks not working as expected (#21952) (kapobajza)
- 05a8f75 linter/jest/no-standalone-expect: False positive with expect in an
ObjectProperty(#21948) (Said Atrahouch) - 6a37c98 linter/no-unused-vars: Report unused re-exported imports (#21938) (camc314)
- 2d5fc16 linter:
jsx-a11y/media-has-captionreport only once for self-closing tags (#21934) (bab) - 5adca29 linter:
jsx-a11y/no-autofocusignorefalseattribute values (#21918) (Sysix) - 2e5c18e linter/max-nested-describe: Reset nested describe depth (#21891) (camc314)
⚡ Performance
- a77f0f7 linter/require-returns: Avoid jsdoc tag vec allocation (#22081) (camc314)
- d9a1b32 linter/plugins: Avoid array lookups where possible in CFG visitor (#21940) (overlookmotel)
- fefefd8 linter/plugins: Replace addition with bitwise OR in CFG visitor (#21939) (overlookmotel)
📚 Documentation
- cacbc4a linter: Fix jest settings docs. (#22127) (connorshea)
- a15c5bb linter: Note that the
--formatflag accepts anagentoption. (#22126) (connorshea) - d58f594 oxlint/lsp: Auto generate docs for LSP options (#22082) (Sysix)
- 9adc3b3 linter/no-misused-new: Clarify construct signatures behaviour (#22016) (camc314)
- 1caf5ad linter/plugins: Reformat comments (#21873) (overlookmotel)
🛡️ Security
Oxfmt v0.48.0
🐛 Bug Fixes
- ef0db6b formatter: Sequence expression in arrow function body collapses onto one line (#21183) (Justin Mecham)
- 5d5d808 formatter: Preserve blank line after directive with trailing comment (#21153) (Justin Mecham)
⚡ Performance
- 2fd907d formatter: Sort imports during IR construction (#22065) (overlookmotel)
🛡️ Security
oxc crates_v0.128.0
Immutable
release. Only release title and notes can be modified.
💥 BREAKING CHANGES
- 502e804 ast: [BREAKING] Reduce size of
TSTypePredicateName(#21711) (overlookmotel) - 5651539 ast: [BREAKING] Reduce size of
JSXExpression(#21710) (overlookmotel) - c44e280 ast: [BREAKING] Reduce size of
ArrayExpressionElement(#21709) (overlookmotel) - c5b3deb syntax: [BREAKING] Remove
CommentNodeId(#21679) (overlookmotel)
🚀 Features
- b738a39 allocator: Add
Allocator::cursor_ptrmethod (#21773) (overlookmotel) - 678767e ast: Generate node_id accessors for AST enum wrappers (#21653) (camc314)
- f091d77 minifier: Inline constant spread elements into arrays (#21095) (Armano)
🐛 Bug Fixes
- 0d608c2 minifier: Preserve raw CR in template literals (#21645) (Dunqing)
- a889ea9 minifier: Track pure functions in DCE mode (#21722) (Dunqing)
- 674dfac allocator:
Arenaretry allocation when chunk size approaches maximum (#21777) (overlookmotel) - f130cc0 allocator: Fix arithmetic overflow in
Arena::new_chunk_memory_details(#21745) (overlookmotel) - b9bf239 allocator: Fix UB in
Arena::grow_zeroed(#21739) (overlookmotel) - d2b9389 allocator: Clippy warning when building without
testingfeature (#21681) (camc314) - 503dc86 codegen: Map sourcemaps from visible output starts (#21662) (Dunqing)
- c92bd3b transformer: Use SPAN for synthesized helper calls to prevent comment misattribution (#21578) (Dunqing)
- 0d80441 codegen: Add mapping before printing
#for private ident (#21619) (camc314)
⚡ Performance
- 9fa362e napi/parser: Do not generate tokens except in tests (#21811) (overlookmotel)
- 0044392 allocator: Reduce branches when allocating new chunk (#21776) (overlookmotel)
- 7896bd0 allocator:
Allocator::used_bytesdo not use chunk iterator (#21771) (overlookmotel) - a5c562f allocator: Remove check in
Arena::new_chunk_memory_details(#21750) (overlookmotel) - 35bbe1f allocator:
Arenause unchecked size round up where guaranteed no overflow (#21743) (overlookmotel) - ffe229b allocator: Remove unnecessary check from
Arena::try_alloc_layout_slow_impl(#21732) (overlookmotel) - 72fece5 allocator: Use
NonNull::offset_from_unsignedinArena::chunk_capacity(#21731) (overlookmotel) - cab32ae ast: Add
#[inline(always)]tonode_idmethods on enums with all variants unboxed (#21707) (overlookmotel) - b179688 parser: Allocate
TriviaBuildercomments in the arena (#21512) (Boshen) - 2290f31 lexer: Fix perf of
Token::set_*methods on Rust 1.95.0 (#21659) (overlookmotel) - 1b58029 allocator: Move code into cold path in
Arena::alloc_layout(#21622) (overlookmotel) - 3cf7cef allocator: Reduce instructions on allocation hot path (#21510) (overlookmotel)
📚 Documentation
- ce65070 data_structures: Document why
as_refandas_mutonNonNullConstandNonNullMuttakeself(#21800) (overlookmotel) - 93b7dbd allocator: Improve doc comments for
ChunkFooter(#21733) (overlookmotel) - 295db8d transformer: Fix comment (#21717) (overlookmotel)
- 5c93af8 ast: Add comments explaining
#[inline(always)]tonode_idmethods on enums (#21706) (overlookmotel) - e4cea25 transform: Use the
node:namespace in the example (#19998) (루밀LuMir)
🛡️ Security
oxlint v1.62.0 & oxfmt v0.47.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.62.0
🚀 Features
- 0c0e741 linter: Implemented
prefer-expect-assertionsin Vitest and Jest (#21488) (Said Atrahouch) - e37cfc4 oxfmt/lsp: Format files outside workspace folders (#21481) (Sysix)
- b4acdbd linter/vue: Implement no-deprecated-delete-set rule (#21766) (bab)
- 613bfef linter: Split jest/prefer-to-contain into a jest and a vitest rule. (#21821) (connorshea)
- c629719 linter/vue: Implement no-deprecated-events-api rule (#21793) (Alex Peshkov)
- f2a8528 linter: Split jest/require-top-level-describe rule into a Jest and a Vitest rule. (#21822) (connorshea)
- ea4b358 linter: Split jest/prefer-todo into a shared rule and a vitest-specific rule. (#21820) (connorshea)
- 3a66819 linter: Split jest/no-mocks-import into vitest/no-mocks-import (#21818) (camchenry)
- 0b3ffce linter: Split jest/no-large-snapshots into vitest/no-large-snapshots (#21814) (camchenry)
- d1cf22e linter: Split jest/no-interpolation-in-snapshots into vitest/no-interpolation-in-snapshots (#21812) (camchenry)
- bb0c359 linter: Split jest/no-identical-title into vitest/no-identical-title (#21810) (camchenry)
- c26ea41 linter: Split jest/no-hooks into vitest/no-hooks (#21809) (camchenry)
- 46b32f2 linter: Split jest/no-focused-tests into vitest/no-focused-tests (#21804) (camchenry)
- acf41a8 linter: Split jest/no-duplicate-hooks into vitest/no-duplicate-hooks (#21803) (camchenry)
- 54d787f linter: Split jest/no-disabled-tests into vitest/no-disabled-tests (#21802) (camchenry)
- 9c9a676 linter/vue: Implement no-deprecated-data-object-declaration rule (#21764) (bab)
- 4445855 linter: Split
jest/no-conditional-in-testintovitest/no-conditional-in-test(#21763) (camchenry) - b8604de linter: Split
jest/no-conditional-expectintovitest/no-conditional-expect(#21762) (camchenry) - 0dbd650 linter: Split
jest/no-commented-out-testsintovitest/no-commented-out-tests(#21761) (camchenry) - 7f1a97c linter: Split
jest/no-alias-methodsintovitest/no-alias-methods(#21760) (camchenry) - eb97c49 linter: Split
jest/max-nested-describeintovitest/max-nested-describe(#21759) (camchenry) - d870cad linter: Split
jest/max-expectsintovitest/max-expects(#21758) (camchenry) - 1b97124 linter/vue: Implement no-deprecated-vue-config-keycodes rule (#21699) (bab)
- 5f81883 linter/eslint: Implement
func-name-matchingrule (#21708) (Mikhail Baev) - 348f46c linter: Add
respectEslintDisableDirectivesoption (#21384) (Christian Vuerings) - 63ec351 linter: Support nested vite+ config discovery (#21638) (camc314)
- 560feb4 linter: Introduce
Vitevariant toDiscoveredConfigFile(#21637) (camc314) - 07dc41e linter/eslint: Implement
no-underscore-danglerule (#21630) (Paul-Arthur THIERY) - e270d54 linter/react: Impl react/no-did-update-set-state (#17322) (Kenzo Wada)
- ca81199 linter/react: Implement
forbid-component-propsrule (#20005) (Mikhail Baev) - 6776403 linter/branches-sharing-code: Move rule from nursery to pedantic (#21621) (camc314)
- ce7a4dc linter/no-unreachable: Move rule from nursery to correctness (#21618) (camc314)
- e3b5e78 linter/getter-return: Move rule from nursery to correctness (#21617) (camc314)
- d3a7e9a linter/unicorn: Implement suggestion for
no-useless-iterator-to-arrayrule (#21610) (Mikhail Baev) - a0c883c oxlint/lsp: Add vite plus version to server info (#21587) (Sysix)
- 67ff860 linter/no-unknown-property: Support React 19
precedenceprop (#21590) (João Pedro Schmitz)
🐛 Bug Fixes
- b6dcc22 linter/valid-expect: Allow string message in Vitest valid-expect (#18975) (Cédric Exbrayat)
- cff9277 linter/valid-expect: Clarify fixer suggestion messages (#21839) (camc314)
- aace797 linter: Detect Svelte TS and module scripts correctly (#20819) (mustafa0x)
- 3612db1 linter/prefer-default-parameters: Skip reporting on object/class setters (#21836) (camc314)
- 28c3521 oxlint/lsp: Remove overlapping edits for
source.fixAllDangerous.oxccode action (#21785) (Sysix) - 705a82c linter/no-non-null-asserted-nullish-coalescing: Add fixer (#21827) (yyh)
- 33f5535 linter: Add checks that
Programis in current allocator chunk before JS plugins linting (#21774) (overlookmotel) - d122877 linter/no-extra-non-null-assertions: Add fixer (#21744) (yyh)
- 37f0731 linter:
with_plugin_vitest(true)working realiable in test mode (#21769) (Said Atrahouch) - e42e6a6 linter/role-supports-aria-props: False positive with
comboboxandhaspopup(#21725) (Leonabcd123) - e24324f linter: Iframe-has-title false positive for template literals (#21714) (Leonabcd123)
- 41a6510 linter/vitest/hoisted-apis-on-top: Only check first member (#20068) (Sidharth Vinod)
- 98ed888 linter: Check initializer for allowConstantExport in only-export-components (#20608) (Eyüp Can Akman)
- 1946e8b linter: Avoid applying override plugin categories to eslint rules (#21521) (bab)
- 3d1e83a linter: Parse
<script>tag attributes with curly braces in Svelte files (#21089) (bab) - bc6ade5 linter: Report actual disable directive prefix (#21682) (camc314)
- bf84466 linter: Respect category settings in overrides (#19411) (Connor Shea)
- 52ecb45 linter/vitest: Don't treat
test.extendorit.extendas test functions (#21668) (Said Atrahouch) - aa1a00c linter: Support jsx-a11y attributes setting in anchor-is-valid rule (#21665) (camchenry)
- 30e0ad3 linter/prefer-default-parameters: Preserve TS annotations in fixer (#21655) (camc314)
- 8c425db linter: Allow string for jest version in config schema (#21649) (camc314)
- 3617864 linter/react/display-name: Fix false positive for named default class (#21643) (Mikhail Baev)
- f3a02cc linter/no-non-null-assertion: Improve diagnostic message (#21616) (Cameron)
- c2ada2c linter: Make
--fix-dangerouslyfix dangerous fixes and suggestions as documented (#13366) (Ulrich Stark) - 8265ed9 linter/sort-keys: Handle CRLF separated groups (#21608) (camc314)
- 96c559e linter/no-shadow: Add note explaining enum member shadowing (#21607) (camc314)
- 3b49389 linter: No-irregular-whitespace: add config options (#21559) (camchenry)
⚡ Performance
- cdc9eae oxlint/lsp: Avoid clones on lsp options deserializion (#21748) (Sysix)
- be2db80 linter/sort-keys: Reduce allocations (#21560) (camchenry)
📚 Documentation
- 453d647 linter: Remove now-unnecessary compatibility notes from shared Jest/Vitest rules. (#21826) (connorshea)
- b1574a2 linter: Fix the configuration docs for no-underscore-dangle rule. (#21801) (connorshea)
- 6946aee linter: Remove no-longer-relevant documentation about vitest compatibility from shared Jest/Vitest rules. (#21799) (connorshea)
- 0652ea2 linter: Misc grammar cleanup for Vitest rules. (#21755) (connorshea)
- 99f0b68 linter: Improve docs for
vitest/require-mock-type-parametersrule. (#21754) (connorshea) - 9e2796b linter: Improve the docs for the
vitest/hoisted-apis-on-toprule. (#21753) (connorshea) - 2ccede2 linter: Improve function usage examples in doc comments (#21718) (overlookmotel)
- 43adae9 linter: Add version section to rules page (#21601) (camchenry)
- d15dad2 linter: Export rule version metadata (#21588) (Old Autumn)
Oxfmt v0.47.0
🚀 Features
- e37cfc4 oxfmt/lsp: Format files outside workspace folders (#21481) (Sysix)
- 3bc54a9 oxfmt: Respect nested config for
--stdin-filepath(#21627) (leaysgur) - 144f27a oxfmt: Respect ignore settings for
--stdin-filepath(#21625) (leaysgur) - 81c7ae4 oxfmt/lsp: Add vite plus version to server info (#21586) (Sysix)
🐛 Bug Fixes
- 477435b formatter/sort_imports: Keep leading blank line when decreasing group transitions (#21835) (leaysgur)
- 38d1e82 oxfmt/lsp: Format non
file://URIs without a authority (#21647) (Sysix) - 5eb8e2b formatter/sort_imports: Preserve blank lines around ignored side-effect imports (#21692) (leaysgur)
- 0dce3c6 oxfmt: Handle invalid
overridesconfig without panic (#21661) (Yuji Sugiura) - 9f82ed4 formatter: Escape backticks in JSDoc inline code spans (#21577) (bab)
⚡ Performance
oxc crates_v0.127.0
Immutable
release. Only release title and notes can be modified.
🐛 Bug Fixes
- 510e344 minifier: Drop
thisafter unconditionalsuper()in derived constructors (#21571) (Dunqing) - 67d40f8 parser: Set pure comment index after dedup check to handle lookahead/rewind (#21570) (Dunqing)
- 9eea064 minifier: Treat
thisoutside constructor as side-effect free (#21568) (Dunqing) - 385eb94 minifier: Preserve annotation comments when inlining single-use variables during DCE (#21567) (Dunqing)
- 48967e8 isolated_declarations: Drop required type check for private parameter properties on private constructors (#21515) (Dunqing)
- 91e5bde transformer/typescript: Preserve computed-key static block when class has an empty constructor (#21562) (Dunqing)
- 50e9d26 mangler: Assign correct slot to shadowed function-expression names (#21535) (Dunqing)
- 065ce47 isolated_declarations: Collect types from private accessors for paired inference (#21516) (Dunqing)
- 00fc136 codegen: Preserve coverage comments before object properties (#21312) (bab)
- d676e0c minifier: Mark LHS of
??=as read when converting from== null &&(#21546) (Gunnlaugur Thor Briem)
⚡ Performance
oxlint v1.61.0 & oxfmt v0.46.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.61.0
💥 BREAKING CHANGES
🚀 Features
- 38d8090 linter/jest: Implemented jest
versionsettings in config file. (#21522) (Said Atrahouch) - 7dbbb99 linter/eslint: Implement suggestion for
no-case-declarationsrule (#21508) (Mikhail Baev) - 9b4d9f6 linter/prefer-template: Implement autofix (#21502) (François)
- daa64ed linter/no-empty-pattern: Add
allowObjectPatternsAsParametersoption (#21474) (camc314) - cf2d281 linter/typescript: Implement explicit-member-accessibility (#21447) (Hunter Tunnicliff)
- d48de6f linter/unicorn: Add help messages to 3 rule diagnostics (#21459) (Mukunda Rao Katta)
- cffdc2e linter: Backfill rule version metadata (#21391) (Old Autumn)
🐛 Bug Fixes
- 96ede2c linter/no-useless-assignment: Preserve conditional self-reads (#21582) (camc314)
- 1e69b91 linter/no-useless-assignment: Improve diagnostic spans (#21581) (camc314)
- f272594 linter/plugins: Align
RuleMeta.replacedBytype with ESLint (#21544) (bab) - 4d57851 linter/eslint: Enhance
no-empty-functionrule to support async and generator functions in VariableDeclarator (#21542) (Mikhail Baev) - 00fc136 codegen: Preserve coverage comments before object properties (#21312) (bab)
- a56b7b9 oxlint: Dont enable gitlab formatter by default (#21501) (camc314)
- 9c9b6a2 linter/array-callback-return: Ignore non-exit CFG dead ends (#21497) (camc314)
- 61088e0 linter/unicorn: Handle computed property access in
prefer-dom-node-removerule (#21470) (Mikhail Baev) - eab5934 linter: Report an error on unsupported
extendsvalues (#21406) (John Costa) - 3289ba0 linter/valid-expect-in-promise: Check a jest fn to be
testinstead ofdescribe(#21422) (Said Atrahouch) - 4417fe3 linter/prefer-ending-with-an-expect: Ignore vi.mock factory callbacks (#21414) (Cédric Exbrayat)
- a904883 linter/consistent-type-imports: Ignore vue/svelte/astro files (#21415) (bab)
- 2498fe6 linter/no-unused-vars: Allow segments of dotted namespace declarations (#21416) (bab)
- 44b5b35 linter: Preserve vitest-compatible jest rules when applying overrides (#21389) (Cameron)
- 7bd8331 linter/prefer-ending-with-an-expect: Add missing
versiondocs (#21390) (Said Atrahouch) - 43d8f0d linter/no-useless-assignment: Ignore writes read by closures (#21380) (camc314)
📚 Documentation
- c1eeae3 linter: Add version to
rule.json(#21547) (camchenry) - 0ec6ab2 linter: Improve the
vitest/no-importing-vitest-globalsrule documentation. (#21557) (connorshea)
Oxfmt v0.46.0
💥 BREAKING CHANGES
🚀 Features
- 5aa7fe1 oxfmt: Add
--disable-nested-configCLI flag (#21514) (leaysgur) - b5cb8d1 oxfmt: Update prettier to 3.8.3 (#21451) (leaysgur)
- 16713d5 oxfmt/cli: Support per-directory config (#21103) (leaysgur)
- 952de06 oxfmt/lsp: Support per-directory config (#21081) (leaysgur)
🐛 Bug Fixes
- a501a53 formatter: Handle comments after pipe in single-member union types (#21487) (John Costa)
- 6f49fad oxfmt: Respect nested config.
ignorePatterns(#21489) (leaysgur) - 7c98d52 oxfmt: Do not panic on finding invalid nested config (#21461) (leaysgur)
- 41bb2d5 formatter: Preserve more
intrinsicparens (#21449) (leaysgur) - f894750 formatter: Preserve parens around
intrinsicin type alias annotation (#21410) (Dunqing)
⚡ Performance
oxc crates_v0.126.0
💥 BREAKING CHANGES
🚀 Features
- ce5072d parser: Support
turbopackmagic comments (#20803) (Kane Wang) - f5deb55 napi/transform: Expose
optimizeConstEnumsandoptimizeEnumsoptions (#21388) (Dunqing) - 24b03de data_structures: Introduce
NonNullConstandNonNullMutpointer types (#21425) (overlookmotel)
🐛 Bug Fixes
- d7a359a ecmascript: Treat update expressions as unconditionally side-effectful (#21456) (Dunqing)
- 56af2f4 transformer/async-to-generator: Correct scope of inferred named FE in async-to-generator (#21458) (Dunqing)
- b3ed467 minifier: Avoid illegal
var;when folding unused arguments copy loop (#21421) (fazba) - b0e8f13 minifier: Preserve
varinsidecatchwith same-named parameter (#21366) (Dunqing) - 4fb73a7 transformer/typescript: Preserve execution order for accessor with
useDefineForClassFields: false(#21369) (Dunqing)
⚡ Performance
- c22cba6 allocator: Simplify pointer calculation when creating
Arenachunks (#21475) (overlookmotel) - da3cc16 parser: Refactor out
LexerContext(#21275) (Ulrich Stark)
📚 Documentation
oxc crates_v0.125.0
💥 BREAKING CHANGES
- 36cdc31 str: [BREAKING] Remove identity
FromInimpl forIdent(#21251) (overlookmotel) - 382958a span: [BREAKING] Remove re-exports of string types from
oxc_spancrate (#21246) (overlookmotel) - c4aedfa str: [BREAKING] Add
static_ident!macro (#21245) (overlookmotel)
🚀 Features
- e7e1aea transformer/typescript: Add
optimize_enumsoption for regular enum inlining (#20539) (Dunqing) - 679f57f transformer/typescript: Implement const enum inlining and declaration removal (#20508) (Dunqing)
- 6dd061c semantic: Extend
MemberWriteTargetto cover all property modification patterns (#21205) (Dunqing) - f134e24 minifier: Support
property_write_side_effectsoption to drop unused property assignments (#20773) (Dunqing) - 75663c0 semantic: Add enum member value evaluation for const enum support (#20602) (Dunqing)
- 3cfe8ed semantic: Add
MemberWriteTargetflag toReferenceFlags(#20772) (Dunqing)
🐛 Bug Fixes
- af1a586 transformer/class-properties: Use correct property name when converting parameter properties (#21268) (Amal Jossy)
- b43250a allocator: Move allocation tracking into
Bump(#21342) (overlookmotel) - 36f505f allocator:
StringBuilderuseAllocator::alloc_layout(#21340) (overlookmotel) - 7a08a6f allocator: Fix allocation counting in
Allocator::alloc_concat_strs_array(#21336) (overlookmotel) - 2338e28 ecmascript: Treat
thisas potentially having side effects (#21297) (sapphi-red) - bd8bd39 allocator: Remove unsafe hacks from
from_raw_partsmethods (#21283) (overlookmotel) - 8f4c340 allocator: Remove dangerous pointer const to mut cast (#21279) (overlookmotel)
- aa9259f parser: Add missing error code for optional param diagnostic (#21258) (camc314)
- 04b3c2f str: Fix unsound casting const pointers to mut pointers (#21242) (overlookmotel)
- ceadf6c str: Make
Ident::from_rawan unsafe function (#21241) (overlookmotel) - eab13b3 transformer/decorators: Avoid accessor storage name collisions (#21106) (Dunqing)
- 07e8a30 transformer/react-refresh: Handle parenthesized variable initializers (#21047) (camc314)
⚡ Performance
- c3ca6f6 allocator:
StringBuilder::from_strs_array_incheck for 0 length earlier (#21338) (overlookmotel) - c2422bb allocator:
Allocator::alloc_concat_strs_arraycheck for 0 length earlier (#21337) (overlookmotel) - 04b0fdc allocator: Mark
Allocator::alloc_layoutas#[inline(always)](#21335) (overlookmotel) - 17aee9e allocator: Use
offset_from_unsignedinChunkFooter::as_raw_parts(#21280) (overlookmotel) - 61adedd minifier: Fix O(n²) perf on very many var decls (#21062) (Gunnlaugur Thor Briem)
- addcd02 napi/parser, linter/plugins: Raw transfer deserializer for
Vecs use shift instead of multiply where possible (#21142) (overlookmotel) - 3068ded napi/parser, linter/plugins: Shift before add when calculating positions in raw transfer deserializer (#21141) (overlookmotel)
- eb400b8 napi/parser, linter/plugins: Remove
uint32buffer view (#21140) (overlookmotel) - 2675085 napi/parser: Lazy deserialization use only
Int32Array(#21139) (overlookmotel) - 5b35a53 napi/parser: Deserializing tokens use only
int32array (#21138) (overlookmotel) - f163d10 parser: Tokens raw deserialization use
Int32Array(#21137) (overlookmotel) - 7a86613 linter/plugins: Use
Int32Arrays for tokens and comments buffers (#21136) (overlookmotel) - 8c51121 napi/parser, linter/plugins: Raw transfer deserialize
Spanfields asi32s (#21135) (overlookmotel) - bc1bcdd napi/parser, linter/plugins: Inline trivial raw transfer field deserializers into node object definitions (#21134) (overlookmotel)
- c0278ab napi/parser, linter/plugins: Use
Int32Arrayin raw transfer deserializer (#21132) (overlookmotel) - 43482c7 linter/plugins: Use
>>not>>>in binary search loops (#21129) (overlookmotel)
📚 Documentation
- f5e1845 allocator: Upgrade headers in doc comments for
Bump(#21263) (overlookmotel) - 2870174 allocator: Upper case
SAFETYin comments (#21253) (overlookmotel) - 01bc269 str: Reformat
Identdoc comments (#21240) (overlookmotel) - dd47359 allocator: Add doc comments for panics and errors (#21230) (overlookmotel)
oxlint v1.60.0 & oxfmt v0.45.0
Table of Contents
Oxlint v1.60.0
💥 BREAKING CHANGES
- 382958a span: [BREAKING] Remove re-exports of string types from
oxc_spancrate (#21246) (overlookmotel) - c4aedfa str: [BREAKING] Add
static_ident!macro (#21245) (overlookmotel) - 7354f3c linter: [BREAKING] Error on no matched files (#21144) (camc314)
🚀 Features
- 94a32b9 linter/jest: Share common pattern expect functions (#21376) (Said Atrahouch)
- bab5c31 linter/jest: Implement
prefer-ending-with-an-expectrule (#21372) (Said Atrahouch) - 91f2c79 linter/eslint-jest-plugin: Implemented
prefer-importing-jest-globalsrule (#21303) (Said Atrahouch) - a02f32c linter: Add release version for existing rules (#21363) (camchenry)
- b9e93da linter: Allow tagging rules with release version (#21362) (camchenry)
- f99ecda oxlint: Gate
vite.config.tsrecognition behindVP_VERSIONenv var (#21298) (leaysgur) - cf459d3 linter: Implement suggestion for
no-empty-functionrule (#21347) (Mikhail Baev) - 7213d61 linter: Adding pending suggestions fix to
valid_expectrules. (#21249) (Said Atrahouch) - ae45312 linter: Introduce
--type-check-onlyflag (#21184) (camc314) - 1ce8b90 linter: Implemented
valid-expect-in-promisevitest and jest rule (#21170) (Said Atrahouch) - 39f7fda linter: Add auto-fix to
unicorn/prefer-default-parameters(#21166) (yefan) - 15574bc linter/unicorn: Implement consistent-template-literal-escape (#21126) (AliceLanniste)
- c5c8c03 linter/prefer-readonly-parameter-types: Move rule from nursery to pedantic (#21114) (camc314)
- 1893be1 linter/no-useless-default-assignment: Move rule from nursery to correctness (#21113) (camc314)
- 5462ff9 linter/strict-void-return: Move rule from nursery to pedantic (#21115) (camc314)
- c2989bd linter/no-unnecessary-type-parameters: Move rule from nursery to suspicious (#21112) (camc314)
- 79d339a linter/no-unnecessary-qualifier: Move rule from nursery to style (#21111) (camc314)
🐛 Bug Fixes
- b577efc linter/unicorn: Handle optional chaining in
prefer-array-flatandno-invalid-remove-event-listener(#21299) (Mikhail Baev) - 5e55735 oxlint/lsp: Skip .git directories in LSP walkers (#21316) (camc314)
- ec7f6ed oxlint, oxfmt: Apply
check_for_writer_errorto.flush()(#21343) (Craig Morrison) - a17a08a linter/no-useless-assignment: Handle continue edges in loop analysis (#21358) (camc314)
- a0eac12 linter/array-type: Move match to first stmt (#21357) (camc314)
- 1b3abc3 linter: Exclude boundary tokens from JSXText whitespace check in isSpaceBetweenTokens (#21313) (bab)
- ecbcf5e linter: More info to summary output for GitHub formatter (#21330) (Théo LUDWIG)
- a0a8c62 linter/no-fallthrough: Check from start of switch case for empty lines (#21324) (Josh Cartmell)
- 36f0bc4 linter/no-cycle: Report all cyclic dependencies inside a file (#21259) (camc314)
- 3f80536 linter: Ignore regex flags other than
g/u/vinprefer-string-replace-all(#21203) (bab) - f21d3aa linter/unicorn: Report on optional in
require-number-to-fixed-digits-argumentrule (#21207) (Mikhail Baev) - af8e122 linter: Render each config error as a separate diagnostic (#21120) (bab)
- a950f55 linter/unicorn: Do not report on optionals in
no-single-promise-in-promise-methods(#21157) (Mikhail Baev) - 472f8ee linter: Mark complete comment for unused disable directives + lsp fix (#21092) (copilot-swe-agent)
- edd0865 linter/no-array-index-key: False positive when index is inside an expression within a template literal (#21123) (bab)
- 7e8d520 linter/unicorn: Report on optional
foo?.postMessageinrequire-post-message-target-originrule (#21104) (Mikhail Baev)
⚡ Performance
- addcd02 napi/parser, linter/plugins: Raw transfer deserializer for
Vecs use shift instead of multiply where possible (#21142) (overlookmotel) - 3068ded napi/parser, linter/plugins: Shift before add when calculating positions in raw transfer deserializer (#21141) (overlookmotel)
- eb400b8 napi/parser, linter/plugins: Remove
uint32buffer view (#21140) (overlookmotel) - 7a86613 linter/plugins: Use
Int32Arrays for tokens and comments buffers (#21136) (overlookmotel) - 8c51121 napi/parser, linter/plugins: Raw transfer deserialize
Spanfields asi32s (#21135) (overlookmotel) - bc1bcdd napi/parser, linter/plugins: Inline trivial raw transfer field deserializers into node object definitions (#21134) (overlookmotel)
- c0278ab napi/parser, linter/plugins: Use
Int32Arrayin raw transfer deserializer (#21132) (overlookmotel) - 43482c7 linter/plugins: Use
>>not>>>in binary search loops (#21129) (overlookmotel)
📚 Documentation
- 7888280 linter: Move config docs for
no-restricted-exports(#21360) (camchenry) - 162d26c linter: Improve docs for
typescript/array-type(#21356) (camchenry) - a2dbaec linter: Add missing docs for options for
typescript/class-literal-property-style(#21355) (camchenry) - 79593eb linter: Improve docs for
typescript/consistent-type-assertions(#21353) (camchenry) - f9d20d2 linter: Move config option docs for
typescript/no-empty-object-type(#21352) (camchenry) - a8f650d linter: Add missing config option docs for
prefer-string-start-ends-with(#21332) (camchenry) - cfd8a4f linter: Don't rely on old eslint doc for available globals (#21334) (Nicolas Le Cam)
- 03865fa linter: Jest/prefer-snapshot-hint: add doc comment for snapshot hint mode (#21290) (camchenry)
- a6fe09b linter: Add missing docs for config options in
reactplugin (#21289) (camchenry) - 60eaf47 linter: Add missing docs for config options in unicorn plugin (#21288) (camchenry)
- c3c2055 linter:
jsx-a11y/label-has-associated-control: document theassertoptions (#21287) (camchenry) - a928ed9 linter: Add missing config docs for vitest plugin rules (#21285) (camchenry)
- 7e07c7c linter:
id-length: move enum docs to doc comments (#21281) (camchenry) - 9746bdf linter: Add missing docs for
class-methods-use-thisconfig (#21278) (camchenry) - 6ffe7a5 linter: Move docs for
Targetvariant onto enum (#21277) (camchenry) - 305350d linter/plugins: Correct comments (#21130) (overlookmotel)
Oxfmt v0.45.0
💥 BREAKING CHANGES
- 382958a span: [BREAKING] Remove re-exports of string types from
oxc_spancrate (#21246) (overlookmotel)
🚀 Features
- e3081e1 oxfmt: Gate
vite.config.tsrecognition behindVP_VERSIONenv var (#21295) (leaysgur) - 5b0b573 oxfmt: Update prettier to 3.8.2 (#21294) (leaysgur)
- 0d67834 oxfmt: Show hint for all files are ignored case (#21154) (leaysgur)
🐛 Bug Fixes
- 2871fc2 oxfmt: Non idempotent formatting on comments in TS (#20449) (Cat Chen)
- ec7f6ed oxlint, oxfmt: Apply
check_for_writer_errorto.flush()(#21343) (Craig Morrison) - 1a8c225 formatter: Preserve newline between self-closing JSX element and single-char text (#21149) (Justin Mecham)
- 407b725 oxfmt: Indent dangling comments in empty enum with block indent (#21163) (Leonabcd123)
- d13fd37 formatter: Remove extra outer parentheses on return with JSDoc type cast (#21109) (bab)
- 22babde oxfmt: Fix unicode char escaping (#21162) (leaysgur)
- 4da53e5 formatter: Preserve trailing comma in TSX arrow functions with default type params (#21151) (Justin Mecham)
- 94fe774 oxfmt: Handle paths with consecutive leading slashes (#21155) (leaysgur)
- 50c389b oxfmt: Support
.editorconfigquote_type(#20989) (leaysgur)
⚡ Performance
- 0ce619f formatter: Use
Allocator::alloc_concat_strs_arrayinstead ofStringBuilder::from_strs_array_in(#21339) (overlookmotel)