Skip to content

Conversation

@Boshen
Copy link
Member

@Boshen Boshen commented Oct 15, 2025

We need to recreate scoping after each transformation step because none of the steps syncs scoping at present, which is a huge waste that we should fix later in the future.

But in the interim, define and inject plugins now return a changed flag for whether AST has been changed, which is used to skip recreating scoping.
Previously it was recreating semantic even if define plugin didn't change anything.
And define plugin is always provided by the value process.env.NODE_ENV: development.

This gives us a 5 - 10% performance improvement.

I took the opportunity to refactor the code to make it more consistent.

Fixes vitejs/rolldown-vite#446

@graphite-app
Copy link
Contributor

graphite-app bot commented Oct 15, 2025

How to use the Graphite Merge Queue

Add the label graphite: merge to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

@netlify
Copy link

netlify bot commented Oct 15, 2025

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit d7c3376
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/68efa766354b820008a9080c

@Boshen Boshen force-pushed the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch from be59138 to f62c3c7 Compare October 15, 2025 04:48
@codspeed-hq
Copy link

codspeed-hq bot commented Oct 15, 2025

CodSpeed Performance Report

Merging #6537 will improve performances by 14.64%

Comparing 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast (d7c3376) with main (cea9d69)

Summary

⚡ 3 improvements
✅ 5 untouched

Benchmarks breakdown

Benchmark BASE HEAD Change
bundle@threejs 227.4 ms 204.5 ms +11.21%
bundle@threejs-sourcemap 261.8 ms 240.1 ms +9.03%
scan@threejs 182 ms 158.7 ms +14.64%

@Boshen
Copy link
Member Author

Boshen commented Oct 15, 2025

Merging #6537 will degrade performances by 10.16%

This is not good, let me double check ...

@github-actions
Copy link
Contributor

github-actions bot commented Oct 15, 2025

Benchmarks Rust

  • target: main(cea9d69)
  • pr: 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast(d7c3376)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.04     75.3±3.87ms        ? ?/sec    1.00     72.4±2.56ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.02     80.0±3.13ms        ? ?/sec    1.00     78.7±2.91ms        ? ?/sec
bundle/bundle@rome_ts                                        1.02    115.5±4.22ms        ? ?/sec    1.00    113.5±3.65ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.01    127.0±2.43ms        ? ?/sec    1.00    125.8±3.50ms        ? ?/sec
bundle/bundle@threejs                                        1.00     43.5±2.13ms        ? ?/sec    1.07     46.4±2.71ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     46.9±0.91ms        ? ?/sec    1.08     50.6±2.53ms        ? ?/sec
bundle/bundle@threejs10x                                     1.00    422.8±7.82ms        ? ?/sec    1.06    448.3±7.21ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00   486.4±11.35ms        ? ?/sec    1.06   513.3±10.04ms        ? ?/sec
scan/scan@rome_ts                                            1.00     87.0±2.05ms        ? ?/sec    1.01     88.3±2.89ms        ? ?/sec
scan/scan@threejs                                            1.00     30.3±1.91ms        ? ?/sec    1.11     33.8±2.31ms        ? ?/sec
scan/scan@threejs10x                                         1.00    307.3±5.29ms        ? ?/sec    1.10    337.1±8.01ms        ? ?/sec

@Boshen Boshen marked this pull request as draft October 15, 2025 05:10
@hyf0
Copy link
Member

hyf0 commented Oct 15, 2025

CI failed due to flaky rollup resolve tests. Rerun would solve it.

@Boshen Boshen force-pushed the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch 2 times, most recently from fc1a14e to de91714 Compare October 15, 2025 08:11
@Boshen Boshen marked this pull request as ready for review October 15, 2025 08:11
Copy link
Member Author

Boshen commented Oct 15, 2025


How to use the Graphite Merge Queue

Add the label graphite: merge to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@Boshen Boshen changed the base branch from main to graphite-base/6537 October 15, 2025 08:12
@Boshen Boshen force-pushed the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch from de91714 to 134a41e Compare October 15, 2025 08:12
@Boshen Boshen changed the base branch from graphite-base/6537 to 10-15-feat_rolldown_oxc_v0.95.0 October 15, 2025 08:12
@graphite-app graphite-app bot changed the base branch from 10-15-feat_rolldown_oxc_v0.95.0 to graphite-base/6537 October 15, 2025 08:55
Copy link
Member

