Skip to content

fix: replace panic with proper error handling for hash placeholder generation#7661

Merged
graphite-app[bot] merged 1 commit intomainfrom
12-26-refactor_replace_panic_with_proper_error_handling_for_hash_placeholder_generation
Dec 26, 2025
Merged

fix: replace panic with proper error handling for hash placeholder generation#7661
graphite-app[bot] merged 1 commit intomainfrom
12-26-refactor_replace_panic_with_proper_error_handling_for_hash_placeholder_generation

Conversation

@shulaoda
Copy link
Member

@shulaoda shulaoda commented Dec 26, 2025

part of #4021
close #7476

Copy link
Member Author


How to use the Graphite Merge Queue

Add the label graphite: merge-when-ready 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.

@shulaoda shulaoda marked this pull request as ready for review December 26, 2025 00:20
Copilot AI review requested due to automatic review settings December 26, 2025 00:20
@netlify
Copy link

netlify bot commented Dec 26, 2025

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit dea663c
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/694e81100f831d000807393e

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 replaces panic-based error handling with proper Result-based error handling in the hash placeholder generation system. The changes ensure that invalid hash lengths (too small or too large) are caught early with helpful error messages that guide users to fix their configuration.

Key changes:

  • Modified HashPlaceholderGenerator::generate() to return Result<String> and validate hash length bounds with descriptive error messages
  • Updated the Replacer trait and related infrastructure to propagate errors through Result types
  • Added comprehensive test cases for minimum and maximum hash size validation

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
crates/rolldown_utils/src/hash_placeholder.rs Changed generate() to return Result, added pattern_name parameter for better error messages, replaced panic assertions with proper error handling
crates/rolldown_utils/src/replace_all_placeholder.rs Updated Replacer trait to return Result, modified both simple and length-aware replacement functions to propagate errors
crates/rolldown_common/src/inner_bundler_options/types/filename_template.rs Updated signature to use static lifetime for pattern_name, added error propagation in render method
crates/rolldown_common/src/file_emitter.rs Updated hash replacer closure to return Result and adjusted hash length clamping
crates/rolldown_common/src/chunk/mod.rs Changed hash_replacer closures to capture pattern_name and return Result in both regular and CSS filename generation
crates/rolldown/src/stages/generate_stage/mod.rs Updated asset filename generation to use pattern_name and proper error handling
crates/rolldown/tests/rolldown/function/hashing/minimum-hash-size/* New test case validating error message for hash size below minimum (6 chars)
crates/rolldown/tests/rolldown/function/hashing/maximum-hash-size/* New test case validating error message for hash size above maximum (21 chars)
crates/rolldown/tests/rolldown/function/entry_filenames/should_generate_specified_hash_length/_config.json Updated test to use valid hash length boundaries (6 and 21 instead of 2 and 22)

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

@github-actions
Copy link
Contributor

Benchmarks Rust

  • target: main(dbd0f6d)
  • pr: 12-26-refactor_replace_panic_with_proper_error_handling_for_hash_placeholder_generation(a454772)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.05     66.7±2.22ms        ? ?/sec    1.00     63.2±1.84ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.05     73.3±2.84ms        ? ?/sec    1.00     70.0±1.92ms        ? ?/sec
bundle/bundle@rome_ts                                        1.04    109.7±2.71ms        ? ?/sec    1.00    105.6±1.71ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.03    121.0±1.83ms        ? ?/sec    1.00    118.0±3.60ms        ? ?/sec
bundle/bundle@threejs                                        1.00     39.3±0.98ms        ? ?/sec    1.00     39.1±0.72ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.01     43.2±1.14ms        ? ?/sec    1.00     42.8±0.93ms        ? ?/sec
bundle/bundle@threejs10x                                     1.01    395.9±6.06ms        ? ?/sec    1.00    392.3±4.60ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00    452.1±4.85ms        ? ?/sec    1.00    451.2±4.26ms        ? ?/sec
scan/scan@rome_ts                                            1.00     83.7±1.50ms        ? ?/sec    1.00     84.0±1.46ms        ? ?/sec
scan/scan@threejs                                            1.00     28.7±1.72ms        ? ?/sec    1.00     28.7±1.75ms        ? ?/sec
scan/scan@threejs10x                                         1.00    295.2±4.54ms        ? ?/sec    1.00    294.9±3.62ms        ? ?/sec

Copy link
Member

@hyf0 hyf0 left a comment

Choose a reason for hiding this comment

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

Well done!

@sapphi-red sapphi-red dismissed their stale review December 26, 2025 12:27

merge this one first, needs improvement to close the issue

@sapphi-red sapphi-red changed the title refactor: replace panic with proper error handling for hash placeholder generation fix: replace panic with proper error handling for hash placeholder generation Dec 26, 2025
@graphite-app
Copy link
Contributor

graphite-app bot commented Dec 26, 2025

Merge activity

graphite-app bot pushed a commit that referenced this pull request Dec 26, 2025
@graphite-app graphite-app bot force-pushed the 12-26-refactor_replace_panic_with_proper_error_handling_for_hash_placeholder_generation branch from a454772 to dae5f5e Compare December 26, 2025 12:28
Copilot AI review requested due to automatic review settings December 26, 2025 12:35
@graphite-app graphite-app bot force-pushed the 12-26-refactor_replace_panic_with_proper_error_handling_for_hash_placeholder_generation branch from dae5f5e to dea663c Compare December 26, 2025 12:35
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.

@graphite-app graphite-app bot merged commit dea663c into main Dec 26, 2025
33 checks passed
@graphite-app graphite-app bot deleted the 12-26-refactor_replace_panic_with_proper_error_handling_for_hash_placeholder_generation branch December 26, 2025 12:51
This was referenced Dec 31, 2025
shulaoda added a commit that referenced this pull request Dec 31, 2025
## [1.0.0-beta.58] - 2025-12-31

### 💥 BREAKING CHANGES

- experimental/devtools: rename InputOptions#debug to InputOptions#devtools (#7686) by @Copilot

### 🚀 Features

- implement target feature check in `should_transform_js` for raw options (#7697) by @shulaoda
- support `output.dynamicImportInCjs` option (#7677) by @shulaoda
- types: expose `ChecksOptions` type (#7653) by @sapphi-red

### 🐛 Bug Fixes

- export runtime helpers for cross-chunk access (#7658) by @shulaoda
- cjs namespace merging regression (#7665) by @IWANABETHATGUY
- replace panic with proper error handling for hash placeholder generation (#7661) by @shulaoda
- remove the blank line between shebang and postBanner (#7643) by @btea
- rolldown_plugin_vite_reporter: apply padding before ANSI coloring for proper size column alignment (#7649) by @shulaoda

### 🚜 Refactor

- rust: use `StableModuleId` as the map key if possible (#7718) by @hyf0
- rust: return `StableModuleId` instead of `&str` from `Module#stable_id()` (#7717) by @hyf0
- rust: return correct stable id of external module from `Module#stable_id()` (#7716) by @hyf0
- rust: introduce `StableModuleId` type (#7715) by @hyf0
- rust: reduce unnecessary `id.as_arc_str().clone().into()` (#7714) by @hyf0
- rust: remove `ModuleId#resource_id` and use `as_arc_str` directly (#7710) by @hyf0
- rust: remove unused `Module#id_clone` (#7709) by @hyf0
- rust: remove `Module#id_as_str` and use `Module#id` directly (#7708) by @hyf0
- consolidate namespace call analysis into import analyzer (#7657) by @IWANABETHATGUY
- rust: make `ExternalModule#id` have the type `ModuleId` (#7707) by @hyf0
- rust: rename `Module#id` to `Module#id_as_str` (#7706) by @hyf0
- rust: use `ModuleId` instead of raw `ArcStr` for `ScanStageCache` (#7701) by @hyf0
- simplify error propagation in cache merge (#7702) by @shulaoda
- use `ModuleId` as the type of `ResolvedId#id` (#7694) by @hyf0
- types: rename `resolved_request_info.rs` to `resolved_id.rs` and move its contents (#7687) by @hyf0
- devtools: emit data to `<CWD>/node_modules/.rolldown` (#7692) by @hyf0
- use `InvalidOption` for hash placeholder generation errors (#7674) by @shulaoda
- rolldown_error: remove dependency on rolldown_utils (#7672) by @shulaoda
- use nodejs-built-in-modules v1.0.0 directly in callsites (#7667) by @Boshen

### 📚 Documentation

- migrate input options content from options to auto gen docs (#7663) by @mdong1909
- create reference index page (#7659) by @mdong1909
- tweak auto-generated reference output (#7654) by @sapphi-red
- initialize auto-gen docs (#7252) by @mdong1909

### ⚙️ Miscellaneous Tasks

- deps: update napi (#7705) by @renovate[bot]
- pin Node.js version to 24.12.0 LTS in .node-version file (#7713) by @Copilot
- update esbuild test reasons (#7703) by @sapphi-red
- deps: update crate-ci/typos action to v1.40.1 (#7696) by @renovate[bot]
- deps: update oxc to v0.106.0 (#7512) by @renovate[bot]
- js: replace dprint with oxfmt (#7214) by @Boshen
- deps: update dependency oxlint to v1.36.0 (#7691) by @renovate[bot]
- deps: update github-actions (#7679) by @renovate[bot]
- deps: update npm packages (#7680) by @renovate[bot]
- deps: update rust crates (#7678) by @renovate[bot]
- deps: update oxc resolver to v11.16.2 (#7668) by @renovate[bot]
- add API reference files to knip entry points (#7669) by @Copilot
- deps: update notify (#7651) by @sapphi-red
- add `homepage` field to package.json (#7648) by @trivikr
- deps: update oxc resolver to v11.16.1 (#7647) by @renovate[bot]
- deps: update rolldown-plugin-dts to 0.20.0 (#7645) by @shulaoda

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.

3 participants

Comments