Skip to content

Comments

fix: chunk side effects calculation#7273

Merged
IWANABETHATGUY merged 1 commit intomainfrom
12-01-fix_chunk_side_effects_calculation
Dec 2, 2025
Merged

fix: chunk side effects calculation#7273
IWANABETHATGUY merged 1 commit intomainfrom
12-01-fix_chunk_side_effects_calculation

Conversation

@IWANABETHATGUY
Copy link
Member

No description provided.

Copy link
Member Author

IWANABETHATGUY commented Dec 1, 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.

@IWANABETHATGUY IWANABETHATGUY changed the base branch from 12-01-refactor_extract_common_function_util_for_chunk_merging to graphite-base/7273 December 1, 2025 02:19
@IWANABETHATGUY IWANABETHATGUY force-pushed the 12-01-fix_chunk_side_effects_calculation branch from 74bb8a7 to 3c4b5d9 Compare December 1, 2025 02:19
@IWANABETHATGUY IWANABETHATGUY changed the base branch from graphite-base/7273 to main December 1, 2025 02:19
@IWANABETHATGUY IWANABETHATGUY marked this pull request as ready for review December 1, 2025 02:21
Copilot AI review requested due to automatic review settings December 1, 2025 02:21
Copy link
Contributor

Copilot AI left a comment

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 fixes chunk side effects calculation by implementing proper side effects checking based on actual module side effects, rather than always returning true. The change improves tree-shaking by correctly identifying chunks without side effects, allowing the bundler to omit unnecessary imports.

Key changes:

  • Updated Chunk::has_side_effect() to check actual module side effects instead of always returning true
  • Added module_table parameter to enable querying individual module side effects
  • Updated call site in compute_cross_chunk_links.rs to pass the new parameter

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
crates/rolldown_common/src/chunk/mod.rs Implemented proper side effects calculation by iterating modules and checking their individual side effects
crates/rolldown/src/stages/generate_stage/compute_cross_chunk_links.rs Updated call to has_side_effect() with required module_table parameter
crates/rolldown/tests/snapshots/integration_rolldown__filename_with_hash.snap Updated hash values in snapshot due to changes in chunk content
crates/rolldown/tests/esbuild/splitting/splitting_minify_identifiers_crash_issue437/artifacts.snap Removed unnecessary side-effect import from c.js
crates/rolldown/tests/esbuild/splitting/splitting_cross_chunk_assignment_dependencies_recursive/artifacts.snap Removed unnecessary side-effect imports from a.js, b.js, and c.js

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@IWANABETHATGUY IWANABETHATGUY force-pushed the 12-01-fix_chunk_side_effects_calculation branch from 3c4b5d9 to 63ca12d Compare December 1, 2025 03:39
@netlify
Copy link

netlify bot commented Dec 1, 2025

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 75dcbbb
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/692eb4ff559a710008ff890c

@github-actions
Copy link
Contributor

github-actions bot commented Dec 1, 2025

Benchmarks Rust

  • target: main(f591548)
  • pr: 12-01-fix_chunk_side_effects_calculation(75dcbbb)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00     65.8±1.38ms        ? ?/sec    1.02     67.1±1.86ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.00     72.5±1.32ms        ? ?/sec    1.06     76.8±3.56ms        ? ?/sec
bundle/bundle@rome_ts                                        1.00    107.9±1.67ms        ? ?/sec    1.01    108.6±1.64ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    121.8±3.20ms        ? ?/sec    1.00    122.2±2.85ms        ? ?/sec
bundle/bundle@threejs                                        1.00     39.8±1.68ms        ? ?/sec    1.00     39.8±0.65ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     43.2±0.66ms        ? ?/sec    1.01     43.8±0.77ms        ? ?/sec
bundle/bundle@threejs10x                                     1.00    394.5±4.66ms        ? ?/sec    1.00    395.4±4.53ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.01    455.0±4.41ms        ? ?/sec    1.00    451.4±3.55ms        ? ?/sec
scan/scan@rome_ts                                            1.00     85.4±1.76ms        ? ?/sec    1.00     84.9±1.61ms        ? ?/sec
scan/scan@threejs                                            1.03     29.2±1.88ms        ? ?/sec    1.00     28.4±0.46ms        ? ?/sec
scan/scan@threejs10x                                         1.00    297.3±5.01ms        ? ?/sec    1.00    297.5±4.36ms        ? ?/sec

