crates_v0.138.0

oxc-project/oxccrates_v0.138.0Jun 29, 2026by github-actions[bot]

AI Summary

Major refactoring to a new `AstBuilder` interface and allocator system. Significant performance improvements achieved through direct arena allocation of AST nodes.

Key Highlights

  • Breaking: Switch to new unified `AstBuilder`.
  • Breaking: `Str` and `Ident` methods now take `&GetAllocator`.
  • Performance: Massive reduction in allocations via direct arena allocation.
  • Features: Custom builder methods and `Vec::from_value_in`.

Breaking Changes

  • Only export `AstBuilder` and `NONE` in `builder` module
  • Switch to new `AstBuilder`
  • Switch to new `AstBuilder` in transformer
  • Str and Ident methods take &GetAllocator
  • GetAllocator::allocator take &self
  • Rename AllocatorAccessor trait to GetAllocator

New Features

  • Transformer: Support typeof define keys
  • AST: Unify old and new AstBuilders
  • Codegen: Expose print_string API
  • AST: Add custom builder methods
  • Allocator: Add Vec::from_value_in method

Full Release Notes

### 💥 BREAKING CHANGES

- 94fbacb ast: [**BREAKING**] Only export `AstBuilder` and `NONE` in `builder` module (#23876) (overlookmotel)
- 8de5122 ecmascript: [**BREAKING**] Switch to new `AstBuilder` (#23834) (overlookmotel)
- dc0ef38 transformer: [**BREAKING**] Switch to new `AstBuilder` (#23831) (overlookmotel)
- 88f4455 str: [**BREAKING**] `Str` and `Ident` methods take `&GetAllocator` (#23781) (overlookmotel)
- 36009dd allocator: [**BREAKING**] `GetAllocator::allocator` take `&self` (#23676) (overlookmotel)
- bd74f9d allocator: [**BREAKING**] Rename `AllocatorAccessor` trait to `GetAllocator` (#23675) (overlookmotel)

### 🚀 Features

- 326fe25 transformer_plugins: Support `typeof` `define` keys (#23605) (Alexander Lichter)
- f2091b3 ast: Unify old and new `AstBuilder`s (#23875) (overlookmotel)
- cd1fd12 codegen: Expose `Codegen::print_string` API (#23785) (camc314)
- 785461b ast: Add custom builder methods to AST types (#23651) (overlookmotel)
- 05d1357 ast: Add AST creation methods to AST types (#23650) (overlookmotel)
- 2580eda str: Add `Str::from_str_in` and `Ident::from_str_in` methods (#23767) (overlookmotel)
- 6883fcf minifier: Fold write-once falsy var to false in boolean context (#23540) (Dunqing)
- fcbf993 allocator: Add `Vec::from_value_in` method (#23718) (overlookmotel)
- 989ddb7 allocator: Add `Vec::from_box_in` method (#23717) (overlookmotel)
- 9d1aa7f allocator: Improve `PartialEq` for `Vec` (#23716) (overlookmotel)

### 🐛 Bug Fixes

- beac5d2 parser: Fix clippy warnings (#23943) (overlookmotel)
- dcc9a73 minifier: Treat Object.isExtensible/isFrozen/isSealed as pure (#23916) (Dunqing)
- da0e5bf minifier: Don't reorder a closed-over TDZ read when inlining a var (#23771) (Dunqing)
- 0b3021f allocator: Remove `Vec::from_box_in` (#23873) (overlookmotel)
- 0ab64ec ast: Silence deprecation warnings within files defining deprecated `AstBuilder` methods (#23889) (overlookmotel)
- 8c07cad all: Enable `disable_old_builder` Cargo feature for `oxc_ast` crate in tests (#23888) (overlookmotel)
- 3800f01 ast: Legacy `AstBuilder` methods take `self` not `&self` (#23891) (overlookmotel)
- 869ac20 semantic/cfg: Connect for update exit to loop test (#23791) (camc314)
- d3e92d5 semantic/cfg: Connect while branches from condition exit (#23790) (camc314)
- 025045d ast: `ExportNamedDeclaration` plain builder methods return boxed nodes (#23783) (overlookmotel)
- 7537c58 ast: Fix name of `AstBuilder` method for `Expression::V8IntrinsicExpression` (#23766) (overlookmotel)
- 3f574f5 traverse: Fix unsoundness in `Traverse` walk functions (#23745) (overlookmotel)
- 585760f parser: String in AST reference arena (#23721) (overlookmotel)
- 7231d55 allocator: Fix unsound lifetime extension in `Box::new_in` (#23685) (overlookmotel)

### ⚡ Performance

- d5c916a semantic: Flatten hoisting_variables to avoid per-scope map allocation (#23927) (Lawrence Lin)
- e71609d minifier: Bail member-expr folding before the side-effect walk (#23924) (Lawrence Lin)
- e1f89ab minifier: Reduce string allocations folding addition (#23846) (overlookmotel)
- 9f6ee3b isolated-declarations: Pool scope maps to avoid per-scope alloc/rehash (#23761) (Boshen)
- 0b07c4c semantic: Avoid heap alloc for catch-clause binding ids (#23911) (Lawrence Lin)
- c5eef8b regular_expression: Skip capturing-group pre-parse when pattern has no `(` (#23908) (Lawrence Lin)
- b4f5b4b isolated_declarations: Remove redundant clone of formal parameter pattern (#23912) (Lawrence Lin)
- 53d083f isolated_declarations: Use `TakeIn` not `CloneIn` (#23847) (overlookmotel)
- 3ea9304 react_compiler: Use faster API to arena allocate strings (#23849) (overlookmotel)
- a6d8e45 parser: Avoid span lookup for arrow expression body (#23788) (camc314)
- e1886a0 transformer, minifier: Use `static_ident!` macro to create static `Ident`s (#23727) (overlookmotel)
- 5527bef transformer/object-rest-spread: Reduce iteration (#23720) (overlookmotel)
- 680ffbc transformer: Allocate AST nodes in arena directly (#23711) (overlookmotel)
- 1c63c66 parser: Allocate AST nodes in arena directly (#23712) (overlookmotel)
- 3855f0c minifier: Allocate AST nodes in arena directly (#23710) (overlookmotel)
- d025887 isolated_declarations: Allocate AST nodes in arena directly (#23709) (overlookmotel)
- 10b96c6 parser: Remove string search from parsing JSX element name (#23713) (overlookmotel)

### 📚 Documentation

- 3d61dea all: Correct capitalization in comments (#23887) (overlookmotel)
- aa1ad74 ast: Add `#[deprecated]` to legacy `AstBuilder` methods (#23877) (overlookmotel)
- a4676db ast: Correct doc comment for `NONE` (#23765) (overlookmotel)
- 419ec80 syntax: Fix typo in doc comment (#23674) (overlookmotel)

### 🛡️ Security

- 3cdd18f deps: Update npm packages (#23690) (renovate[bot])