hyf0 commented Oct 15, 2025

Merge activity

  • Oct 15, 9:05 AM UTC: The merge label 'graphite: merge' was detected. This PR will be added to the Graphite merge queue once it meets the requirements.
  • Oct 15, 9:05 AM UTC: hyf0 added this pull request to the Graphite merge queue.
  • Oct 15, 9:05 AM UTC: hyf0 removed this pull request from the Graphite merge queue.
  • Oct 15, 1:53 PM UTC: The merge label 'graphite: merge' was detected. This PR will be added to the Graphite merge queue once it meets the requirements.
  • Oct 15, 1:53 PM UTC: Boshen added this pull request to the Graphite merge queue.
  • Oct 15, 2:07 PM UTC: Merged by the Graphite merge queue.

@hyf0
Copy link
Member

hyf0 commented Oct 15, 2025

Is this one ok to merge?

@graphite-app graphite-app bot force-pushed the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch from 134a41e to 63e2b32 Compare October 15, 2025 09:10
@graphite-app graphite-app bot force-pushed the graphite-base/6537 branch from 77fe84d to 8b9b459 Compare October 15, 2025 09:10
@graphite-app graphite-app bot changed the base branch from graphite-base/6537 to main October 15, 2025 09:11
@graphite-app graphite-app bot force-pushed the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch from 63e2b32 to b7b38a9 Compare October 15, 2025 09:11
@Boshen Boshen marked this pull request as draft October 15, 2025 10:09
@Boshen
Copy link
Member Author

Boshen commented Oct 15, 2025

Not yet, still figuring out the performance regession.

@Boshen Boshen force-pushed the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch from b7b38a9 to fb00dae Compare October 15, 2025 10:31
@Boshen Boshen marked this pull request as ready for review October 15, 2025 13:52
We need to recreate scoping after each transformation step because none of the steps syncs scoping.

I took the opportunity to refactor the code to make it more consistent.

Fixes vitejs/rolldown-vite#446
@graphite-app graphite-app bot force-pushed the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch from fb00dae to d7c3376 Compare October 15, 2025 13:53
@graphite-app graphite-app bot merged commit d7c3376 into main Oct 15, 2025
33 checks passed
@graphite-app graphite-app bot deleted the 10-15-fix_rolldown_sync_scoping_properly_in_pre_process_ecma_ast branch October 15, 2025 14:07
shulaoda added a commit that referenced this pull request Oct 20, 2025
## [1.0.0-beta.44] - 2025-10-20

:boom: Breaking Changes
- Top-level `jsx` removed, use `transform.jsx` instead
- `output.minifyInternalExports` now enabled by default

:dart: Enhanced Tree-Shaking
- JSON default imports are now tree-shakeable
```js
// config.json
{
"apiUrl": "[https://api.example.com](https://api.example.com/)",
"timeout": 5000,
"retries": 3,
"debug": false
}

// main.js
// Before: Entire JSON was included in bundle
import config from './config.json';
console.log(config.apiUrl);

// After: Only the used property is included
// Bundle now contains just the apiUrl value
```
- Built-in typed array constructors (`new Uint8Array()`, `new Int32Array()`, etc.) marked as pure

:gear: Configuration Improvements
- Support `output.cleanDir` option
- Deprecated some top-level  options
  - `define` → `transform.define`
  - `inject` → `transform.inject`
  - `dropLabels` → `transform.dropLabels`
  - `keepNames` → `output.keepNames`
  - `profilerNames` → `output.generatedCode.profilerNames`

### 💥 BREAKING CHANGES

