Releases: oxc-project/oxc
Releases · oxc-project/oxc
oxlint v1.25.0
Immutable
release. Only release title and notes can be modified.
[1.25.0] - 2025-10-30
💥 BREAKING CHANGES
- 659fd37 linter: [BREAKING]
tsgolint: request fixes when necessary (#15048) (camchenry)
🚀 Features
- ed24d60 linter: Expose tsgolint program diagnostics (#15080) (camc314)
- 23660c9 linter:
tsgolint: handle omitted fixes and suggestions (#15047) (camchenry) - f7bef73 linter/plugins: Scope manager API (#14890) (Arsh)
- 3e15cdd linter/strict-boolean-expression: Add rule (#14930) (camc314)
- bd74603 linter: Add support for vitest/valid-title rule (#12085) (Tyler Earls)
🐛 Bug Fixes
- e41dee5 linter/consistent-type-definition: Skip comments when looking for token (#14909) (camc314)
- 806f9ba linter: Search system PATH for tsgolint executable (#14861) (magic-akari)
- ee68089 linter: Normalize JS plugin names (#15010) (Peter Wagenet)
- 597340e ast-tools: Use oxfmt to format generated code (#15064) (camc314)
- 5eaaa8e linter: Prevent underflow in count_comment_lines for JSX files (#15026) (ityuany)
- 88577a8 import/no-namespace: Remove dot special case (#15032) (Arsh)
- 55ee962 linter/vars-on-top: False positive with typescript declare block (#14952) (Hamir Mahal)
- 2de9f39 linter/plugins: Fall back to package name if meta.name is missing (#14938) (Peter Wagenet)
- 5ace84b linter/no-empty-object-type: Parse
"allowWithName"as regular expressions (#14943) (Arsh) - 5a2832d editor: Stop client when delete .oxlintrc.json with
oxc.requireConfig(#14897) (Liang Mi) - 3e29d23 linter: Use aliases when parsing cli rules (#14912) (Arsh)
- b94b6aa linter/explicit-module-boundary-types: False negative with export default function (#14905) (camc314)
- 7060863 linter/no-standaline-expect: False positive with expect in callback (#14902) (camc314)
- dc5a71b linter/no-accumulating-spread: False positive in nested callbacks within reduce (#14898) (camc314)
🚜 Refactor
- 8d8d508 editor: Flatten
flagsoptions (#15006) (Sysix) - b1e1531 language_server: Extract library interface from main.rs (#15036) (Boshen)
- 5de99c2 formatter: Export unified way to get_parse_options (#15027) (leaysgur)
- b55df7f language_server: Move sub option for
flagsto the root + deprecate flags (#14933) (Sysix)
📚 Documentation
- e15c91c linter: Add configuration option docs for eslint/init-declarations rule. (#15085) (Connor Shea)
- f4505bc linter: Add configuration option docs for eslint/id-length rule. (#15083) (Connor Shea)
- dd4c9d2 linter: Add configuration option docs for eslint/getter-return rule. (#15081) (Connor Shea)
- 008e67a linter: Add configuration option docs for jest/no-large-snapshots rule. (#15079) (Connor Shea)
- 31daf79 linter: Add configuration option docs for import/no-commonjs rule. (#15077) (Connor Shea)
- 9bf8ebe linter: Add configuration option docs for jsdoc/check-tag-names rule. (#15076) (Connor Shea)
- 491ab5e linter: Add configuration option docs for jsdoc/no-defaults rule. (#15074) (Connor Shea)
- 2602d7e linter: Add configuration option docs for jsdoc/empty-tags rule. (#15072) (Connor Shea)
- c3a92e0 linter: Add configuration option docs for oxc/no-rest-spread-properties rule. (#15070) (Connor Shea)
- c7c9213 linter: Add configuration option docs for oxc/no-optional-chaining rule. (#15071) (Connor Shea)
- 47a616f linter: Add configuration option docs for typescript/no-empty-object-type rule. (#14968) (Connor Shea)
- fcc1e25 linter: Add configuration option docs for typescript/no-explicit-any rule. (#15051) (Connor Shea)
- 1b88934 linter: Add configuration option docs for eslint/no-multi-assign rule. (#15052) (Connor Shea)
- 909d4b9 linter: Add configuration option docs for eslint/no-unsafe-negation rule. (#15053) (Connor Shea)
- f60763b linter: Add configuration option docs for eslint/no-useless-computed-key rule. (#15054) (Connor Shea)
- c8911d4 linter: Add configuration option docs for eslint/no-unneeded-ternary rule. (#15056) (Connor Shea)
- 9fc6374 linter: Add configuration option docs for eslint/no-misleading-character-class rule. (#15058) (Connor Shea)
- 7656e2b linter: Add configuration option docs for eslint/sort-imports rule. (#15013) (Connor Shea)
- bb06039 linter: Add configuration option docs for unicorn/no-instanceof-builtins rule. (#14999) (Connor Shea)
- a4af5ff linter: Add configuration option docs for unicorn/no-typeof-undefined rule. (#15001) (Connor Shea)
- ac2ed39 linter: Add configuration option docs for unicorn/numeric-separators-style rule. (#15002) (Connor Shea)
- 5ce3e33 linter: Add configuration option docs for unicorn/prefer-object-from-entries rule. (#15003) (Connor Shea)
- 07aea72 linter: Add configuration option docs for eslint/sort-keys rule. (#15014) (Connor Shea)
- 35b36e0 linter: Add configuration option docs for eslint/no-eval rule. (#15015) (Connor Shea)
- d222b85 linter: Add configuration option docs for eslint/no-empty rule. (#15017) (Connor Shea)
- 83bbc37 linter: Add configuration option docs for eslint/no-extend-native rule. (#15018) (Connor Shea)
- aade2fe linter: Add configuration option docs for eslint/no-extra-boolean-cast rule. (#15019) (Connor Shea)
- bae0c09 linter: Add configuration option docs for jsdoc/require-yields rule. (#15024) (Connor Shea)
- 06c77b6 linter: Add configuration option docs for unicorn/prefer-at rule. (#15023) (Connor Shea)
- 54b2cb4 linter: Add configuration option docs for eslint/max-classes-per-file rule. (#15022) (Connor Shea)
- b5acda7 linter: Add configuration option docs for typescript/explicit-module-boundary-types rule. (#15021) (Connor Shea)
- a0c6162 linter: Add configuration option docs for vue/max-props rule. (#14966) (Connor Shea)
- 3ec59c0 linter: Add configuration option docs for no-async-endpoint-handlers rule. (#14965) (Connor Shea)
- 7a275fd linter: Add configuration option docs for no-map-spread rule. (#14964) (Connor Shea)
- 0002b7c linter: Add configuration option docs for no-barrel-file rule. (#14963) (Connor Shea)
- fd4b7ab linter: Add configuration option docs for unicorn/consistent-function-scoping rule. (#14969) (Connor Shea)
- aa339b3 linter: Add configuration option docs for eslint/no-void rule. (#14970) (Connor Shea)
- af8bdae linter: Add configuration option docs for import/no-anonymous-default-export rule. (#14971) (Connor Shea)
- 5a81953 linter: Add configuration option docs for jest/require-hook rule. (#14972) (Connor Shea)
- 1be268d linter: Add configuration option docs for jest/require-top-level-describe rule. (#14973) (Connor Shea)
- 860a58c linter: Add configuration option docs for jest/no-hooks rule. (#14974) (Connor Shea)
- b69b586 linter: Add configuration option docs for jest/max-expects rule. (#14975) (Connor Shea)
- 2e02fe0 linter: Add configuration option docs for jest/no-deprecated-functions rule (#14976) (Connor Shea)
- cdc6c4f linter: Add configuration option docs for unicorn/no-array-sort rule. (#14977) (Connor Shea)
- 40eb394 linter/no-unassigned-import-config: Add auto generated config docs (#14918) (camc314)
⚡ Performance
- a9f68b2 linter: Move up rule retainment into initial collection to reduce allocation size (#14822) (camchenry)
- b27c5b9 linter: Add codegen support for regex nodes (#14874) (camchenry)
🧪 Testing
- bf898e5 linter: Increase stability of tsgolint test cases (#15063) (camc314)
- 49da411 linter/no-standalone-expect: Fix tests (#14901) (camc314)
💼 Other
oxfmt v0.9.0
Immutable
release. Only release title and notes can be modified.
[0.9.0] - 2025-10-30
🚀 Features
🐛 Bug Fixes
- a6b6ef8 formatter: Correct calculating layout for
TSNonNullExpressioninStaticMemberExpression(#15065) (Dunqing) - 99bd995 formatter: Print parenthesis for sequence expression in
ReturnStatementandExpressionStatement(#15062) (Dunqing) - f3fb998 formatter: Correct printing comments for
TSAsExpression(#15061) (Dunqing) - 1e4a018 formatter: Correct checking of the short argument for
CallArguments(#15055) (Dunqing) - c0dfd9b formatter: Print comments before fat arrow as-is for
ArrowFunctionExpression(#15050) (Dunqing) - 206b519 formatter: Should hug parameter with
TSMappedTypetype annotation (#15049) (Dunqing) - e48c604 formatter: Incorrect formatting of a function with
thisparameter (#15031) (Dunqing) - a9f0c45 formatter: Decorators and class method on the same line shouldn't be broken by a leading comment of the method (#15029) (Dunqing)
- 43d74e4 formatter: Handle
<CRLF>forSourceText(#15016) (leaysgur) - 34fab40 formatter: Correct calculating layout for
ChainExpressioninStaticMemberExpression(#14986) (Dunqing) - 68dc101 formatter: Should not break when the parent of root of
StaticMemberExpressionis used as theArgumentofNewExpression(#14985) (Dunqing) - 071b739 formatter: Align the short argument handling for UnaryExpression with Prettier (#14984) (Dunqing)
- 3940f3a formatter:
BestFittingdoesn't exactly matches theconditinalGroupbehavior in Prettier (#14983) (Dunqing) - 4a84e44 formatter: Align the logic of printing type parameters, parameters, and return type for functions with Prettier (#14942) (Dunqing)
- 68c1f2a formatter: Non-nested static member expressions will never break (#14929) (Dunqing)
- 42adc47 formatter: Check whether a type alias is complex when its right hand side never break (#14928) (Dunqing)
- e501f13 formatter: Should not add a trailing comma for long curried calls when
trailingCommais es5 (#14913) (Dunqing)
🚜 Refactor
- 7d64291 formatter: Simplify printing ClassElement with a semicolon (#15030) (Dunqing)
- 5de99c2 formatter: Export unified way to get_parse_options (#15027) (leaysgur)
- f6f22e2 formatter: Clean up unneeded implementations for printing comments (#14935) (Dunqing)
- 7a2b9d1 formatter: Improve printing trailing comments (#14934) (Dunqing)
- ba10caa formatter: Align printing trailing comments with Prettier (#14927) (Dunqing)
- 597c9e8 formatter: Remove redundunt public API (#14915) (leaysgur)
⚡ Performance
💼 Other
oxlint v1.24.0
Immutable
release. Only release title and notes can be modified.
[1.24.0] - 2025-10-22
🚀 Features
- dd1fdd4 linter: Add react/forbid-dom-props rule (#14365) (Mikhail Baev)
- e3d65c3 language_server: Search both .json and .jsonc config file (#14868) (Sysix)
- 54ec8e3 linter: Add
cwdproperty to JS pluginContext(#14814) (magic-akari) - 8b02074 linter: Merge vitest/prefer-to-be rule into existing jest/prefer-to-be rule implementation (#14738) (Tyler Earls)
- 9700a56 linter/plugins: Comment-related APIs (#14715) (Arsh)
- ba6517b linter: Add
no-warning-commentsrule (#14734) (Iván Ovejero) - 5858641 linter: Implement constructor-super rule (#14506) (Tyler Earls)
- 8b322d4 editor: Support
oxc.fmt.configPathconfiguration (#14639) (Sysix) - 2609c74 language_server: Watch for
fmt.configPathfile content change (#14509) (Sysix) - ae2003c semantic: Add
symbol_idto ts function type binding idents (#14673) (camc314) - bec7a7d semantic: Add scope to
TSConstructorType(#14676) (camc314) - fec2ed9 oxfmt: Use Prettier style config key and value (#14612) (leaysgur)
- 9cd7a67 linter/no-unused-vars: Support
ignoreUsingDeclarationsoption (#14632) (camc314) - 1b58521 oxfmt,language_server: Enable JSX for all JS source type (#14605) (leaysgur)
- b1a9a03 linter/plugins: Implement
SourceCode#getAllComments(#14589) (Arsh)
🐛 Bug Fixes
- 831974f linter: Postmessage is not called on window (#14192) (Kenzo Wada)
- 644dfd4 language_server: Make unused directives fixable again (#14872) (Sysix)
- 801e1d1 linter: Error on unexpected tokens when declaring lint rule (#14881) (howen)
- dc03c3a linter/no-invalid-fetch-options: Ignore non static method (#14806) (camc314)
- 28e76ec oxlint: Resolving JS plugin failing when
extendsis used (#14556) (camc314) - aa562f7 linter/no-unused-private-class-members: Fix false positive in default param (#14801) (camc314)
- ad12974 linter:
no-unused-vars: allow updates in for loop test/update (#14766) (camchenry) - 78ee7b8 linter/plugins: Handle utf16 characters within comment spans (#14768) (Arsh)
- 47d8db1 linter/plugins: Prevent
commentsbeing accessed after file is linted (#14727) (overlookmotel) - c69201c linter: Copy over js plugins when applying overrides (#14542) (Arsh)
- 6bb9902 linter: Improve
jest/no_exportheuristic (#14620) (Arsh) - c8ea37d linter:
unicorn/filename-casereport only on the first js block forastro,vueandsveltefiles (#14599) (Sysix) - e560cc1 language_server: Fix panic when "disable rule for this line" position is after error span (#14597) (Sysix)
- 5238891 linter/plugins: Add
commentsfield to TS type def forProgram(#14626) (overlookmotel) - 84b2605 linter/plugins: Remove
parentproperty from comments (#14624) (overlookmotel) - baab7eb semantic: Fix quote handling in jsdoc parser(#13776) (#14561) (Li Wei)
- 0961c3a oxlint,oxfmt: Skip traversing
.gitdirectories (#14590) (Boshen)
🚜 Refactor
- 1e93ceb linter/no-unwanted-polyfillio: Move
NEXT_POLYFILLED_FEATURESto shared utils (#14793) (shulaoda) - 4520695 linter/plugins: Reorganise
SourceCodemethods (#14773) (overlookmotel) - 6942d75 linter/plugins: Shorten import of comment-related
SourceCodemethods (#14772) (overlookmotel) - b9a3f46 linter/plugins: Move scope-related
SourceCodemethods into separate file (#14771) (overlookmotel) - cd068aa linter/plugins: Move token-related
SourceCodemethods into separate file (#14770) (overlookmotel) - ec816ba linter/plugins: Move comments-related code into separate file (#14753) (overlookmotel)
- e9c3b18 linter/plugins: Update outdated comment (#14750) (overlookmotel)
- 699c91c language_server: Improve file watching for different tools (#14645) (Sysix)
- 14de671 linter/plugins: Simplify
commentsgetter (#14728) (overlookmotel) - b402024 linter/plugins: Rename function (#14726) (overlookmotel)
- 85a2743 linter/plugins, napi/parser: Remove extraneous code from raw transfer deserializers (#14683) (overlookmotel)
- 3bfb8e1 linter: Make
Message.spanpublic (#14601) (Sysix) - 544c092 linter/no-process-env: Restructure match to improve generated node types (#14643) (camc314)
- 9a589ca language_server: Use Message span for Diagnostic's Range (#14600) (Sysix)
- 2b14abc napi/parser: Shorten raw transfer deserializer for
Comment(#14623) (overlookmotel) - 90f5f89 linter: Remove
run_on_symbol(#14610) (camchenry) - b301795 linter: Remove unused allocator param in
Runtimefor LSP & tests (#14489) (Sysix)
📚 Documentation
- 3f1c3c7 linter: Add documentation on
ignoreRestSiblingsoption forno-unused-varsrule (#14807) (howen) - 9cd4160 linter: Fix documentation formatting for max_params options (#14744) (Connor Shea)
- cbdf261 linter: Document no-shadow-restricted-names rule config options. (#14843) (Connor Shea)
- a6f720b linter: Expose use-isnan rule config options. (#14844) (Connor Shea)
- 7dc609b linter: Add docs for no-param-reassign config options. (#14849) (Connor Shea)
- 983c31c linter: Improve the Options documentation for no-empty-function rule (#14789) (Connor Shea)
- 77e4b30 linter: Add autogen doc support for max_nested_describe in jest plugin. (#14797) (Connor Shea)
- b6402dd linter: Move documentation comments for the valid-typeof rule to the struct (#14841) (Connor Shea)
- a02567f linter: Update no-invalid-regexp rule to expose documentation for config options (#14838) (Connor Shea)
- ebca4a6 linter: Update no-plusplus rule to expose documentation for config options (#14837) (Connor Shea)
- 1665ab4 linter: Add doc comments for func_style options. (#14847) (Connor Shea)
- b1fb269 linter: Add configuration docs info for import/namespace rule (#14799) (Connor Shea)
- c80da95 linter: Add configuration docs to no-useless-escape lint rule. (#14791) (Connor Shea)
- 7b64f27 linter: Improve
no-plusplusandno-irregular-whitespacerule docs (#14790) (Connor Shea) - 207b62b linter/plugins: Correct JSDoc comments for
SourceCodetokens methods (#14776) (overlookmotel) - cd266b4 linter/plugins: Improve docs for comments APIs (#14754) (overlookmotel)
⚡ Performance
- 11b055e linter:
no-unused-private-class-members: only run when there are any classes (#14869) (camchenry) - 5493278 linter:
no-dupe-class-members: only run when there are any classes (#14867) (camchenry) - ef53462 linter:
no-this-before-super: only run when file contains super or this (#14866) (camchenry) - 19d168a linter:
max-classes-per-file: skip when no classes (#14865) (camchenry) - b8f8ce5 linter:
id-length: reduce allocations and add more ASCII checks (#14821) (camchenry) - bb4347c linter: Use precomputed extension (#14819) (camchenry)
- 92b4302 linter:
id-length: check if ident is ASCII before segmenting (#14767) (camchenry) - 7be9489 linter: Cache file extension (#14794) (camchenry)
- 10182e8 linter/plugins: Use binary search (#14778) (Arsh)
- 86ecae1 linter: Remove simple
phf_map!calls (#14701) (camchenry) - e6f351d linter/plugins: Speed up
SourceCode#getAncestors(#14747) (overlookmotel) - df48416 language_server: Return
Diagnosticwhen relinting all files (#14737) (Sysix) - 22ee19f language_server: Avoid creating HashMap in
Backend::did_change_configuration(#14736) (Sysix) - ed922ec language_server: Avoid creating HashMap in
Backend::did_change_watched_files(#14735) (Sysix) - 58ba6d6 linter/plugins: Lazy deserialize comments array (#14637) (Arsh)
- 2fe9dfa linter: Update
prefer-node-protocolto use diverging match (#14699) (camchenry) - 07db921 linter: Update
catch-error-nameto use top-level match (#14698) (camchenry) - 2582a50 linter: Update
no-extra-non-null-assertionto use diverging match (#14697) (camchenry) - 231bac0 linter: Update
typescript/array-typeto only have top-level match (#14696) (camchenry) - 6b9b972 linter: Refactor
jsdoc/require-yieldsto deref instead ofself.0(#14695) (camchenry) - 9ac561c linter: Inline
is_function_nodecalls for some jsdoc rules (#14694) (camchenry) - 5e014cb linter: Refactor
jest/require-hookto use top-level match (#14693) (camchenry) - c8d775c linter: Refactor
jest/no-conditional-in-testto use diverging match (#14692) (camchenry) - b666c26 linter: Move root scope check into match arms in
import/no-webpack-loader-syntax(#14691) (camchenry) - be33a15 linter: Refactor
no-amdto do scope check after node type check (#14690) (camchenry) - 71cfeaa linter: Refactor
no-unsafe-finallyto have a diverging match as first statement (#14689) (camchenry) - 801bb10 linter: Refactor
no-labelsto use top-level match on node kind (#14688) (camchenry) - 1217411 linter: Refactor class-methods-use-this to be analyzed (#14687) (camchenry)
- f830bea linter: Add codegen support for
is_member_expression_kindin match (#14677) (camchenry) - 400a99a linter: Switch
if !matches!(node.kind(), ...)to match block (#14650) (camchenry) - f2c33f5 linter: Rearrange rules for node type analysis (#14648) (camchenry)
- 73f2cbb linter: Support getting
as_member_expression_kind()variants (#14642) (camchenry) - 58e17ae linter: Only check for call expr once in
unicorn/no-array-method-this(#14641) (camchenry) - 12a9934 linter: Detect diverging match blocks for node type skipping (#14631) (camchenry)
- 82196e7 linter: Update
react/prefer-es6-classto use top-level match (#14630) (camchenry) - 48e3348 linter: Update linter codegen to support wildcard with empty tuple (#14611) (camchenry)
- 0485859 linter: Update
no-const-assignto run on nodes instead of symbols (#14609) (camchenry) - 976bde0 linter: Run
next/no-duplicate-headon nodes instead of symbols (#14607) (camchenry) - c821c50 linter: Switch
no-param-reassignto run on nodes (#14604) (camchenry) - 676ee99 linter: Run
no-class-assignon class nodes instead of symbols (#14578) (camchenry) - 463be73 linter: Support
as_*for node type codegen (#14582) (camchenry) - 8df1e24 linter: Use top-level match for
const-comparisons(#14581) (camchenry)
🎨 Styling
🧪 Testing
- a64180e lin...
oxfmt v0.8.0
Immutable
release. Only release title and notes can be modified.
[0.8.0] - 2025-10-22
🚀 Features
- 381e08c oxfmt: More friendly JSON schema (#14879) (leaysgur)
- 006708d oxfmt: Support
ignorePatternsin oxfmtrc (#14875) (leaysgur)
🐛 Bug Fixes
- 64b8226 formatter: Corrct printing leading own line comments before method body (#14886) (Dunqing)
- 6ce1162 formatter: Remove a redundant space for TSMappedType (#14885) (Dunqing)
- 5b962a7 formatter: Remove redundant leading space when only the rest part of the array exists (#14884) (Dunqing)
- 8301d8f formatter: No need to wrap parenthesis for ObjectExpression when it is an expression of a template literal (#14883) (Dunqing)
- 9397472 formatter: Should not wrap parenthesis for ComputedMemberExpression when it is not an option or it doesn't contain a call expression (#14882) (Dunqing)
- 3e62277 formatter: Should not add a soft line for the arrow function inside ExpressionContainer with a trailing comment (#14878) (Dunqing)
- 990916a formatter: Correct handling of leading own line before arrow function body (#14877) (Dunqing)
- 4a499b5 formatter: Correct printing trailing comments for if statement with non-block consequent (#14857) (Dunqing)
🧪 Testing
💼 Other
oxfmt v0.7.0
Immutable
release. Only release title and notes can be modified.
[0.7.0] - 2025-10-21
🚀 Features
- 6dfcd80 oxfmt: Search both .json and .jsonc config file (#14848) (leaysgur)
- aa024d9 formatter: Wrap parenthesis for
AssignmentExpressionthat are insideComputedMemberExpression(#14834) (Dunqing)
🐛 Bug Fixes
- 88fb768 formatter: Correct handling of ignore comment for
TSUnionTypeandTSMappedType(#14824) (Dunqing) - f7727c7 formatter: Ignore comment doesn't work for the expression statement (#14817) (Dunqing)
- 7a420a1 oxfmt: Handle
.d.tsfile correctly (#14835) (leaysgur)
🚜 Refactor
- 6fa7420 oxfmt: Use custom ignore builder (#14850) (leaysgur)
- 9d914a3 formatter: Improve comments handling (#14816) (Dunqing)
- f52863d formatter: Improve handling of type cast node (#14815) (Dunqing)
💼 Other
oxfmt v0.6.0
Immutable
release. Only release title and notes can be modified.
[0.6.0] - 2025-10-20
🚀 Features
- 7f91a26 oxfmt: Handle ignoring files (#14798) (leaysgur)
- 199a2c6 oxfmt: Support
--with-node-modulesoption (#14713) (leaysgur) - 6bf8bac formatter: Reimplement formatting for
ImportExpression(#14712) (Dunqing) - 3f2e036 formatter: Introduce
AstNode<ExpressionStatement>::is_arrow_function_body(#14709) (Dunqing) - df225e9 formatter: Add
AstNode::ancestorandAstNode::grand_parentmethods (#14700) (Dunqing) - 26c5f5a oxfmt: Ignore VCS directories by default (#14616) (leaysgur)
- fec2ed9 oxfmt: Use Prettier style config key and value (#14612) (leaysgur)
- 1b58521 oxfmt,language_server: Enable JSX for all JS source type (#14605) (leaysgur)
🐛 Bug Fixes
- 21c4285 formatter: Correct printing remaining trailing comments for
TSMappedType(#14761) (Dunqing) - 1d1573e formatter: Correct adding semicolons for TypeScript left-hand side nodes (#14760) (Dunqing)
- 4cc3b10 formatter: Improve handling of new lines between comments in
MemberChain(#14759) (Dunqing) - e6bce8e formatter: Break the left hand side of AssignmentLike node if it is an
ObjectPatternwith three properties (#14756) (Dunqing) - dc57a2b formatter: Incorrect handling of
VariableDeclaratorwith anArrowFunctionExpressioninitializer (#14731) (Dunqing) - 537185d formatter: Should always group the left side of
AssignmentPattern(#14730) (Dunqing) - ef02760 oxfmt: Handle relative path starts with dot (#14708) (leaysgur)
- ee37f5d oxfmt: Handle default cwd correctly (#14704) (leaysgur)
- 4283fd8 formatter: Correct printing comments for
JSXAttributeValue(#14719) (Dunqing) - 59c9e1b formatter: Avoid conditional being broken in arguments by trailing comments (#14718) (Dunqing)
- 7d64b96 formatter: Should wrap parentheses with JSX arguments of
NewExpression(#14717) (Dunqing) - 2068a63 formatter: Should indent TemplateExpression if it is a member expression that is part of
ChainExpression(#14714) (Dunqing) - 5ea3bb6 formatter: Incorrect handling of
ObjectPatternas anAssignmentPatternof a parameter (#14711) (Dunqing) - eb52529 formatter: Incorrect handling of
ObjectPatternas a parameter (#14670) (Dunqing) - 8ac10da formatter: Correct checking assignment layout for the right side with ownline comment and it is a
PrivateFieldExpression(#14664) (Dunqing) - 6cba9b1 formatter: Should not merge tail with head for MemberChain when its parent is ArrowFunctionExpression (#14663) (Dunqing)
- f44d3c0 formatter: Should not indent BinaryLikeExpression when its parent is
NewExpression(#14662) (Dunqing) - bf953b8 formatter: Should group nested test for TSConditionalType (#14661) (Dunqing)
- 63dc57b formatter: Correct handling if a template literal should be printed as a signle line (#14660) (Dunqing)
- 0150ad5 formatter: Should group type parameters and parameters for method-like and function-like nodes (#14659) (Dunqing)
- 392bf74 formatter: Improve handling of dangling comments in if statements (#14658) (Dunqing)
- fd52b10 formatter: Don't print CallExpression as MemberChain style when its only has one argument and it is a TemplateLiteral on its own line (#14657) (Dunqing)
- 29c3c60 formatter: Don't group nested await expression when its is the leftmost expression (#14656) (Dunqing)
- 72c7503 formatter: Correct checking function composition when the arguments have an call expression before function (#14655) (Dunqing)
- 2b645e2 formatter: Don't wrap parenthesis for
typewhen its grandparent isn't aExpressionStatement(#14654) (Dunqing) - e0eb966 formatter: Skip the leading semicolon when calculating leading lines (#14653) (Dunqing)
- 0961c3a oxlint,oxfmt: Skip traversing
.gitdirectories (#14590) (Boshen)
🚜 Refactor
- b7926f3 oxfmt: Update CLI --help details (#14796) (leaysgur)
- 173168b oxfmt: Refactor walk.rs and format.rs relationship (#14795) (leaysgur)
- aea9d79 oxfmt: Pass
PathBuffrom walk.rs to service.rs (#14716) (leaysgur) - 83e783a formatter: Organize utils structure (#14710) (Dunqing)
- 58dd74a formatter: Remove all
without_parenthesesusages (#14707) (Dunqing) - 75dfcad formatter: Simplify
ExpressionLeftSide(#14706) (Dunqing) - 273f0fe formatter: Remove unnecessary lifetimes for the implementations of
NeedsParentheses(#14703) (Dunqing) - bae5f11 formatter: Improve
AstNodeandAstNodes(#14686) (Dunqing)
⚡ Performance
🧪 Testing
- 7c42ea0 oxfmt: Remove args from snapshot file name (#14800) (leaysgur)
- 42d8c62 formatter: Add tests for sort-imports (#14685) (leaysgur)
💼 Other
oxfmt v0.5.0
Immutable
release. Only release title and notes can be modified.
[0.5.0] - 2025-10-14
🚀 Features
- 8077f9b oxfmt: Provide JSON schema for
.oxfmtrc.json(#14399) (leaysgur) - 51ddfa8 oxfmt: Support
.oxfmtrc.json(c)config file (#14398) (leaysgur)
🐛 Bug Fixes
- c4e12df formatter: Correct checking comments around the return argument (#14585) (Dunqing)
- 454303b formatter: Check empty lines between arguments incorrectly (#14584) (Dunqing)
- a5554a8 formatter: Print a line break incorrectly for directives (#14577) (Dunqing)
- 5db9774 formatter: Correct printing comments that are around the
StaticMemberExpression(#14543) (Dunqing) - 620dbac formatter: No need to wrap a parenthesis for
TSConditionalTypeandTSFunctionTypewhen its parent isTSUnionTypeand it only has one element (#14540) (Dunqing) - 1aec74f formatter: Missing parenthesis for
ComputedMemberExpressionwhen its parent is anNewExpression(#14530) (Dunqing) - 59f1d8f formatter: Missing parenthesis for
PrivateInExpressionwhen its parent is anUnaryExpression(#14529) (Dunqing) - b06059e formatter: Correct printing comments for logical expression (#14500) (Dunqing)
- be38095 formatter: Should break even if the right side of the assignment is a require when it has a leading own line comment (#14499) (Dunqing)
- 4d55654 formatter: Correct printing comments for the end of union type (#14498) (Dunqing)
- 4994872 formatter: Correct printing comments for
trystatement (#14497) (Dunqing) - 9a4da3d formatter: Should expand the parent if the member chain will break (#14487) (Dunqing)
- bba9689 formatter: Correct printing comments around the expression of
ComputedMemberExpression(#14486) (Dunqing) - dc5e08a formatter: Correct printing yield argument (#14485) (Dunqing)
- b8a0905 formatter: No need to wrap with parentheses for a type cast node (#14484) (Dunqing)
- b159215 formatter: Ignore the leading line break for the first argument of the call expression (#14483) (Dunqing)
- ea8f9ed formatter: Correct checking comments between the operator and the right side for assignment like nodes (#14482) (Dunqing)
- 4f19504 formatter: Block comments without a leading linebreak that are around the operator of the conditional expression should be printed as-is (#14474) (Dunqing)
- ef77997 formatter: Correct printing comments for
forstatements (#14473) (Dunqing) - 31595c3 formatter: Correct printing comments for assignment pattern (#14469) (Dunqing)
- 0f19be0 oxfmt: Normalize path delimiter on Windows (#14463) (leaysgur)
- 5856bc9 oxc_formatter: Fix arrow_parentheses: 'avoid' > 'as-needed' (#14462) (leaysgur)
🚜 Refactor
- 7bc86f4 formatter: Simplify foramtting import and export (#14576) (Dunqing)
- 29c3cf2 formatter: Remove
SiblingNode(#14551) (Dunqing) - 893bdac formatter: Improve printing comments for special nodes (#14544) (Dunqing)
- 97bb964 formatter: Improve line break detaching logic in SourceText (#14539) (Dunqing)
🧪 Testing
- bb43dc5 formatter: Add snapshot-based test infrastructure (#14400) (Dunqing)
💼 Other
oxlint v1.23.0
Immutable
release. Only release title and notes can be modified.
[1.23.0] - 2025-10-13
🚀 Features
- 452d128 linter: Node/no_process_env (#14536) (Kenneth Skovhus)
- a9e1261 linter: Implement react-refresh/only-export-components (#14122) (Rintaro Itokawa)
- a8d542b linter/no-duplicate-imports: Support
allowSeparateTypeImportsoption (#14527) (camc314) - 75a529c linter: Add run info about what functions rules implement (#13839) (camchenry)
- 4fbdef2 language_server: Support
fmt.configPathconfiguration (#14502) (Sysix) - 4d3ce2e language_server: Autodetect root
.oxfmtrc.json(#14466) (Sysix)
🐛 Bug Fixes
- fb4a20d language_server: Add whitespace for
// oxlint-disable-next-linefix (#14356) (Sysix) - 6fce7f4 oxlint/changelog: Remove duplicate changelog entries (#14528) (camc314)
- 74e52f3 linter/plugins: Resolve JS plugins with ESM condition names (#14541) (magic-akari)
- 9965676 linter/exhaustive-deps: Ignore empty strings passed to
additionalHooksoption (#14464) (Redas) - d0a8e3e linter:
vue/no_required_prop_with_defaultcalledOption::unwrap()on aNonevalue (#14491) (Sysix) - 1192ea2 linter: Correct
nextjs/no-typospath handling (#14480) (shulaoda) - 2796b16 tsgolint: Pipe tsgolints stderr (#14477) (camc314)
🚜 Refactor
- 6440cde linter: Remove lifetime of
Message(#14481) (Sysix) - f599bef language_server: Move
MessagetoDiagnosticReporttransformation to one place (#14447) (Sysix) - 4f301de napi/parser, linter/plugins: Improve formatting of generated code (#14554) (overlookmotel)
- 68c0252 napi/parser, linter/plugins: Shorten generated raw transfer deserializer code (#14553) (overlookmotel)
- 20e884e linter: Store
LintServiceinLintRunner(#14471) (Sysix) - 9e9c5ba linter: Simplify built-in lint plugin checks (#14518) (camchenry)
- 1986e0f linter/no-ex-assign: Use let-else chain (#14526) (camc314)
- ce9bcf0 linter/no-func-assign: Use let-else chain (#14525) (camc314)
- a9cea7c language_server: Use
FxHashSetforServerLinter::extended_paths(#14517) (Sysix) - ea5838e linter/no-import-assign: Use let-else chain (#14524) (camc314)
- f977700 language_server: Pass
LintOptionstoWorker::refresh_server_linter(#14510) (Sysix) - 54b001f linter/no-new-require: Improve diagnostic message clarity (#14511) (shulaoda)
- 650ea68 linter: Improve nextjs/no-typos rule (#14476) (shulaoda)
📚 Documentation
- 198f2e9 linter: Fix code example for
branches-sharing-code(#14514) (camc314) - d776a17 linter: Improve
nextjs/no-typosrule documentation (#14470) (shulaoda)
⚡ Performance
- b44a30e language_server: Transform
MessagetoDiagnosticReportwith one call (#14448) (Sysix) - 31766fd linter/plugins: Provide
locvia prototype (#14552) (overlookmotel) - aec0c08 linter: Allow analyzing node types in match blocks with guards (#14459) (camchenry)
- 9044187 linter: Skip running node-specific rule if file contains no relevant nodes (#14457) (camchenry)
- 422f54e linter: Only run rule run functions if implemented (#14454) (camchenry)
- 2c228ae liner: Use top-level match for
no_obj_calls(#14523) (camchenry) - c49d891 linter: Use match for
no_negated_condition(#14522) (camchenry) - e222fc2 linter: Use match for
no_multi_assign(#14521) (camchenry) - 4440516 linter: Refactor rules to take advantage of node type skipping (#14519) (camchenry)
- 78261d6 linter: Refactor
no-invalid-fetch-optionsto be more easily analyzed (#14458) (camchenry)
🧪 Testing
- 8d8881d linter/plugins: Expand tests for module resolution of plugins (#14559) (overlookmotel)
- 33b6cde language_server: Add basic tests for
WorkspaceWorker::did_change_configuration(#14531) (Sysix) - bfe1ecd language_server: Add tests for
WorkspaceWorker::init_watchers(#14516) (Sysix)
💼 Other
oxfmt v0.4.0
[0.4.0] - 2025-10-09
🚀 Features
- 142e7ac formatter/sort-imports: Implement options.ignoreCase: bool (#14367) (leaysgur)
- 5c8bd31 formatter/sort-imports: Implement options.sortSideEffects: bool (#14293) (leaysgur)
- 593c416 formatter/sort-imports: Add options.order: asc|desc (#14292) (leaysgur)
- f1a1f89 formatter/sort-imports: Implement basic sorting with tests (#14291) (leaysgur)
- f75b8f7 formatter/sort-imports: Wrap
ImportDeclarationwithJsLabels(#14109) (leaysgur) - 6be4ae5 formatter/sort-imports: Experimental sort-imports base (#14105) (leaysgur)
- cb29117 formatter: Correct printing parameters with
return_typefor function-like node (#14084) (Dunqing) - 90fd46f formatter: Normalize key of
TSPropertySignature(#14083) (Dunqing) - 6cfce80 formatter: Implement formatting for
TSTypeAliasDeclaration(#14040) (Dunqing) - 3097b60 formatter: Implement formatting for
TSMappedType(#14025) (Dunqing) - cd620bd formatter: Correct printing for
Class(#14024) (Dunqing) - 03244f1 formatter: Correct printing for
TSConditionalType(#14023) (Dunqing) - f6dc981 formatter: Implement formatting for
TSTupletype(#14019) (Dunqing) - 10a41ab formatter: Export doc() API to inspect IR in example (#14068) (leaysgur)
- 06a1df6 formatter: Implement formatting for
TSTypeParametersandTSTypeParameterInstantiation(#13919) (Dunqing) - 9b46dd7 formatter: Implement formatting for
TSTypeAssertion(#13911) (Dunqing) - 5710b13 formatter: Implement formatting for
TSIntersectiontype(#13910) (Dunqing) - 2d18144 formatter: Implement formatting for
TSUnionType(#13893) (Dunqing) - 0f15ed3 formatter: Implement formatting for
TSAsExpressionandTSSatisfiesExpression(#13892) (Dunqing)
🐛 Bug Fixes
- 59dc17e oxfmt: Change bin script to ESM (#14263) (Boshen)
- ad5c18a formatter: Correct parentheses in
TSIntersectionType(#14098) (Noel Kim (김민혁)) - 7c09b20 formatter: Print comments incorrectly if the node is without following a node (#14110) (Dunqing)
- ed33fad formatter: Merge the right side of
LogicalExpressionif it's aLogicalExpressionand both have the sameoperator(#14097) (Dunqing) - 1b0519c formatter: Correct printing comments within the type annotation of ArrayPattern and
ObjectPattern(#14077) (Dunqing) - e299ab0 formatter: Correct printing comments around decorators (#14076) (Dunqing)
- 7d11047 formatter: Correct a bunch of implementations for TypeScript (#14069) (Dunqing)
- 57cbf84 formatter: Correct preserving parentheses for
TSXXXTypenodes (#14022) (Dunqing) - 134f255 formatter: Missing parenthesis for
NewExpressionwhose callee is aTSNonNullExpressionwithTaggedTemplateExpression(#14021) (Dunqing) - 1e9ce4e formatter: Skip the parent node if it is a
TSNonNullExpressionorAstNodes::ChainExpressionforStaticMemberExpression(#14020) (Dunqing) - 3ce0775 formatter: Missing semicolon for
declarefunction (#13928) (Dunqing)
🚜 Refactor
- 70bd141 formatter: Improve formatting of
FunctionandArrowFunctionExpressionwith types (#14070) (Dunqing) - 226deee oxfmt: Rename build script to
.js(#14046) (overlookmotel)