Repository navigation
Releases
Releases Β· oxc-project/oxc
oxlint v1.92.0
Immutable
release. Only release title and notes can be modified.
π Features
- 4a52ba2 oxlint: Discover tsrs for type-aware linting (#28751) (camc314)
- b7d2c75 linter/eslint/no-redeclare: Add
ignoreDeclarationMergeoption (#28816) (Cam McHenry)
π Bug Fixes
- fa66fde oxlint,oxfmt: Resolve Vite+ config root from the config file directory (#28801) (MK (fengmk2))
- 2091564 linter/jsdoc/require-param: Ignore enclosing function JSDoc (#28866) (camc314)
- c6ec50b linter/react/only-export-components: Classify JSX values as non-components (#28761) (camc314)
- 3c051ab linter/vitest/prefer-called-exactly-once-with: Preserve neighboring code in autofix (#28864) (camc314)
- 674b962 linter/eslint/no-misleading-character-class: Use lazy regex for combining marks (#28822) (Sysix)
- 838d339 linter/vitest/prefer-called-exactly-once-with: Avoid panic on non-ASCII text (#28850) (YT)
- 8d24c26 linter/jsx-a11y/aria-role: Allow role={undefined} (#28804) (Abhay Godavarthy)
- a7143bf linter/eslint/no-restricted-imports: Respect allowTypeImports correctly for empty patterns (#28842) (Cam McHenry)
- 3d3a6f4 react-compiler: Ignore callback-local reassignments (#28820) (camc314)
- 0cc6515 linter/unicorn/prefer-type-error: Report throws in unbraced if branches (#28819) (camc314)
- ae43c80 linter/unicorn/prefer-single-call: Remove duplicate fix status (#28763) (Mikhail Baev)
- a8a621a linter/eslint/no-fallthrough: Ignore unreachable exits from infinite loops (#28755) (camc314)
- 7a17a80 linter/eslint/prefer-spread: Report calls on non-member expressions (#28753) (camc314)
- 28442f7 oxlint: Prevent --init from overwriting existing configs (#28754) (camc314)
- 0ae350d linter/unicorn/no-zero-fractions: Preserve exponent case (#28752) (camc314)
- b5b3f3f linter/eslint/no-misleading-character-class: Detect more combining characters (#28733) (Sysix)
β‘ Performance
oxfmt v0.77.0
Immutable
release. Only release title and notes can be modified.
π₯ BREAKING CHANGES
- 00d1a67 oxfmt: [BREAKING] Format
parser:vuefiles byoxc_formatter_htmlish(#28848) (leaysgur)
π Features
- 9a81e58 formatter_htmlish: Format Vue templates (#28847) (leaysgur)
- 119d82f formatter: Format a template's expressions and handlers as
JsRoot(#28846) (leaysgur)
π Bug Fixes
- fa66fde oxlint,oxfmt: Resolve Vite+ config root from the config file directory (#28801) (MK (fengmk2))
- 4d4104d formatter_htmlish: Preserve
doctypecase in embedded (#28797) (leaysgur) - ebfd40a formatter: Sort Tailwind calls printed as member chains (#28800) (Yuji Sugiura)
- e62e5cb formatter: Decide quotes of a Tailwind key printed as one class (#28798) (Yuji Sugiura)
- 959edc1 formatter: Don't sort templates in nested non-Tailwind calls (#28794) (Yuji Sugiura)
- 6ffbe32 formatter/jsdoc: Prevent
@tagfrom being moved to the line start (#28835) (leaysgur) - 94fbef5 formatter_css: Treat comments in
styleattr as fill items (#28832) (leaysgur) - e4a80f7 formatter_css: Normalize selectors inside
:deep,:slottedand:local(#28805) (leaysgur) - 255c5cc formatter: Measure Tailwind class argument after collapsing whitespace (#28745) (Lee Jaeha / Adam)
- e6c4fef formatter: Decide template and object key layouts from collapsed Tailwind classes (#28791) (Yuji Sugiura)
- 0b44164 formatter: Decide JSX opening element layout from collapsed Tailwind class string (#28744) (Lee Jaeha / Adam)
- b8ba9ae formatter: Print decorators on rest parameters (#28731) (YT)
β‘ Performance
oxlint v1.91.0
Immutable
release. Only release title and notes can be modified.
π Features
- 004647a track_memory_allocs: Add allocation tracking for linter rules (#28470) (Cam McHenry)
- 419c1b0 linter: Add allow and allowPattern options to react/capitalized-calls (Christian Vuerings)
π Bug Fixes
- a205cd3 linter/eslint/no-control-regex: Detect raw control characters (#28548) (camc314)
- 7c65777 linter/unicorn/prefer-global-this: Align typeof and worker API handling (#28549) (camc314)
- 987d5f1 linter/unicorn/no-invalid-fetch-options: Avoid treating unknown methods as GET (#28547) (camc314)
- e234dc8 linter/unicorn/no-useless-error-capture-stack-trace: Move to suspicious category (#28545) (camc314)
- b3dc411 linter/typescript/no-non-null-asserted-nullish-coalescing: Move to suspicious category (#28546) (camc314)
- cb64638 regular_expression: Reject incomplete Unicode atom escapes (#28448) (Boshen)
- c67167e linter: Only run React Compiler rules on files with top-level components or hooks (Boshen)
- 4c9d5aa linter: Treat Reanimated shared values as ref-like in React Compiler rules (Boshen)
- 61fe2af linter/react: Ignore impure calls in async components in react/purity (Rahul Kashyap)
- ed7df7d ast/estree: Include comments in TS Program span (#28326) (camc314)
- 31cbe37 linter: Make gitlab fingerprints unique per diagnostic (#28307) (camc314)
β‘ Performance
- 564559d linter/prefer-const: Avoid collecting resolved references (#28732) (Dunqing)
- bb947dc linter: Skip numeric separator formatting for short integers (#28485) (Cam McHenry)
- 1043dfa linter: Avoid collecting prefer-const binding identifiers (#28484) (Cam McHenry)
- 7c93eef linter: Reduce branches-sharing-code scratch allocations (#28483) (Cam McHenry)
- c0065fd linter: Allocate escape-case replacements only when needed (#28482) (Cam McHenry)
- d837414 linter: Lazily normalize capitalized-comments text (#28481) (Cam McHenry)
- 6baaad6 linter: Avoid no-var binding identifier allocations (#28480) (Cam McHenry)
- 882053b linter: Skip read-only parameters in no-param-reassign (#28479) (Cam McHenry)
- 92deebf linter: Reduce no-unmodified-loop-condition allocations (#28478) (Cam McHenry)
- f01d52d linter: Reduce no-duplicate-case allocations (#28477) (Cam McHenry)
- 6a72d84 linter: Reduce no-dupe-class-members allocations (#28476) (Cam McHenry)
- 77599ef linter: Reduce no-this-before-super allocations (#28475) (Cam McHenry)
- 2ea9f58 linter/no-dupe-else-if: Use smallvec to reduce allocs (#28474) (Cam McHenry)
- 69f0204 linter/react/rules-of-hooks: Reduce allocs (#28473) (Cam McHenry)
- b138c20 linter: Reduce allocs in no-dupe-keys (#28472) (Cam McHenry)
- 6f3e982 linter: Avoid operator allocations in no-useless-length-check (#28471) (Cam McHenry)
- fd68928 react-compiler: Skip passes lint does not need (Yagiz Nizipli)
- 224f4dd linter/eslint/sort-keys: Reserve initial capacity for string (#27624) (Cam McHenry)
- e4e01a3 linter/import/no-cycle: Compare visited modules by absolute resolved path (#27517) (Cam McHenry)
- 741b29b linter/import/no-cycle: Cache sorted module record snapshots (#27516) (Cam McHenry)
- 20022bb linter/import/no-cycle: Reuse traversal buffers between imports (#27481) (Cam McHenry)
- fd5edb7 linter/import/no-cycle: Reuse module records in diagnostic stack (#27480) (Cam McHenry)
- 73e877c linter/import/no-cycle: Don't allocate paths already seen (#27478) (Cam McHenry)
- 1515d53 linter/react/forward-ref-uses-ref: Narrow forward-ref-uses-ref dispatch (#28367) (Cam McHenry)
- ee51c01 linter/react/no-string-refs: Narrow AST dispatch (#28366) (Cam McHenry)
- bbfd692 linter/react/no-children-pop: Narrow AST dispatch (#28365) (Cam McHenry)
- a86158b linter/unicorn/prefer-set-size: Narrow AST dispatch (#28364) (Cam McHenry)
- a777fa6 linter/eslint/no-iterator: Narrow member dispatch (#28363) (Cam McHenry)
- bc5e94d linter/eslint/no-extra-boolean-cast: Narrow AST dispatch (#28362) (Cam McHenry)
- 93c6e6d linter/unicorn/no-useless-fallback-in-spread: Narrow AST dispatch (#28361) (Cam McHenry)
- 1a1f66e linter/typescript/no-this-alias: Narrow AST dispatch (#28360) (Cam McHenry)
- b102a91 linter/typescript/no-wrapper-object-types: Index references (#28359) (Cam McHenry)
- dbd8a0b linter/eslint/no-unassigned-vars: Batch by declaration (#28358) (Cam McHenry)
- 1108352 linter/typescript/prefer-as-const: Narrow AST dispatch (#28357) (Cam McHenry)
- d65531f linter/eslint/no-const-assign: Batch by declaration (#28356) (Cam McHenry)
- 1ec9991 linter/oxc/number-arg-out-of-range: Narrow AST dispatch (#28355) (Cam McHenry)
- 7a1243e linter/unicorn/no-invalid-fetch-options: Narrow AST dispatch (#28354) (Cam McHenry)
- 2ab73cc linter/unicorn/no-single-promise-in-promise-methods: Narrow AST dispatch (#28353) (Cam McHenry)
- 483c4c9 linter/eslint/no-compare-neg-zero: Narrow no-compare-neg-zero dispatch (#28352) (Cam McHenry)
- 56c99c6 linter/eslint/no-unsafe-negation: Narrow AST dispatch (#28351) (Cam McHenry)
- 84d974b linter/unicorn/prefer-string-starts-ends-with: Narrow AST dispatch (#28350) (Cam McHenry)
- 142ef4f unicorn: Narrow no-await-in-promise-methods dispatch (#28349) (Cam McHenry)
- a3dc7a2 linter/unicorn/no-await-expression-member: Optimize AST dispatch (#28348) (Cam McHenry)
- 481b638 linter/plugins: Create AST nodes with
Object.createinstead of__proto__literals (#27816) (Charles Wang)
oxfmt v0.76.0
Immutable
release. Only release title and notes can be modified.
π₯ BREAKING CHANGES
π Features
- 336b2c1 oxfmt: Support html-in-js templates closing a dynamic tag name (#28389) (Yuji Sugiura)
- 0a42af6 formatter_htmlish: Format end tags of omitted
html,headandbody(#28388) (Yuji Sugiura) - 44d8c2b formatter_htmlish: Implement HTML-ish formatter
Htmlvariant (#28272) (Yuji Sugiura) - 36e5ddb oxfmt: Add debug span for reading files (#28204) (leaysgur)
π Bug Fixes
- dbcc358 formatter: Keep arrow conditional body parens before a leading
function/class(#28710) (Yuji Sugiura) - fef809a formatter_htmlish: Handle XHTML (#28703) (leaysgur)
- f3dd201 formatter_htmlish: Keep SVG text under
xml:space="preserve"as written (#28382) (Yuji Sugiura) - fb3aefa formatter: Keep source parens around html-in-js placeholders past comments (#28381) (Yuji Sugiura)
- e738dae formatter: Quote keys added in an HTML event handler with single quotes (#28380) (Yuji Sugiura)
- 2e7a629 oxfmt: Format HTML in a
<script>body as an embedded part (#28379) (Yuji Sugiura) - f00862b formatter: Keep parens around a generic function type in a type assertion (#28173) (vidigoat)
- 9ead5c4 formatter: Handle
this.bandsuper.blikefoo.b(#28200) (leaysgur) - 72a54cf formatter: Break parens of
(a + b)[c]like(a + b).c(#28199) (leaysgur) - b8f4f34 formatter: Print
x.bandx.#bsamely (#28193) (leaysgur) - 9ddccb7 formatter: Keep parens for private field (#28188) (leaysgur)
β‘ Performance
- b6f1ac9 formatter_markdown: Bump parser to 0.0.4 and skip unread work (#28713) (leaysgur)
- 633ee96 formatter_css: Use
u32spans (#28708) (leaysgur) - f680ee1 formatter_yaml: Use
multilineflag for flow scalars (#28707) (leaysgur) - ff7c203 formatter_css: Avoid repeated scans and allocations in values (#28706) (leaysgur)
- 7cd46cb formatter_htmlish: Search script end tags by
<in embedded (#28704) (leaysgur) - 46f8efd formatter_graphql: Print block string lines borrowed from the source (#28701) (leaysgur)
- dce1485 formatter_htmlish: Skip escaping attr values without the chosen quote (#28700) (leaysgur)
- e9392c8 formatter_core: Search line terminators with memchr (#28699) (leaysgur)
- ceb26be formatter_htmlish: Use
charto escape attr quotes (#28697) (leaysgur) - 8239dac parser: Replace dragonbox_ecma with zmij_ecma (#28282) (Boshen)
π Documentation
- 303d9e8 formatter: Strengthen
start-token-no-double-parensrationale (#28711) (Yuji Sugiura) - a82ce83 oxfmt: Update unclassified divergence (#28685) (Yuji Sugiura)
- 7f18c20 formatter_htmlish: Note
classandsrcsetare formatted withembeddedLanguageFormatting: off(#28465) (Yuji Sugiura) - 01ed68a oxfmt,formatter_htmlish,formatter: Clean up behavior comments (#28384) (Yuji Sugiura)
- a363c27 formatter_css,formatter_yaml: Point parser citations at AGENTS.md (#28466) (Yuji Sugiura)
- 6586050 formatter_core: Document tab width in text width policy (#28393) (leaysgur)
- 49fbffb formatter_core: Tighten FORMATTER_POLICY (#28206) (leaysgur)
oxc crates_v0.157.0
Immutable
release. Only release title and notes can be modified.
π Features
- 8dd67a6 transform-react: Expose TypeScript transform options (Tomas SΓ€rnhammar)
- deed7dc parser: More friendly error for duplicate import attribute key (#28262) (sapphi-red)
π Bug Fixes
- eaa8e90 ecmascript: Avoid numeric
+folding when an operand may be a string (#28544) (camc314) - b03c7b8 regular_expression: Allow incomplete oversized legacy quantifiers (#28449) (Boshen)
- 128c67d semantic: Check strict eval and arguments writes by reference flags (#28445) (Boshen)
- c97c43c parser: Reject TypeScript default exports in JavaScript (#28440) (Boshen)
- fdd119f span: Count Unicode characters when filtering typo suggestions (#28452) (Boshen)
- cb64638 regular_expression: Reject incomplete Unicode atom escapes (#28448) (Boshen)
- fc0eed3 semantic: Stop let-binding scans at arrow functions (#28444) (Boshen)
- 3421516 parser: Preserve default import names in reexports (#28442) (Boshen)
- a1e7e5f parser: Reject optional class members in JavaScript (#28439) (Boshen)
- 5b9a7bc parser: Parse sloppy let expressions and labels (#28438) (Boshen)
- 8e61652 regex: Reject templates without cooked values (#28345) (Boshen)
- 3b36543 parser: Preserve in-context after TypeScript type arguments (#28300) (Boshen)
- 2e3126c regex: Decode constructor patterns and flags consistently (#28298) (Boshen)
- 8a90be2 regex: Track capture groups and disjunction identity (#28297) (Boshen)
- 3dc2cb0 regex: Preserve escape values and boundaries (#28296) (Boshen)
- fc8acbc parser: Handle leading-zero numeric exponents (#28295) (Boshen)
- 91a638d parser: Normalize raw template line endings with invalid escapes (#28285) (Boshen)
- 2ac9a42 parser: Allow parenthesized private-in expressions (#28284) (Boshen)
- 052bca9 ast: Prevent greyed out fields in AST types in IDEs (#28335) (overlookmotel)
- ed7df7d ast/estree: Include comments in TS Program span (#28326) (camc314)
β‘ Performance
- 9b6b7bf regular_expression: Advance validated Unicode escapes directly (#28514) (Boshen)
- 82e1982 regular_expression: Share Unicode property name prefixes (#28513) (Boshen)
- 5395a40 regular_expression: Parse class set character prefixes once (#28512) (Boshen)
- 3708934 regular_expression: Defer literal range dash allocation (#28511) (Boshen)
- d85ee3d semantic: Skip arguments ancestry checks outside classes (#28510) (Boshen)
- cf81d07 semantic: Reuse private reference resolution (#28509) (Boshen)
- a79eebc semantic: Avoid duplicate maps for public JavaScript members (#28508) (Boshen)
- 235ca3b semantic: Skip escape checks for unescaped strings (#28507) (Boshen)
- babf44c parser: Reuse shorthand assignment target identifiers (#28504) (Boshen)
- 444f24a ecmascript: Short-circuit simple parameter checks for rest (#28503) (Boshen)
- 04b20c0 semantic: Compute duplicate parameter policy once per list (#28446) (Boshen)
- dbf8482 parser: Use token lookahead for simple function types (#28489) (Boshen)
- bca1275 parser: Avoid unused destructuring rest capacity (#28499) (Boshen)
- 691be5c parser: Compact cover initialized name storage (#28495) (Boshen)
- b3b5444 parser: Build simple arrow bindings directly (#28493) (Boshen)
- e1c9baf parser: Disambiguate single-identifier arrow heads (#28491) (Boshen)
- 550e98a regular_expression: Avoid rescanning unique capture names (#28450) (Boshen)
- 10e9fc7 parser: Skip duplicate lookup for singleton import attributes (#28441) (Boshen)
- 5238839 parser: Use a stack buffer for float separators (#28435) (Boshen)
- 6e35e3c parser: Fast-path leaf expressions before delimiters (#28432) (Boshen)
- 3d7512c parser: Decode Unicode identifiers once (#28414) (Boshen)
- 30f59f4 parser: Factor object type opening brace (#28430) (Boshen)
- 028a267 parser: Always inline postfix update parsing (#28429) (Boshen)
- 1b5a171 parser: Reuse export kind classification (#28424) (Boshen)
- 179a432 parser: Factor return type identifier parsing (#28416) (Boshen)
- 553dd1d parser: Inline hot paths and fold function dispatch (#28404) (Boshen)
- de75d56 parser: Combine parenthesized arrow lookahead (#28412) (Boshen)
- a768a0c parser: Reuse comment annotations after rewind (#28408) (Boshen)
- 563d92a parser: Skip redundant source cursor updates (#28409) (Boshen)
- 7941ca9 parser: Factor tuple identifier parsing (#28398) (Boshen)
- 426c151 parser: Construct completed tokens without intermediate writes (#28291) (Boshen)
- df42953 minifier: Don't request another pass for block unwrapping (#28315) (Dunqing)
- c2d663d parser: Avoid vectors for single parenthesized expressions (#28374) (Boshen)
- 50bd0a9 parser: Size delimited lists after the first element (#28373) (Boshen)
- bd869b5 parser: Bypass redundant operand parsing (#28372) (Boshen)
- 455fc09 parser: Skip keyword checks for plain identifier expressions (#28371) (Boshen)
- 61303fb parser: Fast-path identifier operands (#28306) (Boshen)
- 6cf5b1a parser: Guard arrow and conditional parsing (#28305) (Boshen)
- 3666939 parser: Specialize identifier reference parsing (#28303) (Boshen)
- 0d6641a parser: Skip inapplicable expression parsing paths (#28294) (Boshen)
- 3be7997 parser: Reduce lexer search batch size (#28292) (Boshen)
- ab5655a regex: Remove redundant character-class and quantifier checks (#28288) (Boshen)
- ec8e8d4 parser: Remove redundant grammar and lexer checks (#28287) (Boshen)
- c903f5c parser: Specialize known-token parsing (#28286) (Boshen)
- 2683225 str:
static_ident!andstatic_str!macros guarantee const evaluation (#28340) (overlookmotel) - df90836 ast: Reduce compile time of
#[ast]macro (#28336) (overlookmotel) - 8239dac parser: Replace dragonbox_ecma with zmij_ecma (#28282) (Boshen)
oxlint v1.90.0
Immutable
release. Only release title and notes can be modified.
π Features
- cf34678 oxlint: Export
Oxlintrctype (#28132) (Sysix) - 831cdf1 oxlint: Require mininum oxlint-tsgolint version v7.0.2005 (#28118) (camc314)
- d1b00f4 linter/typescript: Implement no-unsafe-enum-assignment rule (#28117) (camc314)
- 165c91f linter/typescript/await-thenable: Support
allowMixedPromiseArraysoption (#28116) (camc314)
π Bug Fixes
- 7f3c908 linter/eslint/array-callback-return: Check callbacks passed with extra arguments (#28133) (sarankumar)
- 53be530 linter: Filter by type aware rules when looking up tsgolint rule severity (#28138) (NavpreetSSidhu)
- e0f8937 react-compiler: Compile a
trywhosecatchis unreachable instead of panicking (#28066) (Dunqing) - f5b625f linter/eslint/no-useless-concat: See through parenthesized expressions (#27984) (Rahul Kashyap)
- 4629bb2 linter/jest/no-conditional-expect: Check function expression callbacks (#28055) (camc314)
- 5c84098 semantic,linter: Report names with lone surrogates in enum and lint checks (#27991) (Dunqing)
- f3705a9 linter/eslint/prefer-const: Skip fixers if any declarator is reassigned (#28008) (Prince Jain)
- 4c0fa90 minifier,linter: Keep
deleteof constant members and later JSX keys (#27990) (Dunqing) - 0298062 linter/arrow-body-style: Keep type assertions when adding a block body (#27978) (Yan Almeida)
oxfmt v0.75.0
Immutable
release. Only release title and notes can be modified.
π Bug Fixes
- 5042019 formatter: Keep fill layout for array with comment after [ (#28170) (leaysgur)
- 9d37ff6 formatter: Use position-based comment checks for concise arrays (#28169) (leaysgur)
- 016c4a2 formatter: Keep a comment before
}inside a JSX spread child (#28103) (vidigoat) - 190bb1e formatter: Keep parens around an instantiation expression ending an operand through any tight parent (#28168) (leaysgur)
- a5314a1 formatter: Keep
;beforeinandinstanceofclass members (#28166) (leaysgur) - 3a56e7c formatter: Keep closing HTML comments at the start of a line (#28064) (Cameron)
- 23d23d6 formatter_markdown: Honor range ignore inside directives (#28164) (leaysgur)
- 5f1fd3d formatter: Measure width heuristics by display width (#28098) (leaysgur)
- a5a52cf formatter: Keep parens around private
inexpressions (#28096) (leaysgur) - 999496e formatter: Measure a short key by its display width (#28026) (vidigoat)
- 7e9aa44 formatter: Keep parens around a looser operand of an instantiation expression (#28025) (vidigoat)
- 6912d1f formatter: Keep an arrow signature that exactly fills the line for any body (#27989) (leaysgur)
- eb1d9f9 formatter_core: Count a flat
linespace infitsonly when text follows (#27987) (leaysgur)
β‘ Performance
- 1ed93af data_structures: Copy short strings without a memcpy call (#27953) (leaysgur)
- 7948f0b formatter_core: Shrink
FormatElementto 16B (#28012) (leaysgur) - 788af22 formatter: Keep
AstNodes on the stack, and only chain links in the arena (#27963) (leaysgur)
π Documentation
oxc crates_v0.156.0
Immutable
release. Only release title and notes can be modified.
π₯ BREAKING CHANGES
- cf8296f ecmascript: [BREAKING] Fold surrogate strings with JSStr constants (#27098) (Dunqing)
π Features
π Bug Fixes
- f4dac9e semantic: Separate hoisted vars from block type bindings (#27936) (limadog9)
- 9ec6617 minifier: Keep brackets on negative and non-finite numeric keys (#27855) (Yunus Ozen)
- 520a26e minifier: Keep the default in shorthand assignment targets (#28183) (waltu)
- def47b8 react-compiler: Keep manual memoization as written when its dependencies can't be honoured (#28101) (Dunqing)
- 704d8cf transformer_plugins: Keep the bare inject when references to it remain (#26965) (Bharadwaj Pendyala)
- 6d7b372 minifier: Handle sequence exprs when folding if to expr statement (#27939) (Armano)
- e3eca41 runtime: Align async iterator throw with Babel (#28059) (camc314)
- af0258d parser: Parse source imports named type (#28062) (camc314)
- 83633a7 parser: Parse escaped class field names after initializers (#28061) (camc314)
- 90c58ac parser: Parse postfix updates of sloppy
letidentifiers (#28060) (camc314) - 0e2934f codegen: Preserve default import names in source maps (#28058) (camc314)
- 09bdb80 minifier: Allow argument rewrite with with leading var assignments (#28056) (Armano)
- ebcdcd9 minifier: Preserve rest destructuring side effects (#27981) (camc314)
- 5c84098 semantic,linter: Report names with lone surrogates in enum and lint checks (#27991) (Dunqing)
- bd70a9b ecmascript: Use ECMAScript whitespace when folding
parseFloat/parseInt/trim(#27719) (Dunqing) - 4c0fa90 minifier,linter: Keep
deleteof constant members and later JSX keys (#27990) (Dunqing)
β‘ Performance
- 3493ce3 minifier: Reuse is_error_constructor and simplify substitute_global_new_expression (#28149) (Armano)
- a22c9f2 parser: Move annotation comment handling out of hot paths (#28139) (camc314)
- 1ed93af data_structures: Copy short strings without a memcpy call (#27953) (leaysgur)
π‘οΈ Security
oxlint v1.89.0
Immutable
release. Only release title and notes can be modified.
π₯ BREAKING CHANGES
- e3c1b11 ast: [BREAKING] Preserve lone surrogates in static property names (#27095) (Dunqing)
- a0a987c ast: [BREAKING] Preserve lone surrogates in static member names (#26677) (Dunqing)
π Features
- 770ada4 linter: Mark vue 3 rules as recommended (#27717) (Cam McHenry)
- ba38c1d linter: Mark react/react-hooks rules as recommended (#27701) (Cam McHenry)
- d85a3ba linter: Mark promise rules as recommended (#27693) (Cam McHenry)
- e71c88a linter: Mark node rule as recommended (#27692) (Cam McHenry)
- 7213f61 linter: Mark nextjs rules as recommended (#27691) (Cam McHenry)
- d7c6b26 linter: Mark jsx-a11y rules as recommended (#27690) (Cam McHenry)
- 199dfdc linter: Mark jsdoc rules as recommended (#27689) (Cam McHenry)
- 780bff3 linter: Mark jest/vitest rules as recommended (#27672) (Cam McHenry)
- 6ae6859 linter: Mark import rules as recommended (#27671) (Cam McHenry)
- b7a1df3 linter: Mark unicorn rules as recommended (#27670) (Cam McHenry)
- c44a355 linter: Mark typescript rules as recommended from upstream (#27634) (Cam McHenry)
- 6b49dba linter: Mark eslint rules as recommended from upstream (#27632) (Cam McHenry)
π Bug Fixes
- 7c47246 linter: Check module specifiers and string values that contain lone surrogates (#26717) (Dunqing)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- 326904f linter/unicorn/no-useless-undefined: Allow
undefinedinReact.useRef(#25027) (Chris Dokurno) - f9cf165 linter/unicorn/prefer-spread: Ignore super method calls (#27868) (camc314)
- 00484e1 linter/eslint/prefer-const: Report destructuring assignments inside blocks (#27856) (camc314)
- 9c35461 linter/eslint/sort-vars: Report every out-of-order declaration (#27767) (camc314)
- 01e1c5e linter/unicorn/prefer-string-replace-all: Resolve regex variables (#27769) (camc314)
- 7f474d5 linter/eslint/no-loop-func: Detect writes after the loop (#27754) (camc314)
- 4b7fea6 linter/eslint/block-scoped-var: Ignore declarations without writes (#27760) (camc314)
- 2947917 linter/eslint/no-lonely-if: Check final else blocks in else-if chains (#27759) (camc314)
- fc039b5 linter/eslint/sort-imports: Check imports after other statements (#27749) (camc314)
- 1acba97 linter/unicorn/prefer-at: Report slice index reads once (#27762) (camc314)
- 6190e26 linter/eslint/prefer-arrow-callback: Ignore functions used as conditional tests (#27533) (Anzal Husain Abidi)
- b3cdaaf linter/eslint/sort-keys: Check computed identifier names (#27748) (camc314)
- 170e608 linter/unicorn/prefer-native-coercion-functions: Check object methods and function properties (#27750) (camc314)
- 9261df7 linter/unicorn/prefer-string-raw: Check object property values (#27758) (camc314)
- ddea86b linter/eslint/prefer-template: Report separate nested concatenations (#27764) (camc314)
- 2c67197 linter/eslint/no-unused-vars: Count conditional calls in sequences as uses (#27755) (camc314)
- 7f22fa0 linter/unicorn/prefer-regexp-test: Check logical operands in boolean contexts (#27761) (camc314)
- 3c44398 linter/eslint/class-methods-use-this: Count this in parameter defaults (#27756) (camc314)
- d85923f linter/eslint/no-param-reassign: Report rest parameter writes (#27765) (camc314)
- 8ea47bb linter/unicorn/prefer-type-error: Handle parenthesized type checks (#27766) (camc314)
- e96856c linter/unicorn/catch-error-name: Check unused underscore-prefixed names (#27751) (camc314)
- d8ca399 linter/unicorn/no-array-callback-reference: Ignore callback factory calls (#27763) (camc314)
- 1267ab8 linter/eslint/max-params: Count rest parameters (#27757) (camc314)
- 9ff25c3 linter/eslint/no-useless-assignment: Report dead stores to function parameters (#27735) (camc314)
- ee5e730 linter/eslint/no-setter-return: Check setters in property descriptors (#27731) (camc314)
- edbb5ed linter/eslint/id-length: Check destructuring assignment targets (#27724) (Yunus Ozen)
- 0e40acb linter/eslint/no-magic-numbers: Restrict unary exemptions to numeric signs (#27723) (Yunus Ozen)
- ae7e44b linter/eslint/no-div-regex: Report quantified leading equals (#27722) (Yunus Ozen)
- eb461f8 linter/unicorn/consistent-function-scoping: Count self-referencing variables as captures (#27726) (camc314)
- 5c8e731 linter/unicorn/catch-error-name: Avoid fix symbol name collisions (#27702) (camc314)
- 9a424c2 oxlint,oxfmt: Correct Node.js TypeScript support range (#27699) (camc314)
- 5dc0152 linter/eslint/no-var: Avoid fixes for redeclared bindings (#27697) (camc314)
β‘ Performance
π Documentation
oxfmt v0.74.0
Immutable
release. Only release title and notes can be modified.
π Bug Fixes
- e236de0 formatter_tests: Skip conformance spec calls with non-literal options (#27957) (leaysgur)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- a5d8184 jsdoc: Parse code spans after quotes in descriptions (#27955) (leaysgur)
- 2645d2c formatter_markdown: Treat link destinations and footnote references as opaque to code span fences (#27948) (leaysgur)
- 4d8195c formatter_yaml: Keep a root plain scalar starting with a document marker verbatim (#27947) (leaysgur)
- 529b057 formatter_core: Keep front matter verbatim when body starts with indented delimiter (#27946) (leaysgur)
- c22a9b2 formatter: Treat static block with only empty statements as empty (#27945) (leaysgur)
- d3ff3f6 formatter/jsdoc: Write descriptions as written to not close the comment (#27823) (leaysgur)
- c4c1727 formatter/sort_imports: Keep comments after the last import (#27822) (leaysgur)
- a64677e formatter: Print JSDoc embedded snippets with LF (#27821) (leaysgur)
- 2c1cc20 formatter: Keep comment only Vue bindings as-is (#27820) (leaysgur)
- 1bf236d formatter/sort_imports: Do not use comments as import source (#27819) (leaysgur)
- 52ee29d formatter_yaml: Never start col-0 line with document marker or BOM (#27818) (leaysgur)
- 81c75e7 formatter/css: Keep glued css-in-js statement placeholders glued (#27814) (leaysgur)
- a1ef7f4 formatter: Keep typecast parens in same-operator binary and arrow chain (#27812) (leaysgur)
- de110ce formatter: Keep more parens around
TSInstantiationExpression(#27811) (leaysgur) - 8b02e90 formatter_json: Reject invalid JSON instead of dropping them (#27785) (leaysgur)
- 6fe4c1b formatter: Treat lone CR in JSX text and argument blank lines (#27780) (leaysgur)
- 5605362 oxfmt: Validate editorconfig as like oxfmtrc (#27778) (leaysgur)
- 5b2acb0 formatter_core: Report error position releative to CRLF source (#27777) (leaysgur)
- c78e80e formatter_core: Report parse error positions relative to the BOM-headed source (#27776) (leaysgur)
- 3a980c9 formatter_toml: Handle BOM like other languages (#27775) (leaysgur)
- 97c9fc4 oxfmt: Handle BOM in config JSON (#27774) (leaysgur)
- 28eb4a7 oxfmt: Print trailing newline for
--list-different(#27773) (leaysgur) - d2bea21 formatter: Glue comments to an opener in empty for-head slots and array holes (#27737) (leaysgur)
- 6a95ec1 formatter: Keep comment position on holey array (#27730) (leaysgur)
- 54769da formatter: Break after dangling line comment in holey array (#27729) (leaysgur)
- 99077ef formatter_json: Reject unary expressions other than signed numbers (#27728) (leaysgur)
- 22cd4cd formatter_json: Handle holey array and comments (#27727) (leaysgur)
- 644ca1c formatter: Do not indent logical chains whose right sides all inline (#27667) (leaysgur)
- a07a0fb formatter: Wrap comment-only JSX expression container in a group (#27666) (leaysgur)
β‘ Performance
- e220293 formatter: Check only the operator suppression mark in
is_quiet(#27952) (leaysgur) - e5fdc9c formatter_core: Write into one element stack through a concrete
Formatter(#27559) (leaysgur) - a342f7e formatter: Skip comment handling for nodes with no comment near them (#27557) (leaysgur)
- d8ce750 formatter: Write string literals with swapped quotes into the arena (#27558) (Yuji Sugiura)
- 1c393c0 formatter_core: Skip scanning texts with nothing to rewrite (#27561) (leaysgur)
- 1d3ef10 formatter_core: Keep the embedded IR when nothing in it is rewritten (#27673) (leaysgur)