- enable `output.minifyInternalExports` for `format: 'es'` or `minify: true` (#6594) by @sapphi-red
- node/options: remove `InputOptions.jsx`, prefer `transform.jsx` always (#6548) by @hyf0

### 🚀 Features

- support jsx preset for `transform.jsx` (#6630) by @shulaoda
- rolldown_plugin_vite_html: align `inject_to_body` function (#6622) by @shulaoda
- rolldown_vite_css_post_plugin: tweak `is_legacy` field (#6620) by @shulaoda
- native-plugin: expose `viteHtmlPlugin` (#6609) by @shulaoda
- native-plugin: expose `viteCSSPostPlugin` (#6606) by @shulaoda
- builtin-plugin: expose `viteCSSPlugin` (#6605) by @shulaoda
- rolldown_plugin_vite_html: complete plugin binding (#6604) by @shulaoda
- rolldown_plugin_vite_css: support plugin binding (#6598) by @shulaoda
- add TypedArray constructors to side-effect free globals (#6592) by @IWANABETHATGUY
- rolldown_plugin_vite_html: align process src attr logic (#6572) by @shulaoda
- rolldown: support `output.clearDir` to clean up `dir` before build (#6486) by @aprosail
- dev: return `RolldownOutput` instead of `BindingOutputs` from `onOutput` (#6563) by @sapphi-red
- rolldown_plugin_vite_html: align process srcset logic (#6560) by @shulaoda
- rolldown_plugin_vite_html: align process src function (#6559) by @shulaoda
- rolldown_plugin_vite_html: align parse secset function (#6558) by @shulaoda
- node/options: deprecate `dropLabels` and add `transform.dropLabels` (#6557) by @hyf0
- node/options: deprecate `keepNames` and add `output.keepNames` (#6556) by @hyf0
- node/options: deprecate `profilerNames` and add `output.generatedCode.profilerNames` (#6555) by @hyf0
- node/options: deprecate top level `inject` and `define` and add `transform.define`, `transform.inject` (#6544) by @hyf0
- rolldown_plugin_vite_html: initialize attributes handle logic (#6543) by @shulaoda
- rolldown: oxc v0.95.0 (#6541) by @Boshen
- rolldown_plugin_vite_html: align inject css logic (#6528) by @shulaoda
- rolldown_plugin_vite_html: align modulepreload inject logic (#6526) by @shulaoda
- rolldown_plugin_vite_html: align css bundle output inject logic (#6524) by @shulaoda
- rolldown_plugin_vite_html: support inject_to_head function (#6522) by @shulaoda
- rolldown_plugin_vite_html: align emit and delete logic (#6521) by @shulaoda
- rolldown_vite_html: align handle html asset url logic (#6518) by @shulaoda
- add an example how to transform code and generate sourcemap with `experimental.nativeMagicString` (#6514) by @IWANABETHATGUY
- rolldown_plugin_vite_html: align handle inline css logic (#6517) by @shulaoda

### 🐛 Bug Fixes

- native-plugin: use correct config for assetPlugin (#6638) by @shulaoda
- no_color not being respected on reporter (#6615) by @H4ad
- improve tree shaking for JSON default imports (#6626) by @IWANABETHATGUY
- cjs treeshaking removes used code (#6597) by @IWANABETHATGUY
- plugin/vite-resolve: return `package_json_path` from resolveId hook (#6434) by @sapphi-red
- dev: `should have idx` error happens with `deferSyncScanData` + incremental rebuild (#6568) by @sapphi-red
- rolldown: sync scoping properly in pre_process_ecma_ast (#6537) by @Boshen
- process CJS tree shaking bailout modules before eliminating unused dynamic entries (#6549) by @IWANABETHATGUY
- rust/dev: error of `bundler.scan`doesn't get handled (#6547) by @Copilot
- inline only self referenced json module properties (#6519) by @IWANABETHATGUY
- avoid processing native MagicString sourcemap when `sourcemap` is disabled (#6510) by @IWANABETHATGUY

### 🚜 Refactor

- rolldown_binding: unify `BindingAssetInlineLimit` (#6625) by @shulaoda
- rolldown_binding: tweak `BindingAssetPluginConfig` (#6624) by @shulaoda
- tweak `viteCSSPlugin` config (#6610) by @shulaoda
- rust/dev: remove unnecessary bundler cache management of dev engine (#6576) by @hyf0
- rust/dev: refactor `TaskInput` into enum to reduce invalid states (#6575) by @hyf0
- improve the error message of `ScanStageCache#merge` (#6564) by @IWANABETHATGUY
- rust/dev: use `client_id` to check if module is executed for test environment (#6566) by @hyf0
- rust/binding: mark napi object that won't be received from js side (#6531) by @hyf0
- rust/binding: mark napi object struct that won't be passed to js explicitly (#6525) by @hyf0
- rust/binding: use `&str` or `JsString` to avoid unnecessary clone (#6523) by @hyf0
- rust/binding: use `&str` to avoid unnecessary clone (#6520) by @hyf0
- rust: replace unwrap with expect for better error handling in message sending (#6509) by @hyf0

### 📚 Documentation

- add redirect from `/guide/in-depth/` to `/in-depth/` (#6554) by @Copilot
- guide: polish notable features page (#6535) by @sapphi-red
- builtin-plugins: add replace plugin docs (#6534) by @sapphi-red
- add `Additional Thanks` in `acknowledgements` page (#6507) by @hyf0
- polish doc for `experimental.nativeMagicString` (#6504) by @IWANABETHATGUY

### ⚡ Performance

- cli: advance `createTokioRuntime` (#6618) by @hyf0
- rolldown: reduce unnecessary Vec allocate (#6601) by @Brooooooklyn
- rolldown: make derived assets generation more parallel (#6600) by @Brooooooklyn
- rolldown: make chunks generation more parallel (#6599) by @Brooooooklyn
- rolldown_utils: only allocate HASH_PLACEHOLDER_LEFT once (#6595) by @Brooooooklyn
- rolldown: use oxc-resolver with simd-json (#6591) by @Boshen
- rolldown: avoid allocate the sourcemap sources on non Windows os (#6590) by @Brooooooklyn
- resolver: use optimized fs.read_to_string impl (#6589) by @Brooooooklyn
- deps: upgrade json-escape-simd and add simdutf8 dependency (#6579) by @Brooooooklyn
- rust/dev: remove unncessary clone for `ClientInput` (#6565) by @hyf0
- visit ast in `cross_module_optimization` stage parallel (#6552) by @IWANABETHATGUY

### 🧪 Testing

- json module prop conflict with normal module declaration binding (#6540) by @IWANABETHATGUY
- vite-tests: fix rolldown overrides (#6532) by @sapphi-red

### ⚙️ Miscellaneous Tasks

- remove string conversion warning in `replacePlugin` to compatible with rollup (#6639) by @IWANABETHATGUY
- deps: update dependency dprint-json to v0.21.0 (#6637) by @renovate[bot]
- deps: lock file maintenance (#6635) by @renovate[bot]
- deps: lock file maintenance npm packages (#6632) by @renovate[bot]
- node: use built-in styleText (#6340) by @dumbmatter
- deps: update actions/setup-node action to v6 (#6629) by @renovate[bot]
- deps: update github-actions (#6628) by @renovate[bot]
- deps: update dependency dprint-markdown to v0.20.0 (#6627) by @renovate[bot]
- Switch color dependencies (ansis and picocolors) to built-in styleText (#6619) by @IWANABETHATGUY
- native-plugin: tweak assetPlugin (#6623) by @shulaoda
- remove deprecated warning in `build.ts` (#6621) by @IWANABETHATGUY
- deps: update dependency tsdown to v0.15.8 (#6617) by @renovate[bot]
- rolldown_binding: rename vite css plugin config field (#6611) by @shulaoda
- add colored deprecation warnings for top-level options (#6612) by @IWANABETHATGUY
- rust: make `cargo publish --workspace` work (#6287) by @Boshen
- deps: update dependency rolldown-plugin-dts to v0.16.12 (#6608) by @renovate[bot]
- test: add `opposite_minify_internal_exports` and remove `minify_internal_exports` extend test (#6596) by @hyf0
- test: render snapshot for build and dev independently (#6584) by @hyf0
- test: split test logic for normal build and dev engine (#6580) by @hyf0
- fix rolldown build self warning (#6578) by @IWANABETHATGUY
- tweak `BindingBuiltinPluginName` (#6574) by @shulaoda
- rust: use forked `notify` crate (#6573) by @Boshen
- add `.len()` and `.is_empty()` to `HybridIndexVec` (#6570) by @sapphi-red
- ai: improve `AGENT.md` with verified prompts (#6533) by @hyf0
- clippy: set `too-many-lines-threshold` to 200 (#6530) by @shulaoda
- clean up examples/basic-vue (#6515) by @IWANABETHATGUY
- deps: update dependency tsdown to v0.15.7 (#6512) by @renovate[bot]
- add shulaoda to release PR assignees (#6505) by @shulaoda

### ❤️ New Contributors

* @dumbmatter made their first contribution in [#6340](#6340)
* @H4ad made their first contribution in [#6615](#6615)
* @aprosail made their first contribution in [#6486](#6486)

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Panic in v7.1.16 when building project with nullish coalescing operators

4 participants