@graphite-app
Copy link
Contributor

graphite-app bot commented Dec 2, 2025

Merge activity

graphite-app bot pushed a commit that referenced this pull request Dec 2, 2025
Copilot AI review requested due to automatic review settings December 2, 2025 04:25
@graphite-app graphite-app bot force-pushed the 12-01-fix_chunk_side_effects_calculation branch from 63ca12d to 2049258 Compare December 2, 2025 04:25
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@IWANABETHATGUY IWANABETHATGUY force-pushed the 12-01-fix_chunk_side_effects_calculation branch from 2049258 to 9aace7e Compare December 2, 2025 04:26
graphite-app bot pushed a commit that referenced this pull request Dec 2, 2025
@graphite-app graphite-app bot force-pushed the 12-01-fix_chunk_side_effects_calculation branch from 9aace7e to 239ab50 Compare December 2, 2025 04:27
graphite-app bot pushed a commit that referenced this pull request Dec 2, 2025
Copilot AI review requested due to automatic review settings December 2, 2025 04:48
@graphite-app graphite-app bot force-pushed the 12-01-fix_chunk_side_effects_calculation branch from 239ab50 to 4aad160 Compare December 2, 2025 04:48
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@IWANABETHATGUY IWANABETHATGUY force-pushed the 12-01-fix_chunk_side_effects_calculation branch from 4aad160 to 75dcbbb Compare December 2, 2025 09:44
@IWANABETHATGUY IWANABETHATGUY merged commit 0b2b1f9 into main Dec 2, 2025
10 of 11 checks passed
@IWANABETHATGUY IWANABETHATGUY deleted the 12-01-fix_chunk_side_effects_calculation branch December 2, 2025 09:44
This was referenced Dec 3, 2025
shulaoda added a commit that referenced this pull request Dec 3, 2025
## [1.0.0-beta.53] - 2025-12-03

💥 Breaking Changes
- Drop `i686-pc-windows-msvc` target support

🚀 Chunk Merging Optimization
- Rolldown now automatically merges shared chunks when entries import each other (when `preserveEntrySignature` is not `strict`)
```shell
Before:
entry.js   → imports → shared.js (common chunk)
entry2.js  → imports → shared.js
Output: 3 chunks (entry.js, entry2.js, shared.js)

After:
entry.js   → contains shared code
entry2.js  → imports → entry.js
Output: 2 chunks (entry.js, entry2.js)
```

### 💥 BREAKING CHANGES

