Oxc

Developer Tools

A collection of JavaScript tools written in Rust — linter, formatter, parser and resolver.

Latest apps_v1.78.0 · by OxcWebsiteoxc-project/oxc

Release activity

Release activity — 12 releases across 7 days since Jul 6, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Jul 6, 2026. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
Monday2 releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 20262 releases on Jul 27, 20261 release on Aug 3, 20262 releases on Aug 10, 2026
TuesdayNo releases on Jul 7, 20262 releases on Jul 14, 20262 releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
WednesdayNo releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026
ThursdayNo releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 20261 release on Aug 6, 2026
FridayNo releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

12 releases since Jul 6, 2026, busiest day 2

Changelog

apps_v1.78.0

oxlint v1.78.0 & oxfmt v0.63.0

Added 3
  • Implement `no-blank-blocks` rule in jsdoc linter
  • Implement `one-var` rule in eslint linter
  • Add options to `anchor-has-content` rule to match eslint
Fixed 17
  • Preserve template coercion whitespace in `no-implicit-coercion` rule
  • Preserve source text for JS plugin ignore fixes
  • Handle parenthesized calls in `prefer-promise-reject-errors` rule
  • Ignore optional chains in `new-for-builtins` rule
  • Downgrade auto-fix to dangerous for `prefer-code-point` rule
  • Validate `consistent-test-filename` regex patterns in vitest linter
