Releases: oxc-project/oxc
Releases · oxc-project/oxc
Release list
oxlint v1.79.0 & oxfmt v0.64.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.79.0
💥 BREAKING CHANGES
See React Compiler Support for details.
🚀 Features
🐛 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
decoratorsonFormalParameterRest(#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 v0.64.0
🚀 Features
- c07fe7c oxfmt: Support
experimentalOperatorPosition(#25643) (leaysgur) - 2adb8fb formatter: Implement
operatorPositionoption (#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
oxc crates_v0.144.0
Immutable
release. Only release title and notes can be modified.
💥 BREAKING CHANGES
- a33788e ast: [BREAKING] Group class heritage into
ClassHeritage(#25360) (camc314) - 5c5cdcd ast: [BREAKING] Narrow
TSInterfaceHeritage::expressionto TSTypeName (#24360) (camc314) - 6be314f ast: [BREAKING] Remove duplicated
VariableDeclarator::kind(#25319) (camc314) - 44fd320 ast: [BREAKING] Split TS external modules & Namespace Declarations (#25284) (camc314)
🚀 Features
- 9a37c41 napi: Restructure React transform options (#25326) (Boshen)
- b3c1b30 allocator: Add
ArenaVec::push_mut(#25338) (overlookmotel)
🐛 Bug Fixes
- bbd6ed3 codegen: Wrap string literal in parens after directives (#25435) (overlookmotel)
- d07a293 codegen: Preserve cast parentheses in conditional tests (#25115) (camc314)
- 8b7d441 codegen: Preserve satisfies parentheses before bitwise operators (#25113) (camc314)
- e0fb2d7 minifier: Avoid unsafe return removal in labeled blocks (#25406) (Armano)
- c49f4ce parser: Preserve terminal license comments (#25400) (camc314)
- 9d19ab3 transform_react: Downgrade nonfatal compiler diagnostics (#25418) (Boshen)
- 937825c react_compiler: Disable exhaustive memo validation by default (#25417) (Boshen)
- 12937b3 parser: Reject comma expressions in class fields (#25385) (Cameron)
- 7d8a9b5 react_compiler: Preserve hook spans for React Refresh (#25393) (Boshen)
- 9e93ba6 parser: Reset auto-accessor initializer context (#25384) (camc314)
- cc2e28d parser: Reject trailing tokens in
Parser::parse_expression(#25371) (camc314) - 697c629 minifier: Preserve Annex B labeled-function bindings in implicit-return rewrite (#25349) (Armano)
- 4d723ca parser: Report TS1035 for quoted module names (#25305) (camc314)
- 0c9b980 semantic: Report module declaration diagnostics (#25285) (camc314)
- 2a1058a napi: Omit parser header from WASI declarations (#25254) (camc314)
⚡ Performance
- dd1430b semantic: Avoid allocation in class overload check (#25440) (camc314)
- e420816 parser: Optimize trailing comma tracking (#25376) (camc314)
- 6529d1a minifier: Short-circuit scope check when alternate already determines result (#25318) (Armano)
📚 Documentation
oxlint v1.78.0 & oxfmt v0.63.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.78.0
🚀 Features
- ccb8fe8 linter/jsdoc: Implement
no-blank-blocksrule (#25207) (Mikhail Baev) - d4a897c linter/eslint: Implement
one-varrule (#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-filenameregex 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.applysuggestions (#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
SuppressedErrormessages (#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
ignorePropertyModificationsForRegexproperty (#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-commentdescription_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
ExportFromDeclarationlookup (#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_dirout of the stylish reporter loop (#25313) (Connor Shea) - 9a7c323 linter: Compute diagnostic
Infoonce 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 v0.63.0
🚀 Features
- fd02a89 oxfmt: Dispatch yaml-in-css(frontmatter) to
oxc_formatter_yaml(#25336) (leaysgur) - ab12665 formatter_core: Add
hardlineWithoutBreakParentequivalent 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
oxc crates_v0.143.0
Immutable
release. Only release title and notes can be modified.
💥 BREAKING CHANGES
- 4120da0 semantic: [BREAKING] Return borrowed JSDoc so the parse cache works (#25186) (Connor Shea)
- f0a41c8 allocator: [BREAKING] Remove
ArenaBox::danglingmethod (#25236) (overlookmotel) - 067da8c ast: [BREAKING] Store single parameter in
TSIndexSignature::parameter(#25154) (camc314) - a0c7788 ast: [BREAKING] Change
TSIndexSignatureName::nametoIdent(#25150) (camc314) - 1bdedd1 ast: [BREAKING] Introduce
ExportDeclaration,ExportFromDeclaration(#25095) (camc314) - c917f20 ast: [BREAKING] Introduce
ArrowFunctionBodyenum (#24987) (camc314) - 7e1199c ast: [BREAKING] Remove conversion to
Boxfrom AST builder methods (#25038) (overlookmotel)
🚀 Features
- 3c8312e allocator: Make
BoxSend+Syncwhen the type it contains is (#25242) (overlookmotel) - cb5bc08 ast: Derive
GetSpanforComment(#25147) (leaysgur) - 8541e18 ast_tools: Generate minifier scope collector (#25088) (camc314)
- 5acdae2 ecmascript: Skip transparent TS expressions (#25072) (camc314)
- 85d0f4d napi: Add React Compiler transform binding (#24934) (Boshen)
- 70d6ece minifier: Fold safe integer exponentiation (#25009) (Dunqing)
- 73fc747 minifier: Enable termination statement optimization for do while (#24921) (Armano)
- 5eadfdb minifier: Fold safe integer division and remainder (#24981) (Dunqing)
🐛 Bug Fixes
- 6c9ee14 minifier: Preserve if-chain idempotency and correct side effects when alternate should not be moved (#25041) (Armano)
- 8a47ff3 ecmascript: Do not treat lone-surrogate strings as constants (#25084) (Dunqing)
- 468b970 isolated-declarations: Strip re-export attributes (#25090) (camc314)
- a70035d parser: Report export imports in namespaces (#25086) (camc314)
- 5d8ccf5 react_compiler: Preserve nonfatal diagnostics (#25066) (Boshen)
- d349e4a react_compiler: Match eslint suppression gating (#25068) (Boshen)
- 0dc16ba react_compiler: Track catch block declarations (#25067) (Boshen)
- e6734a5 minifier: Fold typeof comparisons with known object strings (#25017) (Dunqing)
- 3a9d5a5 minifier: Keep
typeof foo == ['object']as-is (#24941) (sapphi-red) - 10ec276 ast: Custom AST builder methods take
IntoIn<ArenaBox>where child method does (#25033) (overlookmotel) - fbe8d31 minifier: Respect targets when folding RegExp source (#24790) (Dunqing)
⚡ Performance
- fb402b0 minifier: Stop re-deriving printed numeric spellings (#25103) (Dunqing)
- 7251e52 react_compiler: Avoid large types on stack (#25037) (overlookmotel)
- e07718f isolated_declarations: Avoid large types on stack (#25036) (overlookmotel)
- 9fb1e3e transformer: Avoid large types on stack (#25035) (overlookmotel)
- 8b80f8b parser: Avoid large types on stack (#25034) (overlookmotel)
📚 Documentation
- 2ea0aa9 ast: Correct grammar in AST builder methods doc comments (#25173) (overlookmotel)
oxlint v1.77.0 & oxfmt v0.62.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.77.0
💥 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
ArrowFunctionBodyenum (#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
- a64b65d linter/unicorn/new-for-builtins: Detect parenthesized member expression object (#25249) (tanakalucky)
- 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
.gitignorefor 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 v0.62.0
💥 BREAKING CHANGES
- 067da8c ast: [BREAKING] Store single parameter in
TSIndexSignature::parameter(#25154) (camc314) - a0c7788 ast: [BREAKING] Change
TSIndexSignatureName::nametoIdent(#25150) (camc314) - 1bdedd1 ast: [BREAKING] Introduce
ExportDeclaration,ExportFromDeclaration(#25095) (camc314) - c917f20 ast: [BREAKING] Introduce
ArrowFunctionBodyenum (#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
.gitignorefor 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
oxc crates_v0.142.0
Immutable
release. Only release title and notes can be modified.
💥 BREAKING CHANGES
🚀 Features
- c7c5696 minifier: Fold parenthesized boolean ternary tests (#24968) (Dunqing)
- 82c5806 minifier: Fold sequence branches in boolean ternaries (#24943) (Dunqing)
- cc623d9 ast_visit: Add VisitJsMut visitor (#24828) (Boshen)
- b31713a minifier: Add new IsTerminated trait and use it in exit-point optimization (#24950) (Armano)
- e9e0f24 minifier: Shorten integer zero comparisons (#24933) (Dunqing)
- 34f5559 minifier: Convert switch with one case to if statement (#24611) (Armano)
- 9107e74 str: Add
static_str!macro (#24887) (overlookmotel) - 4d6f623 parser: Emit error for type args in JS files (#24896) (camc314)
- ec08afc ast: Re-export
Identfromoxc_astcrate (#24861) (overlookmotel) - 73cfdfa oxc: Re-export
oxc_strtypes fromoxccrate (#24860) (overlookmotel) - 11f5d1f ast_visit: Add
Utf8ToUtf16::convert_program_and_comments(#24859) (overlookmotel)
🐛 Bug Fixes
- cb5acfb minifier: Optimize termination statements in labeled statements (#24813) (Armano)
- 4618300 minifier: Avoid longer numeric constant folds (#24875) (Dunqing)
- f7971f1 minifier: Keep side effects in typeof comparisons (#24940) (sapphi-red)
- 4597d6f minifier: Keep side effects when compressing
== trueto== 1(#24939) (sapphi-red) - c3a48df minifier: Keep side effects values in template literals (#24938) (sapphi-red)
- e19f183 minifier: Keep side effects when folding
Numbercall (#24937) (sapphi-red) - 9d7745a react-compiler: Preserve warning bailouts (#24935) (Boshen)
- 0126aba codegen: Preserve orphaned file coverage comments (#24815) (Dunqing)
- 9fbbaf8 parser: Clarify return in class static blocks (#24899) (camc314)
- e7d5c78 str: Fix hygiene of
format_ident!andformat_str!macros (#24886) (overlookmotel) - 07e9acc ecmascript: Keep side effects in parent of
toStringcalls (#24846) (sapphi-red) - 16a40ad ecmascript: Detect side effects in unused arguments to
charCodeAt(#24845) (sapphi-red) - 5b4ae54 parser: Use specific for-await diagnostic (#24856) (camc314)
- ffcc33a parser: Report for-await in non-async functions (#24855) (camc314)
- df230d0 minifier: Avoid reordering this in nested class keys (#24785) (Dunqing)
- d24b76b minifier: Isolate derived constructor this state (#24784) (Dunqing)
- 582805d parser: Parse unary conditional after satisfies (#24807) (Boshen)
- 23b904f minifier: Preserve default parameter side effects (#24791) (Dunqing)
- 3048594 parser: Use correct diagnostic for
await usingin bare switch case (#24798) (camc314) - e80574f estree: Handle empty spans serializing
ImportMetaandNewTarget(#24775) (overlookmotel) - 4b12840 minifier: Do not fold a
-0ternary branch to+a(loses the sign) (#23637) (Jerry Zhao) - 133bb35 ecmascript: Detect side effects of
foo().#barcorrectly when PropertyReadSideEffects::None (#24769) (sapphi-red)
⚡ Performance
- a086d91 ecmascript: Avoid number literal allocations (#24889) (Dunqing)
- 98f2ecb react_compiler: Compare value set pointers before probing in state merge (#24805) (Marius Schulz)
- b287f29 estree: Avoid ident hash calculations when serializing (#24774) (overlookmotel)
📚 Documentation
oxlint v1.76.0 & oxfmt v0.61.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.76.0
🚀 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-stylerule (#24087) (Mikhail Baev) - 1ad6f6c linter/eslint: Implement
id-denylistrule (#24632) (Mikhail Baev) - 678bbb5 linter/typescript-eslint: Implement suggestion for
class-literal-property-stylerule (#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
inandinstanceof(#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
ImportMetaandNewTarget(#24775) (overlookmotel)
⚡ Performance
- e9de5a1 linter/jest-vitest/no-test-return-statement: Only run on return statements (#24167) (Cam McHenry)
- aea459d linter/eslint/func-style: Rewrite rule to not iterate over all nodes (#24156) (Cam McHenry)
- fb4398c linter/eslint/no-new-func: Only run on new and call expressions (#24166) (Cam McHenry)
- c75dc60 linter: Avoid
Vecallocations viabound_names(#24959) (connorshea) - 9f9f39d linter/eslint/no-const-assign: Avoid
Vecallocation perconstdeclarator (#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 v0.61.0
🚀 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
newsignature (#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
singleQuoteoption 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)
oxc crates_v0.141.0
Immutable
release. Only release title and notes can be modified.
💥 BREAKING CHANGES
- 5293431 str: [BREAKING] Move
IdentBuildHashertooxc_strcrate (#24717) (overlookmotel) - 54cc121 ast: [BREAKING] Split
MetaPropertyintoImportMetaandNewTarget(#24557) (camc314)
🚀 Features
- 87823d0 minifier: Merge combined assign expression in conditional expression (#24707) (sapphi-red)
- 03a54c9 minifier: Merge assign expression against member expression in conditional expression (#24706) (sapphi-red)
- effd3c8 allocator: Add
Vec::from_raw_parts_in(#24732) (overlookmotel) - ddacf61 semantic: Add context notes for strict assignments (#24728) (camc314)
- 7e9b84a data_structures: Add
implements!macro (#24721) (overlookmotel) - 39e141b data_structures: Add
const_str_eqfunction (#24720) (overlookmotel) - cc3d17f semantic: Add context notes for reserved keyword diagnostic (#24715) (camc314)
- 4c71560 parser: More friendly error for spread element in dynamic imports (#24705) (sapphi-red)
- 7b045cd minfier: Drop last break from last switch case (#24673) (Armano)
- 7d3c178 minifier: Remove unreachable recursive functions (#24125) (Dunqing)
- 94f99b3 ast: Allow
NONEto be passed to AST builder methods whereOption<ArenaVec>is expected (#24629) (overlookmotel) - 77230c5 ast: Accept arrays for
ArenaVecparams of AST builder methods (#24621) (overlookmotel) - f08b152 allocator: Implement
FromInfor array toVecconversion (#24620) (overlookmotel) - 2338c13 track-memory-allocations: Track heap deallocs, alloc bytes, and peak growth (#24619) (Boshen)
- 7aa4739 syntax,transformer: Move JSX entity decoder to
oxc_syntax(#24617) (camc314) - 2b097c4 str: Export
StrasArenaStr(#24604) (overlookmotel) - 3acf4c1 minifier: Expand switch optimiation to remove empty cases (#24520) (Armano)
- 129b759 parser: Improve diagnostics for unparenthesized LHS on exponential expr (#24569) (camc314)
- 4d0c601 minifier: Fold arithmetic over undefined and null operands (#24485) (Dunqing)
- 91541dd minifier: Drop empty switch statements (#24527) (Armano)
- d05224d ast_visit: Generate VisitJs visitor that skips TypeScript type-space (#24499) (Boshen)
- 3d22307 parser: Add
ParseOptions::enable_ident_hashes(#24491) (Boshen)
🐛 Bug Fixes
- 61e02bf minifier: Avoid reordering this before super (#24755) (Dunqing)
- 79e6d77 minifier: Preserve RegExp feature detection (#24712) (Dunqing)
- 47ddedf semantic: Allow arguments in ambient declarations (#24758) (camc314)
- 9f3e300 react_compiler: Preserve aliasing diagnostic locations (#24757) (Boshen)
- 4b81f4d react_compiler: Honor default suppressions (#24747) (Boshen)
- 6cc4a34 codegen: Wrap negative BigInt literal base of
**in parentheses (#23621) (Jerry Zhao) - d85276c minifier: Avoid incorrect logical assignment transformation when base object may be mutated (#24718) (sapphi-red)
- 99b1dc4 isolated-declarations: Separate static accessors (#24716) (camc314)
- 76ec104 semantic: Resolve import-equals namespaces (#22696) (camc314)
- 0ffa88e str: Enable
hashbrownfeatureinline-more(#24719) (overlookmotel) - 0e9b460 isolated-declarations: Normalize accessor keys (#24690) (Cameron)
- 64c2241 minifier: Align class heritage removal with assumptions (#24533) (Dunqing)
- 48b59f4 parser: Span ambient generator diagnostics (#24711) (camc314)
- e750a82 ecmascript: Fix false negative for may_have_side_effects on dynamic property access (#24709) (sapphi-red)
- f145d73 minifier: Guard reordered identifier reads (#24698) (Dunqing)
- a2ef382 isolated-declarations: Reject
window.Symbolas global symbol reference (#24689) (camc314) - b1bcf72 minifier: Invalidate facts for redeclared bindings (#24658) (Dunqing)
- 921b834 minifier: Don't treat a conditionally-assigned var as write-once (#24650) (Dunqing)
- 061af1f minifier: Avoid stale pure function summaries (#24636) (Dunqing)
- 40c2f43 allocator:
Vec::from_array_indo not allocate zero-length array (#24628) (overlookmotel) - 70994ae codegen: Preserve comments before expression operands (#24510) (Dunqing)
- 7b4baff parser: Reject new import member access (#23459) (camc314)
- 128b385 minifier: Clippy warning with no-debug-assertions (#24547) (camc314)
- 8421feb parser: Use first
asspan for imported name (#24537) (leaysgur) - c517aa0 parser: Reject invalid accessor assertions (#24504) (camc314)
⚡ Performance
- 3fe5c87 react_compiler: Transform reactive blocks in place (#24703) (Boshen)
- 2e24c7e allocator: Speed up
CloneInforVecandBox<[T]>(#24733) (overlookmotel) - 884d9eb parser: Pre-size cover-grammar assignment target buffers (#24683) (Boshen)
- d3f07a0 diagnostics: Box OxcDiagnosticInner to reduce binary size (#24665) (Boshen)
- bcc9de0 parser: Defer diagnostic creation until parse exit (#24663) (Boshen)
- c35d8ab allocator: Mark
ReplaceWithpanic path cold (#24515) (camc314) - ba65790 semantic, allocator: Branchless
clone_infor semantic IDs (#24564) (overlookmotel) - 747feec parser: Build AST nodes with the AST builder instead of cloning (#24540) (Boshen)
- ba35a0d react_compiler: Use IndexVec for dense id-keyed maps (#24549) (Boshen)
- b685062 react_compiler: Keep small hot-path collections inline (#24514) (Marius Schulz)
- a149e95 transformer: Outline rare expression exits (#24512) (camc314)
- 7808a6e react_compiler: Make aliasing effects cheap to intern and clone (#24506) (Marius Schulz)
- 3a36f2a react_compiler: Store AbstractValue reasons as a u16 bitmask (#24480) (Boshen)
- 1c96753 react_compiler: Use FxHashMap for the lookup-only aliasing node map (#24490) (Boshen)
📚 Documentation
oxlint v1.75.0 & oxfmt v0.60.0
Immutable
release. Only release title and notes can be modified.
Table of Contents
Oxlint v1.75.0
🏆 Highlights
🚀 Features
- 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-blocksforvitest/padding-around-test-blocks(#24519) (Mikhail Baev) - 99978a8 linter/import/consistent-type-specifier-style: Support
prefer-top-level-if-only-type-importsoption (#24502) (camc314)
🐛 Bug Fixes
- e81b2ff oxlint,oxfmt: Report error for invalid glob patterns (#24744) (leaysgur)
- 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
ClassandNewExpressionnodes (#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 v0.60.0
🚀 Features
🐛 Bug Fixes
- fd7cf5b formatter_css: Update oxc-css-parser to 0.0.9 (#24745) (leaysgur)
- e81b2ff oxlint,oxfmt: Report error for invalid glob patterns (#24744) (leaysgur)
- 164e70a formatter: Stabilize comment between tagged temaplte tag and quasi (#24738) (leaysgur)
- c399367 formatter_css: Update oxc-css-parser to 0.0.8 (#24725) (leaysgur)
- 6fe866a oxfmt: Keep tailwind classes glued to template expr with
preserveWhitespace(#24609) (leaysgur) - 33e32d8 formatter_css: Use
line_suffixfor EOL line comment (#24580) (leaysgur) - 5f76998 formatter_graphql: Keep same line comments pending across intervening tokens (#24579) (leaysgur)
oxc crates_v0.140.0
Immutable
release. Only release title and notes can be modified.
🚀 Features
- 5b20828 minifier: Extract sequence expression from expressions (#22003) (Armano)
- 616bfa2 minifier: Remove unreachable code after terminating statements (#24441) (Dunqing)
- ddab89a data_structures: Add
likelyandunlikelyfunctions (#24368) (overlookmotel) - a3a39f9 react_compiler: Implement enableEmitHookGuards codegen (#24329) (Boshen)
- b79eef7 minifier: Apply De Morgan's law to negated comparison chains in jump guards and loop tests (#24279) (Dunqing)
- 34ff7b4 minifier: Drop write-only property assignments to unused local bindings by default (#24112) (Dunqing)
- 1b829d8 semantic: Record const enums in EnumData (#24268) (Dunqing)
- ba0944c semantic: Add
Scoping::set_symbol_span(#24221) (camc314)
🐛 Bug Fixes
- edf781d minifier: Keep reads of never-assigned uninitialized bindings (#24452) (Dunqing)
- 7d33363 minifier: Preserve guaranteed throws from class heritage evaluation (#24349) (Dunqing)
- 058a62f semantic: Track ambient contexts in
SemanticBuilder(#24327) (camc314) - 721eb0b transformer/decorator: Scope accessor class binding (#24330) (camc314)
- 1ebdce3 semantic: Allow reserved keywords in ambient declaration types (#24325) (camc314)
- 460176a track-memory-allocations: Exclude arena chunks from Sys allocs (#24292) (Dunqing)
- af4922b transformer: Clear lowered namespace redeclarations (#24300) (camc314)
- ffd2765 semantic: Mark declared computed
MethodDefinitions as type references (#24296) (camc314) - f17514b isolated-declarations: Emit const readonly fields as types (#24288) (camc314)
- 40f769d minifier: Make
__proto__write tracking execution-order independent (#24280) (Dunqing) - 6371fed transformer: Remove stale enum member bindings (#24272) (camc314)
- f05dfab transformer: Correct symbol flags for lowered namespaces (#24271) (Dunqing)
- 84eeb55 transformer: Correct symbol flags for lowered enums (#24269) (Dunqing)
- c3057da transformer: Preserve generated class binding spans (#24220) (camc314)
- 8260096 transformer: Correct span for lowered namespace symbol (#24222) (camc314)
- 42d00d3 semantic: Mark declared class heritage as type references (#24237) (camc314)
- 588d997 semantic: Mark TS
PropertyDefinitions computed fields as type references (#24233) (camc314) - 9b95632 semantic: Mark computed method keys in
TSMethodSignatures as type references (#24232) (camc314)
⚡ Performance
- 48911ec react_compiler: Use FxHashSet for membership-only block sets (#24486) (Boshen)
- 1e3e626 react_compiler: Reduce allocations in reactive-places and mutation-aliasing passes (#24476) (Boshen)
- e86e0d8 react_compiler: Avoid copying the aliasing fixpoint's abstract state (#24117) (Marius Schulz)
- 5b26643 transformer_plugins: Dispatch global defines by trailing name (#23666) (Boshen)
- dce0f29 react_compiler: Replace all compiled functions in a single AST walk (#24403) (Boshen)
- f85f0d8 ast: Delegate inherited enum variants in clone_in and estree derives (#23555) (Boshen)
- 3ff0234 allocator: Remove
unwrapfromReplaceWith(#24365) (overlookmotel) - ab22e80 transformer: Fix Rust 1.97 performance regression (#24354) (camc314)
- b47585c parser: Use
ReplaceWithinstead ofTakeIn(#24018) (overlookmotel) - b227a06 minifier: Use
ReplaceWithinstead ofTakeIn(#24017) (overlookmotel)