fix: replace panic with proper error handling for hash placeholder generation#7661
Conversation
How to use the Graphite Merge QueueAdd 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. |
✅ Deploy Preview for rolldown-rs canceled.
|
There was a problem hiding this comment.
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 returnResult<String>and validate hash length bounds with descriptive error messages - Updated the
Replacertrait 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.
Benchmarks Rust
|
crates/rolldown/tests/rolldown/function/hashing/maximum-hash-size/artifacts.snap
Show resolved
Hide resolved
merge this one first, needs improvement to close the issue
Merge activity
|
a454772 to
dae5f5e
Compare
dae5f5e to
dea663c
Compare
## [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]>

part of #4021
close #7476