- drop `i686-pc-windows-msvc` target support (#7230) by @sapphi-red

### 🚀 Features

- rolldown_plugin_vite_manifest: pass normalized options to `isLegacy` callback (#7321) by @shulaoda
- plugin/vite-resolve: add `disableCache` option (#6763) by @sapphi-red
- rolldown: export `createTokioRuntime` for tsdown (#7264) by @shulaoda
- rolldown_plugin_vite_html: sync `moduleSideEffects` for already loaded modules (#7254) by @shulaoda
- rolldown_plugin_vite_html: load module scripts with side effects to prevent tree-shaking (#7244) by @shulaoda
- rolldown_plugin_vite_css_post: implement `cssScopeTo` for scoped CSS tree-shaking (#7240) by @shulaoda

### 🐛 Bug Fixes

- export default class decl __name runtime insertion (#7316) by @IWANABETHATGUY
- chunk side effects calculation (#7273) by @IWANABETHATGUY
- node: `output.generateCode.preset: 'es2015'` should set `output.generateCode.symbols: true` by default (#7314) by @sapphi-red
- skip name helper for classes with static name property (#7312) by @IWANABETHATGUY
- preserve chunk imports relationship after chunk merging (#7303) by @shulaoda
- dev: make `register_modules` async (#7289) by @hyf0
- preserve computed property in object destructuring (#7288) by @IWANABETHATGUY
- support dynamic imports with shared dependencies (#7261) by @IWANABETHATGUY
- call `defer_sync_scan_data` in non-incremental build mode (#7255) by @shulaoda
- optimize chunk merging for shared entry points (#7194) by @IWANABETHATGUY
- add indentation for UMD format output (#7263) by @IWANABETHATGUY
- rolldown_plugin_vite_css_post: pass options to `isLegacy` callback for proper legacy detection (#7260) by @shulaoda
- rolldown_plugin_vite_css_post: also detect `?inline=true` query for inlined CSS (#7245) by @shulaoda
- rolldown_plugin_vite_css_post: distinguish empty CSS from no CSS (#7241) by @shulaoda
- add Windows support for t-run command (#7242) by @IWANABETHATGUY
- cjs: prevent duplicate require declarations for external modules with preserveModules (#7234) by @logaretm
- rolldown_plugin_vite_resolve: resolve from root for virtual modules (#7236) by @sapphi-red
- include entry level external modules in chunk exports (#7218) by @IWANABETHATGUY

### 🚜 Refactor

- dev: make `removeClient` async (#7313) by @hyf0
- move chunk merging code out of code_splitting.rs (#7285) by @IWANABETHATGUY
- extract common function util for chunk merging (#7271) by @IWANABETHATGUY
- use iterative method to merge chunks (#7256) by @IWANABETHATGUY
- use concat_string! instead of string replace for generating chunk level exports (#7247) by @IWANABETHATGUY

### 📚 Documentation

- add warning to experimental.resolveNewUrlToAsset about JS/TS files (#7300) by @Copilot
- add sequential hook execution difference in plugin-api.md (#7308) by @Copilot
- add migration example from onwarn to onLog (#7299) by @Copilot
- add migration example for manualChunks to advancedChunks (#7298) by @Copilot
- deps: bump vitepress to fix build (#7307) by @sapphi-red
- examples & text for experimental.resolveNewUrlToAsset (#7259) by @TheAlexLichter

### ⚡ Performance

- rolldown_plugin_vite_css_post: lazily load `cssScopeTo` from JS module options (#7253) by @shulaoda
- rolldown_plugin_vite_css_post: avoid unnecessary string clones in `resolve_asset_urls_in_css` (#7250) by @shulaoda

### 🧪 Testing

- generate relative path like name in advanced chunks (#7267) by @IWANABETHATGUY
- add test case for preserveEntrySignatures with re-exports (#7279) by @IWANABETHATGUY
- add test262 integration tests (#7196) by @sapphi-red

### ⚙️ Miscellaneous Tasks

- deps: update dependency rolldown-plugin-dts to v0.18.1 (#7304) by @renovate[bot]
- enable tracing feature for napi (#7322) by @sapphi-red
- deps: update napi (#7320) by @renovate[bot]
- deps: update oxc (#7318) by @renovate[bot]
- deps: update napi (#7317) by @renovate[bot]
- deps: update oxc to v0.100.0 (#7301) by @renovate[bot]
- deps: downgrade pnpm to 10.23.0 to fix Netlify build (#7306) by @shulaoda
- add `trustPolicyExclude` for chokidar and semver (#7302) by @sapphi-red
- update pnpm lockfile (#7291) by @IWANABETHATGUY
- deps: update npm packages (#7272) by @renovate[bot]
- deps: update rust crates (#7270) by @renovate[bot]
- deps: update oxc (#7262) by @renovate[bot]
- deps: update github-actions (#7269) by @renovate[bot]
- deps: update dependency dprint-typescript to v0.95.13 (#7268) by @renovate[bot]
- deps: update `html5gum` to 0.8.1 (#7265) by @shulaoda
- rolldown: remove unused `getModuleOptions` from `PluginContext` (#7266) by @shulaoda
- remove unnecessary justfile ignore (#7243) by @IWANABETHATGUY
- deps: update oxc apps (#7238) by @renovate[bot]
- add `nul` to workaround https://github.com/anthropics/claude-c… (#7237) by @IWANABETHATGUY
- deps: update dependency valibot to v1.2.0 [security] (#7231) by @renovate[bot]
- deps: update crate-ci/typos action to v1.40.0 (#7232) by @renovate[bot]

### ❤️ New Contributors

* @logaretm made their first contribution in [#7234](#7234)

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.

2 participants