Table of Contents
Oxlint v1.78.0
🚀 Features
  • ccb8fe8 linter/jsdoc: Implement no-blank-blocks rule (#25207) (Mikhail Baev)
  • d4a897c linter/eslint: Implement one-var rule (#24470) (Cole Ellison)
  • 5ab9340 linter/jsx-a11y/anchor-has-content: Add options to match eslint (#24571) (Cole Ellison)
🐛 Bug Fixes
  • b746e00 linter/eslint/no-implicit-coercion: Preserve template coercion whitespace (#25470) (camc314)
  • a92c541 linter: Preserve source text for JS plugin ignore fixes (#25280) (Norcleeh)
  • 675c840 linter/eslint/prefer-promise-reject-errors: Handle parenthesized calls (#25378) (camc314)
  • 1703739 linter/unicorn/new-for-builtins: Ignore optional chains (#25411) (tanakalucky)
  • 95ece63 linter/unicorn/prefer-code-point: Downgrade the auto-fix to dangerous (#25412) (leemr)
  • c451a0e linter/vitest: Validate consistent-test-filename regex patterns (#25408) (Mikhail Baev)
  • 937825c react_compiler: Disable exhaustive memo validation by default (#25417) (Boshen)
  • f0f7dae linter/eslint/no-unused-vars: Report invalid regex options (#25380) (Cameron)
  • 44e73fd linter/unicorn/prefer-array-flat: Fix concat.apply suggestions (#25373) (Cameron)
  • 6846a9a linter/react/rules-of-hooks: Detect constructor callbacks (#25377) (camc314)
  • b247a9d linter/unicorn/new-for-builtins: Support Float16Array (#25382) (tanakalucky)
  • 19109cd linter/unicorn/error-message: Support SuppressedError messages (#25375) (camc314)
  • 9c13f5e linter: Assert token lookup invariants (#25368) (camc314)
  • bc35f83 linter/eslint/no-unused-vars: Bound catch parameter lookup (#25367) (camc314)
  • c159fb9 linter/unicorn/switch-case-braces: Bound token lookup (#25363) (camc314)
  • 03b2eb2 linter/unicorn/no-static-only-class: Bound token lookup (#25361) (camc314)
  • 0afc59e linter/unicorn/empty-brace-spaces: Bound token lookup (#25353) (camc314)
  • 2963d98 linter/eslint/no-unreachable-loop: Do not report loops whose body has a finally block (#25335) (Todor Andonov)
  • 589e5fb linter/eslint/no-param-reassign: Validate ignorePropertyModificationsForRegex property (#25346) (Mikhail Baev)
  • aae5d8b linter/eslint/no-throw-literal: False positive on variable declared without initializer (#25275) (cjnoname)
  • 6b1c479 oxlint: Normalize customized rule names (#25316) (camc314)
  • d494eb5 linter/unicorn/consistent-existence-index-check: Bound token lookup (#25325) (camc314)
  • 4266037 linter/typescript/prefer-namespace-keyword: Bound token lookup (#25322) (camc314)
  • 4745b4e linter/typescript/no-namespace: Bound token lookup (#25321) (camc314)
  • 648a481 linter/eslint/one-var: Avoid joining exported declarations (#25314) (camc314)
  • 9573937 linter/typescript: Validate ban-ts-comment description_format (#25320) (Mikhail Baev)
  • ebf7d18 linter/typescript/consistent-type-definitions: Bound token lookup (#25281) (camc314)
  • 1501ccf linter/typescript/consistent-generic-constructors: Bound token lookup (#25258) (camc314)
⚡ Performance
  • 8f784f3 linter: Reduce rule config dispatch size (#25461) (Boshen)
  • 2de4ec2 linter: Reduce visitor code size (#25441) (Boshen)
  • 6fb7f47 linter/unicorn/prefer-export-from: Narrow ExportFromDeclaration lookup (#25381) (camc314)
  • e3f6263 linter/unicorn/prefer-default-parameters: Avoid reference allocation (#25379) (camc314)
  • d863473 linter/vue/max-props: Narrow AST dispatch (#25372) (camc314)
  • 273d867 linter: Avoid diagnostic sorting after applying fixes (#25079) (Sysix)
  • 4ec9189 oxlint/lsp: Avoid second lock for getting/removing unused directives (#25350) (Sysix)
  • 6c0d01b oxlint/lsp: Preallocate fix-content vec (#25351) (Sysix)
  • 3a94055 linter: Avoid per-call heap allocations in jest and unicorn helpers (#25210) (Connor Shea)
  • 4abff11 linter: Avoid redundant message work in the agent reporter (#25315) (Connor Shea)
  • 6bb5421 linter: Hoist current_dir out of the stylish reporter loop (#25313) (Connor Shea)
  • 9a7c323 linter: Compute diagnostic Info once per diagnostic in junit reporter (#25312) (Connor Shea)
  • 1cf7dde oxlint: Render JSON report into a single buffer (#25295) (connorshea)
  • 8492cfd linter/typescript/ban-ts-comment: Bail early with substring guard (#25301) (Jacob Asper)
  • 7607f04 linter/typescript/ban-tslint-comment: Replace regex with manual parser (#25299) (Jacob Asper)
Oxfmt v0.63.0
🚀 Features
  • fd02a89 oxfmt: Dispatch yaml-in-css(frontmatter) to oxc_formatter_yaml (#25336) (leaysgur)
  • ab12665 formatter_core: Add hardlineWithoutBreakParent equivalent IR (#25273) (leaysgur)
🐛 Bug Fixes
  • 95dc917 oxfmt: Drop IR Space at line start for js-in-xxx (#25460) (leaysgur)
  • b63eccc formatter: Keep comments after TS this_param (#25459) (leaysgur)
  • ab52a59 formatter: Format xxx-in-js inside JSDoc js fence (#25414) (leaysgur)
  • 1a2c64a formatter,oxfmt: Apply effective print width for JSDoc fence (#25413) (leaysgur)
  • 2eaede9 formatter_core: Unify leading-BOM handlings (#25340) (leaysgur)
  • ef1d04b formatter: Break mapped type brackets (#25297) (leaysgur)
  • 4e6f3f1 formatter: Break index signature brackets (#25296) (leaysgur)
  • e23dccf formatter_css: Bump oxc-css-parser to accept unknown at-rule with interpolated (#25277) (leaysgur)
  • c29b587 formatter_core: Measure decided-flat fill separator as flat during group re-measure (#25276) (leaysgur)
  • f3c6953 formatter_yaml: Don't rewrite overflowing key to implicit (#25274) (leaysgur)
⚡ Performance
  • c9d1a5b oxfmt: Spawn tinypool lazily (#25298) (leaysgur)
📚 Documentation
  • 6eae5c9 formatter,oxfmt: Record embed-layer decisions in place (#25422) (leaysgur)
  • 51224a7 formatter_yaml: Pin EOF blank lines divergence (#25269) (leaysgur)
View originalPermalink
How apps_v1.78.0 went
crates_v0.144.0

oxc crates_v0.144.0

Added 1
  • Add ArenaVec::push_mut to allocator
Changed 2
  • Narrow TSInterfaceHeritage::expression to TSTypeName
  • Restructure React transform options
Fixed 14
  • Wrap string literal in parens after directives in codegen
  • Preserve cast parentheses in conditional tests
  • Preserve satisfies parentheses before bitwise operators
  • Avoid unsafe return removal in labeled blocks
  • Preserve terminal license comments in parser
  • Downgrade nonfatal compiler diagnostics in transform_react
Removed 3
  • Group class heritage into ClassHeritage
  • Remove duplicated VariableDeclarator::kind
  • Split TS external modules & Namespace Declarations
💥 BREAKING CHANGES
  • a33788e ast: [BREAKING] Group class heritage into ClassHeritage (#25360) (camc314)
  • 5c5cdcd ast: [BREAKING] Narrow TSInterfaceHeritage::expression to TSTypeName (#24360) (camc314)
  • 6be314f ast: [BREAKING] Remove duplicated VariableDeclarator::kind (#25319) (camc314)
  • 44fd320 ast: [BREAKING] Split TS external modules & Namespace Declarations (#25284) (camc314)
🚀 Features
  • 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
  • fe111eb allocator: Improve doc comments for Arena methods (#24922) (overlookmotel)
View originalPermalink
How crates_v0.144.0 went
crates_v0.143.0

oxc crates_v0.143.0

Added 9
  • Introduce `ExportDeclaration`, `ExportFromDeclaration`
  • Introduce `ArrowFunctionBody` enum
  • Derive `GetSpan` for `Comment`
  • Generate minifier scope collector
  • Skip transparent TS expressions
  • Add React Compiler transform binding
Changed 4
  • Return borrowed JSDoc so the parse cache works
  • Store single parameter in `TSIndexSignature::parameter`
  • Change `TSIndexSignatureName::name` to `Ident`
  • Make `Box` `Send` + `Sync` when the type it contains is
Fixed 5
  • Preserve if-chain idempotency and correct side effects when alternate should not be moved
  • Do not treat lone-surrogate strings as constants
  • Strip re-export attributes
  • Report export imports in namespaces
  • Preserve nonfatal diagnostics in React Compiler
Removed 2
  • Remove `ArenaBox::dangling` method
  • Remove conversion to `Box` from AST builder methods
💥 BREAKING CHANGES
  • 4120da0 semantic: [BREAKING] Return borrowed JSDoc so the parse cache works (#25186) (Connor Shea)
  • f0a41c8 allocator: [BREAKING] Remove ArenaBox::dangling method (#25236) (overlookmotel)
  • 067da8c ast: [BREAKING] Store single parameter in TSIndexSignature::parameter (#25154) (camc314)
  • a0c7788 ast: [BREAKING] Change TSIndexSignatureName::name to Ident (#25150) (camc314)
  • 1bdedd1 ast: [BREAKING] Introduce ExportDeclaration, ExportFromDeclaration (#25095) (camc314)
  • c917f20 ast: [BREAKING] Introduce ArrowFunctionBody enum (#24987) (camc314)
  • 7e1199c ast: [BREAKING] Remove conversion to Box from AST builder methods (#25038) (overlookmotel)
🚀 Features
  • 3c8312e allocator: Make Box Send + Sync when the type it contains is (#25242) (overlookmotel)
  • cb5bc08 ast: Derive GetSpan for Comment (#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)
View originalPermalink
How crates_v0.143.0 went
apps_v1.77.0

oxlint v1.77.0 & oxfmt v0.62.0

Added 4
  • Introduce ExportDeclaration, ExportFromDeclaration
  • Introduce ArrowFunctionBody enum
  • Expand bad-char-at-comparison rule coverage
  • Show file:line:col in github format annotation messages
Changed 3
  • Return borrowed JSDoc so the parse cache works
  • Store single parameter in TSIndexSignature::parameter
  • Move prefer-promise-reject-errors category to pedantic
Fixed 13
  • Detect parenthesized member expression object in new-for-builtins
  • Reject duplicate JS plugin names
  • Ignore unsigned shifts in prefer-math-trunc
  • Handle ambient error variables in prefer-promise-reject-errors
  • Bound token lookup in no-async-await
  • Bound token lookups in bad-bitwise-operator
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 ArrowFunctionBody enum (#24987) (camc314)
🚀 Features
  • 0b9f83c linter/oxc/bad-char-at-comparison: Expand coverage (#25001) (Mikhail Baev)
  • 1fb3d70 oxlint: Show file:line:col in github format annotation messages (#25020) (Faris Tristan Fabian)
🐛 Bug Fixes
  • 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 .gitignore for walk targets and explicit paths (#25133) (leaysgur)
  • b83993b linter/eslint/prefer-const: Bound token lookup (#25194) (camc314)
  • aeabf63 linter/eslint/object-shorthand: Bound token lookups (#25193) (camc314)
  • 48f302c linter/eslint/no-var: Bound token lookup (#25192) (camc314)
  • 1f595de linter/eslint/no-unused-vars: Bound token lookups (#25191) (camc314)
  • e52f4c4 linter/eslint/no-unexpected-multiline: Use bounded token lookup (#25190) (camc314)
  • ca80338 linter/eslint/eqeqeq: Use bounded token lookup (#25189) (camc314)
  • df91684 linter: Make the remaining token lookups comment-aware (#25182) (connorshea)
  • 2401bb8 linter/eslint/prefer-const: Skip Svelte and Vue files (#25148) (Pitiș Radu)
  • b870897 linter: Don't match tokens inside comments when locating spans (#25181) (connorshea)
  • b474da1 linter/typescript/consistent-type-imports: Make token lookups comment-aware (#25180) (connorshea)
  • 81f82db linter: Don't insert an ASI semicolon into an unbraced statement body (#25160) (Vladexy88x)
  • 31333be linter/no-magic-array-flat-depth: Scan for ( by byte offset instead of character count (#25130) (connorshea)
  • 56e9c83 linter: Index source text by byte offset instead of char count (#25131) (connorshea)
  • 5c0fa61 linter/eslint/no-warning-comments: Unify config structs and remove manual options docs (#25151) (Mikhail Baev)
  • a922355 docs: Incorrect quotations in role_supports_aria_props.rs (#25077) (Maximilian Franzke)
  • e8c4c05 linter/eslint/no-unreachable-loop: Handle caught errors correctly (#25071) (camc314)
  • 2b02711 oxlint: Correct --warn flag help text (#25059) (Faris Tristan Fabian)
  • 97f084f linter/eslint/no-control-regex: Allow null escape (#25070) (camc314)
⚡ Performance
  • 224c21a linter/vue/no-side-effects-in-computed-properties: Borrow property names in the mutation walk (#25212) (connorshea)
  • d36e9c9 linter/unicorn/prefer-export-from: Skip non-violating imports early (#25183) (connorshea)
  • 6f2b933 linter/import/no-cycle: Drop two Vec allocations per graph edge (#25004) (Connor Shea)
  • 79ddb18 linter/import/no-cycle: Skip the graph walk for acyclic modules (#25003) (Connor Shea)
📚 Documentation
  • f8392cd linter/eslint/prefer-promise-reject-errors: Recommend type aware rule (#25241) (camc314)
  • 9dc7756 linter/typescript/no-unnecessary-condition: Clarify options (#25110) (camc314)
Oxfmt v0.62.0
💥 BREAKING CHANGES
  • 067da8c ast: [BREAKING] Store single parameter in TSIndexSignature::parameter (#25154) (camc314)
  • a0c7788 ast: [BREAKING] Change TSIndexSignatureName::name to Ident (#25150) (camc314)
  • 1bdedd1 ast: [BREAKING] Introduce ExportDeclaration, ExportFromDeclaration (#25095) (camc314)
  • c917f20 ast: [BREAKING] Introduce ArrowFunctionBody enum (#24987) (camc314)
  • 0c16cb5 oxfmt: [BREAKING] Format parser:yaml files by oxc_formatter_yaml (#24890) (leaysgur)
🚀 Features
  • 1b57f78 oxfmt: Support tsx-in-vue (#25063) (leaysgur)
  • be7f6da oxfmt: Colorize diff file list in check mode (#25061) (leaysgur)
🐛 Bug Fixes
  • 68146bd formatter_css: Preserve glued plugin words in grid values (#25225) (leaysgur)
  • 20f68e7 oxlint,oxfmt: Respect .gitignore for walk targets and explicit paths (#25133) (leaysgur)
  • a9e76e9 oxfmt: Rework tsx-in-vue support (#25106) (leaysgur)
  • dd28596 formatter_css: Bump oxc-css-parser for substituted at-rule preludes (#25104) (leaysgur)
  • ca1ba71 formatter: Hug arrows with type-reference return annotations (#25044) (Pitiș Radu)
  • f56009a oxfmt: Correct prose about comment width in fits measurement (#25054) (leaysgur)
  • 22fdda4 oxfmt/conformance: Fix typo (#25053) (leaysgur)
  • ee344bd formatter_yaml: Break long keys off a block scalar header (#25014) (leaysgur)
  • d5e3476 formatter_yaml: Let ancestor collection values claim end comments after block scalars (#24897) (leaysgur)
  • ec05297 formatter_yaml: Align sequence container end comments to the dash width (#24891) (leaysgur)
  • e6e584b oxfmt: Type jsdoc. enum options (#25008) (leaysgur)
⚡ Performance
  • b91d5a8 formatter_css,formatter_graphql,formatter_yaml,formatter_json: Pre alloc IR buffers (#25234) (leaysgur)
📚 Documentation
  • eaa7c69 formatter_core: Extract FORMATTER_POLICY (#25233) (leaysgur)
  • a1842e2 formatter_json: Fix outdated separeted.rs comments (#25144) (leaysgur)
  • 193e16f formatter/jsdoc: Correct str_width attribution (#25142) (leaysgur)
View originalPermalink
How apps_v1.77.0 went
apps_v1.76.0

oxlint v1.76.0 & oxfmt v0.61.0

Added 8
  • Verify eslint/no-restricted-globals config schema
  • Verify jest/vitest prefer-lowercase-title config schema
  • Add bad-match-all-arg rule
  • Implement exports-style rule
  • Implement id-denylist rule
  • Implement suggestion for class-literal-property-style rule
  • Support oxc.fmt.disableNestedConfig in oxfmt/lsp
  • Implement YAML formatter
Changed 3
  • Only run jest-vitest/no-test-return-statement on return statements
  • Rewrite eslint/func-style rule to not iterate over all nodes
  • Only run eslint/no-new-func on new and call expressions
Fixed 9
  • Mark missing suggestions as pending
  • Absolutize explicit CLI paths even with --no-ignore
  • Match eslint behavior for custom components in interactive-supports-focus
  • Report in and instanceof in no-confusing-non-null-assertion
  • Make unicorn/no-array-reverse and no-array-sort replacements suggestions
  • Preserve defineConfig field JSDoc
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-style rule (#24087) (Mikhail Baev)
  • 1ad6f6c linter/eslint: Implement id-denylist rule (#24632) (Mikhail Baev)
  • 678bbb5 linter/typescript-eslint: Implement suggestion for class-literal-property-style rule (#24766) (Mikhail Baev)
🐛 Bug Fixes
  • a5f3a0e linter: Mark missing suggestions as pending (#24956) (Mikhail Baev)
  • a065946 oxlint: Absolutize explicit CLI paths even with --no-ignore (#24646) (Bez Sahara)
  • 17688bb linter/jsx-a11y/interactive-supports-focus: Match eslint behavior for custom components (#24780) (Cole Ellison)
  • 0aef19e linter/typescript/no-confusing-non-null-assertion: Report in and instanceof (#24825) (Mikhail Baev)
  • 361dce9 linter: Unicorn/no-array-reverse and no-array-sort replacements should be suggestions (#24848) (klem)
  • 9213560 config: Preserve defineConfig field JSDoc (#24326) (周星星同学)
  • 334d884 linter/node/no-top-level-await: Clarify diagnostic (#24803) (camc314)
  • b9fc6af linter/eslint/func-names: Ignore overloads (#24801) (camc314)
  • e80574f estree: Handle empty spans serializing ImportMeta and NewTarget (#24775) (overlookmotel)
⚡ Performance
  • 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 Vec allocations via bound_names (#24959) (connorshea)
  • 9f9f39d linter/eslint/no-const-assign: Avoid Vec allocation per const declarator (#24953) (connorshea)
  • 10a621e linter/typescript/adjacent-overload-signatures: Avoid collecting vec in some cases (#24874) (connorshea)
  • ed167e1 linter/node/exports-style: Iterate once over global references (#24877) (connorshea)
  • 69908fe linter: Avoid allocations in jest/no-deprecated-functions (#24866) (Connor Shea)
  • a3585d7 linter: Speed up jest/vitest prefer-each (#24872) (Connor Shea)
  • 62fe640 linter/eslint/prefer-rest-params: Run once per file (#24873) (Connor Shea)
  • 7a7aa54 linter/eslint/no-this-before-super: Skip files without classes (#24869) (Connor Shea)
  • 4ad0c94 linter/plugins: Faster copying comments to JS allocator (#24858) (overlookmotel)
  • 4c25b91 linter/plugins: Test booleans with explicit === false (#24830) (overlookmotel)
  • b7add00 linter/plugins: Remove check in loop in getDisableDirectives (#24833) (overlookmotel)
📚 Documentation
  • 3ff2e0e linter: Clarify config extends types (#24936) (Boshen)
Oxfmt 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 new signature (#24883) (leaysgur)
  • 07ff12f formatter_yaml: Fix indent, blank, and spacing issues (#24837) (leaysgur)
  • d076b40 formatter: Check calee chain is_simple (#24871) (leaysgur)
  • fb34196 formatter_css: Keep non-ASCII strings with quotes (#24870) (leaysgur)
  • 9213560 config: Preserve defineConfig field JSDoc (#24326) (周星星同学)
  • 31783e9 formatter_css: Print nested SCSS map with consistent indent (#24789) (leaysgur)
  • 8eb9eca formatter/jsdoc: Respect singleQuote option in @import (#24787) (leaysgur)
  • 6f05ac4 formatter: Fix template literal formatting (#24786) (leaysgur)
⚡ Performance
  • bb73b23 formatter_core: Bound the thread-local scratch cache (#24793) (leaysgur)
  • a5f7b15 formatter: Stage assignment-like left hand side on the heap (#24613) (leaysgur)
  • 94de05f formatter: Accumulate JSX child-list builders on the heap (#24585) (leaysgur)
  • 7810e8a formatter_core: Share one thread-cached scratch vector across staging buffers (#24583) (leaysgur)
  • c191f51 formatter_core: Stage IR buffers on the heap to reduce arena memory (#24582) (leaysgur)
📚 Documentation
  • 69126a0 formatter_css,fomatter_graphql,formatter_yaml: Update AGENTS.md (#24821) (leaysgur)
View originalPermalink
How apps_v1.76.0 went
crates_v0.142.0

oxc crates_v0.142.0

Added 11
  • Fold parenthesized boolean ternary tests in minifier
  • Fold sequence branches in boolean ternaries in minifier
  • Add VisitJsMut visitor to ast_visit
  • Add new IsTerminated trait and use it in exit-point optimization
  • Shorten integer zero comparisons in minifier
  • Convert switch with one case to if statement in minifier
Fixed 8
  • Optimize termination statements in labeled statements in minifier
  • Avoid longer numeric constant folds in minifier
  • Keep side effects in typeof comparisons in minifier
  • Keep side effects when compressing == true to == 1 in minifier
  • Keep side effects values in template literals in minifier
  • Keep side effects when folding Number call in minifier
  • Preserve warning bailouts in react-compiler
  • Preserve orphaned file coverage comments in codegen
Removed 1
  • Tighten bound on AstBuild trait
💥 BREAKING CHANGES
  • 1ac5ac7 ast: [BREAKING] Tighten bound on AstBuild trait (#24925) (overlookmotel)
🚀 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 Ident from oxc_ast crate (#24861) (overlookmotel)
  • 73cfdfa oxc: Re-export oxc_str types from oxc crate (#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 == true to == 1 (#24939) (sapphi-red)
  • c3a48df minifier: Keep side effects values in template literals (#24938) (sapphi-red)
  • e19f183 minifier: Keep side effects when folding Number call (#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! and format_str! macros (#24886) (overlookmotel)
  • 07e9acc ecmascript: Keep side effects in parent of toString calls (#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 using in bare switch case (#24798) (camc314)
  • e80574f estree: Handle empty spans serializing ImportMeta and NewTarget (#24775) (overlookmotel)
  • 4b12840 minifier: Do not fold a -0 ternary branch to +a (loses the sign) (#23637) (Jerry Zhao)
  • 133bb35 ecmascript: Detect side effects of foo().#bar correctly 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
  • 4d2e2bf ast: Fix incorrect return value in common_js_require docs (#24945) (connorshea)
  • b539e74 estree: Document custom serializers for ImportMeta and NewTarget (#24777) (overlookmotel)
View originalPermalink
How crates_v0.142.0 went
apps_v1.75.0

oxlint v1.75.0 & oxfmt v0.60.0

Added 4
  • Implement no-top-level-await rule for linter/node
  • Implement function-component-definition rule for linter/react
  • Add support for prefer-top-level-if-only-type-imports option in linter/import/consistent-type-specifier-style
  • Add ParseOptions::enable_ident_hashes to parser
Changed 6
  • Reuse jest/padding-around-test-blocks for vitest/padding-around-test-blocks
  • Keep tailwind classes glued to template expr with preserveWhitespace in oxfmt
  • Only run linter/unicorn/prefer-event-target on Class and NewExpression nodes
  • Only invoke lint on code actions when document is not opened in oxlint/lsp
  • Box OxcDiagnosticInner to reduce binary size in diagnostics
  • Compute diagnostic Info once per diagnostic in linter/reporter/stylish
Fixed 10
  • Report error for invalid glob patterns in oxlint and oxfmt
  • Preserve valid parameter defaults in linter/unicorn/no-useless-undefined
  • Handle typed declarations in linter/eslint/prefer-destructuring
  • Handle assigned errors in linter/eslint/no-throw-literal
  • Detect React components from returned JSX in linter
  • Allow TS syntax in computed keys in linter/eslint/no-useless-computed-key
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-blocks for vitest/padding-around-test-blocks (#24519) (Mikhail Baev)
  • 99978a8 linter/import/consistent-type-specifier-style: Support prefer-top-level-if-only-type-imports option (#24502) (camc314)
🐛 Bug Fixes
  • 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 Class and NewExpression nodes (#24685) (Mikhail Baev)
  • 7be5cf0 oxlint/lsp: Only invoke lint on code actions when document is not opened (#24676) (Sysix)
  • d3f07a0 diagnostics: Box OxcDiagnosticInner to reduce binary size (#24665) (Boshen)
  • 90ae040 linter/reporter/stylish: Compute diagnostic Info once per diagnostic (#24525) (connorshea)
📚 Documentation
  • e6f7174 linter/valid-expect: Fix correct example being identical to incorrect one (#24468) (mkan0141)
Oxfmt v0.60.0
🚀 Features
  • 3d22307 parser: Add ParseOptions::enable_ident_hashes (#24491) (Boshen)
🐛 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_suffix for EOL line comment (#24580) (leaysgur)
  • 5f76998 formatter_graphql: Keep same line comments pending across intervening tokens (#24579) (leaysgur)
View originalPermalink
How apps_v1.75.0 went
crates_v0.141.0

oxc crates_v0.141.0

Added 17
  • Merge combined assign expression in conditional expression
  • Merge assign expression against member expression in conditional expression
  • Add `Vec::from_raw_parts_in` to allocator
  • Add context notes for strict assignments in semantic
  • Add `implements!` macro to data_structures
  • Add `const_str_eq` function to data_structures
Changed 2
  • Split `MetaProperty` into `ImportMeta` and `NewTarget`
  • Move JSX entity decoder to `oxc_syntax`
Fixed 1
  • Avoid reordering this before super in minifier
Removed 1
  • Move `IdentBuildHasher` to `oxc_str` crate
💥 BREAKING CHANGES
  • 5293431 str: [BREAKING] Move IdentBuildHasher to oxc_str crate (#24717) (overlookmotel)
  • 54cc121 ast: [BREAKING] Split MetaProperty into ImportMeta and NewTarget (#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_eq function (#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 NONE to be passed to AST builder methods where Option<ArenaVec> is expected (#24629) (overlookmotel)
  • 77230c5 ast: Accept arrays for ArenaVec params of AST builder methods (#24621) (overlookmotel)
  • f08b152 allocator: Implement FromIn for array to Vec conversion (#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 Str as ArenaStr (#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 hashbrown feature inline-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.Symbol as 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_in do 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 as span 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 CloneIn for Vec and Box<[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 ReplaceWith panic path cold (#24515) (camc314)
  • ba65790 semantic, allocator: Branchless clone_in for 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
  • cef20b5 napi/parser: Remove erroneous comment (#24730) (overlookmotel)
View originalPermalink
How crates_v0.141.0 went
apps_v1.74.0

oxlint v1.74.0 & oxfmt v0.59.0

Added 5
  • Add `namespaces` option to linter/eslint/no-inner-declarations
  • Auto-discover `.mts` config files
  • Add autofix logic to linter/import/no-duplicates
  • Support `quoteProps` for TS enum and methods
  • Expose `SourceText::as_str()`
Changed 2
  • Update oxc-css-parser to 0.0.7
  • Format Less :extend and merge props
Fixed 12
  • Avoid duplicate commas when merging imports in linter/import/no-duplicates
  • Preserve type modifiers when merging imports
  • Skip fix for `TSPropertySignature` keys in linter/unicorn/prefer-string-raw
  • Skip suppression validation with `--type-check-only`
  • Fix false positive in linter/jest/prefer-lowercase-title when `lowercaseFirstCharacterOnly` is false
  • Allow `vite-plus/test` and `@effect` as Vitest source
Table of Contents
Oxlint v1.74.0
🚀 Features
  • 0433a83 linter/eslint/no-inner-declarations: Add namespaces option (#24044) (Boshen)
  • 92f154a oxlint,oxfmt: Auto-discover .mts config files (#24357) (camc314)
  • 8c1d74b linter/import/no-duplicates: Add autofix logic (#24273) (Cole Ellison)
🐛 Bug Fixes
  • ac7176d linter/import/no-duplicates: Avoid duplicate commas when merging imports (#24467) (camc314)
  • 261aa39 linter/import/no-duplicates: Preserve type modifiers when merging imports (#24466) (camc314)
  • dbd08b6 linter/unicorn/prefer-string-raw: Skip fix for TSPropertySignature keys (#24465) (camc314)
  • df67932 linter: Skip suppression validation with --type-check-only (#24462) (Stephen Zhou)
  • 0b086de linter/jest/prefer-lowercase-title: False positive when lowercaseFirstCharacterOnly is false (#24414) (Connor Shea)
  • 097cb95 linter: Allow vite-plus/test and `@effect as Vitest source (#24196) (Liang)
  • 8337835 linter: Error on ignorePatterns that cannot match files aoutside the config directory (#24341) (leaysgur)
  • 9ba30e5 linter/oxc/bad-replace-all-arg: Add note to enhance diagnostic (#24346) (camc314)
  • 2ce5a33 linter: Resolve ignorePatterns relative to the config dir (#24339) (leaysgur)
  • ab90eed linter/eslint/no-loop-func: Do not error on catch variables (#24316) (Chris Opperwall)
  • b67f0a6 linter/eslint/no-unused-vars: Count default parameter updates as usage (#24323) (camc314)
  • d193f8e linter: Detect Junie agent env vars (#24277) (Jeevan Mohan Pawar)
  • 2aecf60 linter/eslint/no-unreachable: Handle break in switch stmts correctly (#24260) (camc314)
⚡ Performance
  • 2efa2f9 linter/react/jsx-handler-names: Simplify JSX handler name normalization (#24458) (camc314)
  • 9c4e24a linter/eslint/object-shorthand: Remove constructor regex (#24457) (camc314)
  • 7f80cac linter/vue/prop-name-casing: Precompile ignoreProps regex pattern (#24413) (connorshea)
  • 6272051 linter/typescript/no-require-imports: Compile allow patterns once (#24417) (connorshea)
  • fb1edf1 linter: Compute comment fix span only for directive comments (#24419) (connorshea)
  • 33805b9 linter/jsdoc/require-param: Compile checkTypesPattern regex once (#24420) (connorshea)
  • 8de6fca linter/jest/valid-title: Compile disallowedWords regex once (#24412) (Connor Shea)
  • 4a0d8dc linter/eslint/no-underscore-dangle: Avoid String clone per identifier (#24371) (Ian Macalinao)
  • f3ab04c linter/typescript/consistent-type-imports: Remove redundant Vec per violation (#24370) (Ian Macalinao)
  • 4d2d78d linter/typescript/prefer-ts-expect-error: Avoid String clone per comment (#24369) (Ian Macalinao)
Oxfmt v0.59.0
🚀 Features
  • 3a7fe74 formatter_css: Update oxc-css-parser to 0.0.7 (#24434) (leaysgur)
  • 0173cd3 formatter_css: Format Less :extend and merge props (#24358) (leaysgur)
  • 92f154a oxlint,oxfmt: Auto-discover .mts config files (#24357) (camc314)
  • df250df formatter: Support quoteProps for TS enum and methods (#24309) (leaysgur)
  • a9a5cd6 formatter_core: Expose SourceText::as_str() (#24281) (leaysgur)
🐛 Bug Fixes
  • 95262b9 formatter_css: Keep more value comments before comma (#24487) (leaysgur)
  • cd53d98 formatter_css: Keep value comments before comma (#24484) (leaysgur)
  • 27f57d8 formatter: Type alias comment idempotency (#24483) (leaysgur)
  • b7b82e0 formatter: Suppressed trailing semi (#24482) (leaysgur)
  • 162bddf formatter: Add required parens for conditional type in type parameter constraint (#24450) (leaysgur)
  • 2d22a91 formatter: Determine type cast target from span instead of lexical scan (#24447) (leaysgur)
  • 25306e9 formatter: Do not add extra parens with type cast comment (#24444) (leaysgur)
  • bd6edfe formatter: Break arrow signature that exactly fills the line when cond body may hug (#24440) (leaysgur)
  • a99ef41 formatter: Keep quotes on method signature named new (#24432) (leaysgur)
  • fcc28df formatter_css: Keep glued-braket-value tight (#24352) (leaysgur)
  • 8337835 linter: Error on ignorePatterns that cannot match files aoutside the config directory (#24341) (leaysgur)
  • b7c7e15 formatter: Add parens for import and private field in new callee chain (#24320) (leaysgur)
  • 0c8f6e4 formatter: Update detect_code_removal for #24309 (#24314) (leaysgur)
  • a85aad0 formatter: Fix member-chain and non-null parens (#24312) (leaysgur)
  • 1c29c73 formatter: Preserve TSNonNullExpression in chain expression (#24311) (leaysgur)
  • 8933c0e formatter: Keep comment inside of empty switch block (#24308) (leaysgur)
  • ec26af2 formatter: Preserve blank lines between JSX attrs (#24290) (leaysgur)
  • 70bd54d formatter: Keep arrow function body comment (#24287) (leaysgur)
  • 415fe1e oxfmt: Error on ignorePatterns that cannot match files outside the config directory (#24286) (leaysgur)
  • eeabc4a formatter_css: Bail on EOF-recovered parse errors (#24282) (leaysgur)
  • 42ec8de formatter: Keep comments inside surviving parens and suppressed statement terminators (#24253) (leaysgur)
  • 1343779 formatter: Keep comment inline for empty statements (#24249) (leaysgur)
  • b996579 formatter: Print ; before trailing comments part 2 (#24246) (leaysgur)
  • 4f86e8c formatter: Print ; before trailing comments (#24244) (leaysgur)
  • 01252e4 formatter: Add or remove parens for let declaration (#24215) (leaysgur)
⚡ Performance
  • eeb1913 formatter_core: Avoid per-call Vec work-stack in soft-line removal (#23775) (Marius Schulz)
  • a2f255b formatter: Use SmallVec for MemberChain collections (#23776) (Marius Schulz)
📚 Documentation
  • 3b7fb91 formatter_css: Update AGENTS.md and examples (#24488) (leaysgur)
  • b52d0f5 formatter: Add TODO comment about unsound code (#24372) (overlookmotel)
View originalPermalink
How apps_v1.74.0 went
crates_v0.140.0

oxc crates_v0.140.0

Added 8
  • minifier: Extract sequence expression from expressions
  • minifier: Remove unreachable code after terminating statements
  • data_structures: Add likely and unlikely functions
  • react_compiler: Implement enableEmitHookGuards codegen
  • minifier: Apply De Morgan's law to negated comparison chains in jump guards and loop tests
  • minifier: Drop write-only property assignments to unused local bindings by default
  • semantic: Record const enums in EnumData
  • semantic: Add Scoping::set_symbol_span
Fixed 12
  • minifier: Keep reads of never-assigned uninitialized bindings
  • minifier: Preserve guaranteed throws from class heritage evaluation
  • semantic: Track ambient contexts in SemanticBuilder
  • transformer/decorator: Scope accessor class binding
  • semantic: Allow reserved keywords in ambient declaration types
  • track-memory-allocations: Exclude arena chunks from Sys allocs
🚀 Features
  • 5b20828 minifier: Extract sequence expression from expressions (#22003) (Armano)
  • 616bfa2 minifier: Remove unreachable code after terminating statements (#24441) (Dunqing)
  • ddab89a data_structures: Add likely and unlikely functions (#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 unwrap from ReplaceWith (#24365) (overlookmotel)
  • ab22e80 transformer: Fix Rust 1.97 performance regression (#24354) (camc314)
  • b47585c parser: Use ReplaceWith instead of TakeIn (#24018) (overlookmotel)
  • b227a06 minifier: Use ReplaceWith instead of TakeIn (#24017) (overlookmotel)
View originalPermalink
How crates_v0.140.0 went
apps_v1.73.0

oxlint v1.73.0 & oxfmt v0.58.0

Added 9
  • Implement `explicit-timer-delay` rule for unicorn linter
  • Implement `no-confusing-array-with` rule for unicorn linter
  • Implement `no-unreachable-loop` rule for eslint linter
  • Add `lowercase` and `screamingSnakeCase` options to `unicorn/filename-case` rule
  • Add `allowAfterSpread` option to `unicorn/no-array-sort` rule
  • Add per-rule timings for type-aware linting
Changed 4
  • Check relational comparisons in `eslint/no-constant-binary-expression` rule
  • Add missing options to `jsdoc/require-param` rule
  • Update oxc-css-parser to 0.0.5
  • Update oxc-graphql-parser to 0.0.5
Fixed 7
  • Don't flag a type-only import beside a side-effect import in `import/no-duplicates`
  • Flag `useEffectEvent` escapes in `react/rules-of-hooks`
  • Map `require.requireActual` to `jest.requireActual` in `no-deprecated-functions`
  • Handle switch case continuation in `eslint/no-useless-return`
  • Flag dynamic import() expressions in `eslint/no-restricted-imports`
  • Detect circular config extends
  • Omit unneeded semicolon for type members with `no-semi` in formatter
Table of Contents
Oxlint v1.73.0
🚀 Features
  • 7db7a29 allocator: Add ReplaceWith trait (#24012) (overlookmotel)
  • a2c97f3 linter/unicorn: Implement explicit-timer-delay rule (#23612) (Mikhail Baev)
  • 85735cb linter/unicorn: Implement no-confusing-array-with rule (#23638) (Shekhu☺️)
  • cb4fbb9 linter/eslint: Implement no-unreachable-loop rule (#23975) (Todor Andonov)
  • dc32112 linter/eslint/no-constant-binary-expression: Check relational comparisons (#24088) (camc314)
  • 439c344 linter/jsdoc: Added missing options to jsdoc/require-param rule (#23364) (kapobajza)
  • 62af717 linter/unicorn/filename-case: Add lowercase and screamingSnakeCase (#24045) (Boshen)
  • d963967 linter/unicorn/no-array-sort: Add allowAfterSpread option (#24043) (Boshen)
  • 0a75682 linter: Add per-rule timings for type-aware linting (#22488) (camchenry)
  • 743e222 linter/react: Add disallowedValues option for forbid-dom-props rule (#23970) (Mikhail Baev)
🐛 Bug Fixes
  • 7b80010 linter: Use direct binding symbol ids (#24216) (camc314)
  • 8f94b49 linter/import/no-duplicates: Don't flag a type-only import beside a side-effect import (#24030) (Boshen)
  • d8c3fee linter/react/rules-of-hooks: Flag useEffectEvent escapes (#23764) (Rayan Salhab)
  • 0a7312b linter/no-deprecated-functions: Map require.requireActual to jest.requireActual (#23627) (Jerry Zhao)
  • d9e3ab3 linter/eslint/no-useless-return: Handle switch case continuation (#23984) (camc314)
  • 0b25582 ast: Type binding node typeAnnotation as TSTypeAnnotation | null (#23113) (Boshen)
  • 122d112 linter/eslint/no-restricted-imports: Flag dynamic import() expressions (#24029) (Boshen)
  • 59b6b83 linter: Avoid OnceLock re-entry on cyclic export * re-exports (#23632) (Jerry Zhao)
  • dd09af0 linter/import/namespace: Avoid panic on destructuring of an unresolvable namespace re-export (#23626) (Jerry Zhao)
  • bdb51c7 linter/jest/prefer-ending-with-an-expect: Validate config patterns (#24122) (camc314)
  • e383843 linter/unicorn/prefer-modern-dom-apis: Skip fixer for non identifier arguments (#23630) (Jerry Zhao)
  • 0ac4c83 linter: Detect circular config extends (#24115) (camc314)
  • bae1edf linter/import/namespace: Check namespace imports after named imports (#24094) (camc314)
  • cd8fdfe linter/eslint/no-eval: Recognize Array.from family thisArg (#24091) (camc314)
  • 851ee43 linter/eslint/no-eval: Resolve this binding for functions returned from an IIFE (#23643) (Jerry Zhao)
  • 002ab35 linter/unicorn: Avoid prefer-array-find rest destructuring false positive (#23654) (ColemanDunn)
  • 01c8775 linter/unicorn/filename-case: Keep digits attached in screamingSnakeCase (#24056) (Boshen)
  • f256941 linter: Recognize @effect/vitest as a vitest import source (#24025) (Boshen)
  • 73eeb1d linter/import/extensions: Honor per-extension never for explicit extensions (#24031) (Boshen)
  • d4ebe1f linter: Reject non-object oxlint config files (#24026) (Boshen)
  • 45d607d linter/react/forbid-component-props: Make allow/disallow lists optional in schema (#24024) (Boshen)
  • 54076ad linter/unicorn/no-array-for-each: Suggest entries loop for index callbacks (#24004) (camc314)
  • d057736 linter/jsdoc: Avoid param root underflow (#23945) (camc314)
  • 29c76bf linter/unicorn/prefer-at: Skip object numeric-key access (#23909) (Gaurav Dubey)
⚡ Performance
  • 657a8fc linter/oxc/bad-array-method-on-arguments: Only run on member expressions instead of all identifiers (#24164) (camchenry)
  • 073d9e7 linter/eslint/prefer-rest-params: Run on functions instead of all identifiers (#24163) (camchenry)
  • e5a4162 linter/jest/no-confusing-set-timeout: Early exit fast path (#24092) (camc314)
  • bca7ce5 linter: Only run react-perf rules on JSX attribute nodes (#24083) (camchenry)
  • 6881bf6 linter: Compute apply_overrides rule set lazily (#23648) (Jerry Zhao)
  • 911c106 linter/eslint/no-obj-calls: Use resolved reference instead of scope walk (#23895) (Marius Schulz)
  • dc8fd9a linter/unicorn/prefer-dom-node-text-content: Change dispatch to run only on less common node types (#23897) (Connor Shea)
  • fdbd34d linter/eslint/no-useless-call: Fast-path static callees (#24077) (camc314)
  • b1be114 linter/import/extensions: Skip empty config and borrow extensions (#24075) (camc314)
  • 4781b2d linter/eslint/no-obj-calls: Use direct global matches (#24076) (camc314)
  • e6cee89 linter: Avoid node-chain allocation for non-Jest calls (#23907) (Yagiz Nizipli)
  • 30dc517 linter/typescript/no-restricted-types: O(1) banned-type lookups (#23827) (Yagiz Nizipli)
📚 Documentation
  • 6ca9125 linter/typescript: Clarify consistent-type-imports behavior (#23972) (camc314)
Oxfmt v0.58.0
🚀 Features
  • 4f4313e formatter_css: Update oxc-css-parser 0.0.5 (#24120) (leaysgur)
  • 0ccd8a1 formatter_graphql: Update oxc-graphql-parser 0.0.5 (#24106) (leaysgur)
  • 89ec3d9 formatter_core: Add literal line and root indention primitives (#24051) (leaysgur)
  • 213a96b formatter_core: Add no-expand-parent for multiline text (#24050) (leaysgur)
  • 0e5bcc9 formatter_graphql: Update oxc-graphql-parser 0.0.4 (#24039) (leaysgur)
  • e0b35a1 formatter_css: Update oxc-css-parser@0.0.3 (#23974) (leaysgur)
🐛 Bug Fixes
  • 1fe6546 formatter: Omit unneeded ; for type members with no-semi (#24212) (leaysgur)
  • 0ad7316 formatter: Print space for ForStatement.update only if exists (#24211) (leaysgur)
  • 3abbed5 formatter: Print ; before jsdoc type-cast parens with no-semi (#24208) (leaysgur)
  • 9af3833 formatter_css: Make scss formatter consistent (#24207) (leaysgur)
  • 46d7194 formatter_css: Use fill IR for @forward members (#24206) (leaysgur)
  • e31038f formatter_css: Keep comment inside sass config list (#24205) (leaysgur)
  • d3b9591 formatter: Add parens around await/yield with <T> (#24202) (leaysgur)
  • 2121a55 oxfmt: Reuse tinypool process during the same LSP process (#24197) (leaysgur)
  • 9bf4b4a formatter_css: Align CSS output to Prettier 3.9.1 (#24100) (leaysgur)
  • cd2452e formatter_css: Align SCSS output to Prettier 3.9.1 (#24097) (leaysgur)
  • 4ee8745 formatter_css: Keep selector value contain line-break without breaking line (#24055) (leaysgur)
  • e1ece97 formatter_graphql: Break implements list by print-width (#23997) (leaysgur)
  • 0a6b16c formatter_json: Preserve key and literal value for json-stringify (#23996) (leaysgur)
  • 903ab6e formatter_css: Preserve newlines in css-in-js selector list (#23992) (leaysgur)
  • ea5d095 oxfmt: Update --migrate prettier (#23963) (leaysgur)
⚡ Performance
  • 468e1e3 formatter_core: Make printer queues cursor-based (#24098) (Boshen)
  • c59f2fe rust: Return impl ExactSizeIterator from slice-backed accessors (#24144) (Boshen)
  • c292fb2 formatter: Inline fits element dispatcher (#23982) (camc314)
View originalPermalink
How apps_v1.73.0 went
crates_v0.139.0

oxc crates_v0.139.0

Added 8
  • Include unresolved references in semantic examples
  • Fold boolean-literal ternary branches in value contexts in minifier
  • Implement `ReplaceWith` on all AST types
  • Add `ReplaceWith` trait to allocator
  • Add `reserved` option for names that must not be mangled in mangler
  • Add `StringExt` trait to data_structures
  • Drop side-effect-free IIFEs whose result is unused in minifier
  • Add method to widen inherited enum ref to parent ref in AST
Fixed 12
  • Preserve decorated class read bindings in transformer
  • Declare temp for renamed anonymous class in transformer
  • Scope anonymous decorated class bindings correctly in transformer
  • Preserve namespace strict mode flags in transformer
  • Correct scoping flags for lowered enums in transformer
  • Clean up semantics for stripped TypeScript syntax in transformer
🚀 Features
  • 260425f semantic/examples: Include unresolved references (#24214) (camc314)
  • 2d9b0b3 minifier: Fold boolean-literal ternary branches in value contexts (#24110) (Dunqing)
  • 61fbf10 ast: Implement ReplaceWith on all AST types (#24013) (overlookmotel)
  • 7db7a29 allocator: Add ReplaceWith trait (#24012) (overlookmotel)
  • 4eb074e mangler: Add reserved option for names that must not be mangled (#24041) (Dunqing)
  • 2e62012 data_structures: Add StringExt trait (#24006) (overlookmotel)
  • 60e7160 minifier: Drop side-effect-free IIFEs whose result is unused (#23967) (Dunqing)
  • 26dd9e2 ast: Add method to widen inherited enum ref to parent ref (#23961) (overlookmotel)
🐛 Bug Fixes
  • df62046 transformer: Preserve decorated class read bindings (#24231) (camc314)
  • ce5f40f transformer: Declare temp for renamed anonymous class (#24230) (camc314)
  • 09bd638 transformer: Scope anonymous decorated class bindings correctly (#24229) (camc314)
  • 4b7fa9c transformer: Preserve namespace strict mode flags (#24227) (camc314)
  • d8ead84 transformer: Correct scoping flags for lowered enums (#24225) (camc314)
  • e8b50ee transformer: Clean up semantics for stripped TypeScript syntax (#24180) (camc314)
  • d966d0b react_compiler: Remove clippy allows (#24168) (Boshen)
  • 854ef8d react_compiler: Compile generic functions instead of over-bailing on type-param hoisting (#24158) (Boshen)
  • 093586c react_compiler: Align memoization cache-slot allocation with Babel (#24157) (Boshen)
  • 09c8f59 react_compiler: Normalize snapshot fixture paths (#24142) (camc314)
  • f13df97 react_compiler: Drop stray empty statement from catch bindings (#24133) (Boshen)
  • cb2a505 react_compiler: Codegen destructuring reassignment targets (#24131) (Boshen)
  • b82c394 react_compiler: Propagate codegen invariants instead of emitting empty bodies (#24128) (Boshen)
  • 5771982 react_compiler: Render unchanged programs as source in fixture snapshots (#24129) (Boshen)
  • 4b16e1a transformer/async-to-generator: Preserve direct eval scope flags (#24136) (camc314)
  • 4e9194f react_compiler: Lower delete obj.prop to Property/ComputedDelete (#24123) (Boshen)
  • 0b25582 ast: Type binding node typeAnnotation as TSTypeAnnotation | null (#23113) (Boshen)
  • 018c0e5 transformer: Hoist lowered async declarations (#22770) (camc314)
  • 652fbaf mangler: Keep names of destructured exported bindings (#24036) (Dunqing)
  • e274415 minifier: Don't drop global calls that throw despite pure arguments (#23917) (Dunqing)
  • 59abb30 minifier: Only merge string literals in try_fold_add when the inner operator is + (#23622) (Jerry Zhao)
⚡ Performance
  • c5ca77b transformer: Avoid cloning refresh options (#24191) (camc314)
  • bf1a151 react_compiler: Compile out debug printers (#24184) (Boshen)
  • abb44a0 transformer: Build fixed object-rest arguments (#24190) (camc314)
  • a4db731 isolated_declarations: Use ReplaceWith instead of TakeIn (#24016) (overlookmotel)
  • ff10855 transformer: Use ReplaceWith instead of TakeIn (#24015) (overlookmotel)
  • bd49aff ecmascript: Avoid heap-allocating Math.min/max/imul operands (#23941) (Lawrence Lin)
  • e4b708b react_compiler: Skip compiled files before prefilters (#24171) (Boshen)
  • c59f2fe rust: Return impl ExactSizeIterator from slice-backed accessors (#24144) (Boshen)
  • 5d6d04a codegen: SWAR-skip boring byte runs in sourcemap line/column scan (#24023) (Boshen)
  • a55e0be traverse: Reduce string operations in get_var_name_from_node (#24007) (overlookmotel)
  • e6d48e1 transformer/nullish_coalescing: Move cold path into separate function (#23989) (overlookmotel)
  • c4e35b5 transformer/object_rest_spread: Pre-allocate capacity in Vec (#23988) (overlookmotel)
  • 527b8e5 transformer/decorators: Narrow type earlier (#23987) (overlookmotel)
📚 Documentation
  • 1589f54 semantic: Update docs for Scoping::set_symbol_name (#24223) (camc314)
  • 30d17f5 allocator: Clarify docs for TakeIn::take_in_box (#24093) (overlookmotel)
  • 675e6a8 ast: Correct doc comment for PrivateFieldExpression (#24008) (overlookmotel)
  • e4c30e6 minifier: Explain what dce mode means (#23994) (Dunqing)
  • 37cbf88 ast_macros: Document fields of StructDetails (#23959) (overlookmotel)
  • 4de3e54 ast: Correct doc comment (#23948) (overlookmotel)
View originalPermalink
How crates_v0.139.0 went
View all

Discussion