Skip to content

feat(ast): accept arrays for ArenaVec params of AST builder methods#24621

Merged
graphite-app[bot] merged 1 commit into
mainfrom
om/07-17-feat_ast_accept_arrays_for_arenavec_params_of_ast_builder_methods
Jul 17, 2026
Merged

feat(ast): accept arrays for ArenaVec params of AST builder methods#24621
graphite-app[bot] merged 1 commit into
mainfrom
om/07-17-feat_ast_accept_arrays_for_arenavec_params_of_ast_builder_methods

Conversation

@overlookmotel

@overlookmotel overlookmotel commented Jul 17, 2026

Copy link
Copy Markdown
Member

Builds on #24620.

Make generated and hand-written AST builder methods take impl IntoIn<'a, ArenaVec<'a, T>> instead of ArenaVec<'a, T> for their Vec params, so callers can pass an array literal (e.g. [] or [a, b]) in place of building an ArenaVec explicitly.

This enables shortening code in a lot of places - #24622 and following PRs.

@github-actions github-actions Bot added A-ast Area - AST A-ast-tools Area - AST tools labels Jul 17, 2026

overlookmotel commented Jul 17, 2026

Copy link
Copy Markdown
Member Author

@codspeed-hq

codspeed-hq Bot commented Jul 17, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 67 untouched benchmarks
⏩ 9 skipped benchmarks1


Comparing om/07-17-feat_ast_accept_arrays_for_arenavec_params_of_ast_builder_methods (77230c5) with main (2338c13)2

Open in CodSpeed

Footnotes

  1. 9 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

  2. No successful run was found on main (77230c5) during the generation of this report, so 2338c13 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@overlookmotel
overlookmotel force-pushed the om/07-17-feat_allocator_implement_fromin_for_array_to_vec_conversion branch from 5b4a35f to 64d66c4 Compare July 17, 2026 13:08
@overlookmotel
overlookmotel force-pushed the om/07-17-feat_ast_accept_arrays_for_arenavec_params_of_ast_builder_methods branch from 2d01371 to 25a9811 Compare July 17, 2026 13:08
@overlookmotel
overlookmotel marked this pull request as ready for review July 17, 2026 13:14
Copilot AI review requested due to automatic review settings July 17, 2026 13:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Oxc AST builder API to accept fixed-size arrays ([T; N]) anywhere a builder method previously required an ArenaVec<'a, T>, by switching those parameters to IntoIn<'a, ArenaVec<'a, T>> and converting via into_in(allocator) inside the builders. This aligns with the refactor direction mentioned in #24622 (passing [] / arrays for empty vec args) and reduces call-site boilerplate when constructing AST nodes.

Changes:

  • Update the AST builder-methods generator to treat Vec-typed fields like Box-typed fields (i.e., use IntoIn-based generic parameters).
  • Regenerate crates/oxc_ast/src/generated/builder_methods.rs so builder methods accept array inputs for ArenaVec parameters and perform arena conversion internally.
  • Update the custom ExportNamedDeclaration::boxed_plain helper to accept IntoIn<'a, ArenaVec<...>> for specifiers.

Reviewed changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated no comments.

File Description
tasks/ast_tools/src/generators/builder_methods.rs Adjusts codegen logic so Vec fields generate IntoIn generics (enabling array inputs for ArenaVec params).
crates/oxc_ast/src/generated/builder_methods.rs Regenerated builder APIs to take IntoIn<'a, ArenaVec<...>> for vec-like params and convert via into_in(builder.allocator()).
crates/oxc_ast/src/builder/custom.rs Extends a custom convenience builder (boxed_plain) to accept array-compatible inputs for specifiers.

@graphite-app

graphite-app Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Merge activity

…#24621)

Builds on #24620.

Make generated and hand-written AST builder methods take `impl IntoIn<'a, ArenaVec<'a, T>>` instead of `ArenaVec<'a, T>` for their `Vec` params, so callers can pass an array literal (e.g. `[]` or `[a, b]`) in place of building an `ArenaVec` explicitly.

This enables shortening code in a lot of places - #24622 and following PRs.
graphite-app Bot pushed a commit that referenced this pull request Jul 17, 2026
…4620)

Implement `FromIn` to convert from `[T; N]` array to an `ArenaVec<'a, T>`.

This is used in next PR #24621 to make AST builder methods take arrays.
@graphite-app
graphite-app Bot force-pushed the om/07-17-feat_allocator_implement_fromin_for_array_to_vec_conversion branch from 64d66c4 to f08b152 Compare July 17, 2026 13:50
@graphite-app
graphite-app Bot force-pushed the om/07-17-feat_ast_accept_arrays_for_arenavec_params_of_ast_builder_methods branch from 25a9811 to 77230c5 Compare July 17, 2026 13:50
graphite-app Bot pushed a commit that referenced this pull request Jul 17, 2026
…hods (#24622)

Pure refactor. Just shorten code.

#24621 made AST builder methods take arrays as params.

Replace `ArenaVec::new_in(...)` arguments written inline at AST builder method call sites with the empty array literal `[]`.

```rs
let block = Statement::new_block_statement(SPAN, ArenaVec::new_in(ctx), ctx);
```

\->

```rs
let block = Statement::new_block_statement(SPAN, [], ctx);
```
graphite-app Bot pushed a commit that referenced this pull request Jul 17, 2026
…24623)

Pure refactor. Just shorten code.

#24621 made AST builder methods take arrays as params.

Replace `ArenaVec::from_value_in(v, alloc)` with `[v]` where the `ArenaVec` is passed to an AST builder method.

```rs
let block = Statement::new_block_statement(
    SPAN,
    ArenaVec::from_value_in(return_stmt, ctx),
    ctx,
);
```

\->

```rs
let block = Statement::new_block_statement(SPAN, [return_stmt], ctx);
```
graphite-app Bot pushed a commit that referenced this pull request Jul 17, 2026
…ss array literals for `from_array_in` builder args (#24624)

Pure refactor. Just shorten code.

#24621 made AST builder methods take arrays as params.

Replace `ArenaVec::from_array_in(...)` arguments written inline at AST builder method call sites with the array literals.

```rs
let block = Statement::new_block_statement(SPAN, ArenaVec::from_array_in([x, y], ctx), ctx);
```

\->

```rs
let block = Statement::new_block_statement(SPAN, [x, y], ctx);
```
Base automatically changed from om/07-17-feat_allocator_implement_fromin_for_array_to_vec_conversion to main July 17, 2026 13:57
@graphite-app
graphite-app Bot merged commit 77230c5 into main Jul 17, 2026
40 checks passed
@graphite-app
graphite-app Bot deleted the om/07-17-feat_ast_accept_arrays_for_arenavec_params_of_ast_builder_methods branch July 17, 2026 13:57
camc314 added a commit that referenced this pull request Jul 21, 2026
### 💥 BREAKING CHANGES

- 54cc121 ast: [**BREAKING**] Split `MetaProperty` into `ImportMeta` and
`NewTarget` (#24557) (camc314)

### 🚀 Features

- 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

- 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

- 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)

Co-authored-by: Cameron <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-ast Area - AST A-ast-tools Area - AST tools

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants