chore: gate experimental/testing-only items to silence dead_code in publish builds#9517
Conversation
✅ Deploy Preview for rolldown-rs canceled.
|
Merging this PR will not alter performance
Comparing Footnotes
|
Boshen
left a comment
There was a problem hiding this comment.
Why do have these feature gates in rolldown anyway? I don't get it.
To design rolldown rust part as if it will be used as a rust library to make sure the API is well designed. |
Merge activity
|
…ublish builds (#9517) ## Summary - `cargo publish` builds each crate in isolation without workspace feature unification, so items only constructed under a `testing` or `experimental` feature elsewhere in the workspace look dead. The recent v1.0.0 publish (run [26274921497](https://github.com/rolldown/rolldown/actions/runs/26274921497/job/77336783019)) surfaced two such variants in `rolldown_dev::CoordinatorMsg`. - Running `cargo hack check --each-feature --no-dev-deps --workspace` revealed 14 such warnings across `rolldown`, `rolldown_dev`, and (transitively) `rolldown_binding`. - Gate every offender behind the same cfg as its constructor so the no-feature build is self-consistent. ## Changes - `rolldown_dev`: gate `ScheduleBuildIfStale` / `GetWatchedFiles` variants, their match arms in `bundle_coordinator`, and the matching sender type aliases behind `feature = "testing"`. - `rolldown`: gate `hmr::hmr_stage`, `hmr::hmr_ast_finalizer`, `hmr::impl_traverse_for_hmr_ast_finalizer`, the `HmrAstFinalizer` trait impl in `hmr::utils`, the `incremental_*` / `with_cached_bundle*` impls, and the `Bundler::cache` field behind `feature = "experimental"`. After this change, `cargo hack check --each-feature --no-dev-deps --workspace` reports 0 warnings.
4f993ac to
0c6f8ea
Compare
…ublish builds (rolldown#9517) ## Summary - `cargo publish` builds each crate in isolation without workspace feature unification, so items only constructed under a `testing` or `experimental` feature elsewhere in the workspace look dead. The recent v1.0.0 publish (run [26274921497](https://github.com/rolldown/rolldown/actions/runs/26274921497/job/77336783019)) surfaced two such variants in `rolldown_dev::CoordinatorMsg`. - Running `cargo hack check --each-feature --no-dev-deps --workspace` revealed 14 such warnings across `rolldown`, `rolldown_dev`, and (transitively) `rolldown_binding`. - Gate every offender behind the same cfg as its constructor so the no-feature build is self-consistent. ## Changes - `rolldown_dev`: gate `ScheduleBuildIfStale` / `GetWatchedFiles` variants, their match arms in `bundle_coordinator`, and the matching sender type aliases behind `feature = "testing"`. - `rolldown`: gate `hmr::hmr_stage`, `hmr::hmr_ast_finalizer`, `hmr::impl_traverse_for_hmr_ast_finalizer`, the `HmrAstFinalizer` trait impl in `hmr::utils`, the `incremental_*` / `with_cached_bundle*` impls, and the `Bundler::cache` field behind `feature = "experimental"`. After this change, `cargo hack check --each-feature --no-dev-deps --workspace` reports 0 warnings.
## [1.0.3] - 2026-05-27 ### 🚀 Features - transform: respect decorator strictNullChecks option (#9580) by @kylecannon - drop `defer` keyword (#9503) by @TheAlexLichter ### 🐛 Bug Fixes - ci: create target dir before cargo release-oxc update (#9584) by @shulaoda - ci: reorder prepare-release steps to avoid dirty git check failure (#9583) by @shulaoda - testing: canonicalize temp dir early and use platform-specific separator in test262 (#9582) by @shulaoda - testing: resolve symlinked temp dir in test262 snapshot normalization (#9581) by @shulaoda - testing: canonicalize temp dir path in test262 snapshot normalization (#9579) by @shulaoda - dev: `onOutput` called twice when initial build fails (#9552) by @hyf0 - dev: make `ensureCurrentBuildFinish` not returning error when engine closes (#9564) by @h-a-n-a - oxc-runtime: route require() to CJS helper variant (#9263) (#9526) by @IWANABETHATGUY - generator: use exporter chunk's export mode for CJS default re-exports (#9299) (#9529) by @IWANABETHATGUY - rolldown: always run reduced-atom static cycle check (#9441) (#9514) by @IWANABETHATGUY - apply transform.dropLabels before scanning (#9521) (#9522) by @IWANABETHATGUY - rolldown_watcher: take `rolldown` dep through the workspace (#9510) by @Boshen - cache: keep the scan-stage cache consistent when a build fails (#9495) by @h-a-n-a - skip JSON default-import namespace optimization for write targets (#9484) (#9489) by @IWANABETHATGUY - deps: skip pnpm frozen-lockfile on Netlify to dodge catalog mismatch bug (#9471) by @Boshen ### 🚜 Refactor - oxc-runtime: use Cow for helper path construction (#9538) by @IWANABETHATGUY - fold import defer phase drop into PreProcessor (#9524) by @IWANABETHATGUY - distinguish `map: null` vs `map: undefined` in transform hook output (#9497) by @sapphi-red ### 📚 Documentation - explain the policy for Rust crates (#9547) by @sapphi-red - cache: add design doc for cache (#9544) by @h-a-n-a - guide/troubleshooting: add TDZ error section (#9537) by @sapphi-red - dev-engine: add design doc for dev-engine (#9479) by @h-a-n-a - lazy-barrel: tweak some words (#9483) by @shulaoda - lazy-barrel: expand reasoning behind LARGE_BARREL_MODULES advice (#9477) by @shulaoda ### ⚡ Performance - generate: thread ast_table by value into codegen consumer (#9555) by @Boshen - finalizers: replace `_reExport` construction with a direct call to avoid calling `clone_in` (#9501) by @Dunqing - reorder hot-path boolean checks to short-circuit on cheap predicates first (#9523) by @Boshen ### 🧪 Testing - rolldown: regression fixture for #9401 (#9418) by @IWANABETHATGUY - failing test for #9441 (#9504) by @TheAlexLichter ### ⚙️ Miscellaneous Tasks - deps: upgrade oxc to 0.133.0 (#9563) by @Dunqing - deps: update crate-ci/typos action to v1.46.3 (#9576) by @renovate[bot] - deps: update mimalloc-safe to 0.1.62 (#9577) by @shulaoda - mimalloc-safe: update to a bug-fix branch for verification (#9569) by @shulaoda - deps: update test262 submodule for tests (#9551) by @rolldown-guard[bot] - point published crates' readme to root README.md (#9553) by @Boshen - replace actions-cool/issues-helper with gh CLI (#9543) by @Boshen - deps: update cargo-shear to 1.12.4 (#9541) by @Boshen - deps: update taiki-e/install-action action to v2.79.4 (#9535) by @renovate[bot] - deps: update github actions (#9532) by @renovate[bot] - deps: update rust crates (#9534) by @renovate[bot] - deps: update npm packages (#9533) by @renovate[bot] - gate experimental/testing-only items to silence dead_code in publish builds (#9517) by @Boshen - docs: deploy to Void (#9509) by @Boshen - release: set up cargo-release-oxc for publishing crates (#9476) by @Boshen - rolldown_plugin_lazy_compilation: add missing description (#9507) by @Boshen - mimalloc-safe: update to a bug-fix branch for verification (#9506) by @shulaoda - deps: update crate-ci/typos action to v1.46.2 (#9468) by @renovate[bot] ### ❤️ New Contributors * @kylecannon made their first contribution in [#9580](#9580)
## [1.0.3] - 2026-05-27 ### 🚀 Features - transform: respect decorator strictNullChecks option (#9580) by @kylecannon - drop `defer` keyword (#9503) by @TheAlexLichter ### 🐛 Bug Fixes - ci: create target dir before cargo release-oxc update (#9584) by @shulaoda - ci: reorder prepare-release steps to avoid dirty git check failure (#9583) by @shulaoda - testing: canonicalize temp dir early and use platform-specific separator in test262 (#9582) by @shulaoda - testing: resolve symlinked temp dir in test262 snapshot normalization (#9581) by @shulaoda - testing: canonicalize temp dir path in test262 snapshot normalization (#9579) by @shulaoda - dev: `onOutput` called twice when initial build fails (#9552) by @hyf0 - dev: make `ensureCurrentBuildFinish` not returning error when engine closes (#9564) by @h-a-n-a - oxc-runtime: route require() to CJS helper variant (#9263) (#9526) by @IWANABETHATGUY - generator: use exporter chunk's export mode for CJS default re-exports (#9299) (#9529) by @IWANABETHATGUY - rolldown: always run reduced-atom static cycle check (#9441) (#9514) by @IWANABETHATGUY - apply transform.dropLabels before scanning (#9521) (#9522) by @IWANABETHATGUY - rolldown_watcher: take `rolldown` dep through the workspace (#9510) by @Boshen - cache: keep the scan-stage cache consistent when a build fails (#9495) by @h-a-n-a - skip JSON default-import namespace optimization for write targets (#9484) (#9489) by @IWANABETHATGUY - deps: skip pnpm frozen-lockfile on Netlify to dodge catalog mismatch bug (#9471) by @Boshen ### 🚜 Refactor - oxc-runtime: use Cow for helper path construction (#9538) by @IWANABETHATGUY - fold import defer phase drop into PreProcessor (#9524) by @IWANABETHATGUY - distinguish `map: null` vs `map: undefined` in transform hook output (#9497) by @sapphi-red ### 📚 Documentation - explain the policy for Rust crates (#9547) by @sapphi-red - cache: add design doc for cache (#9544) by @h-a-n-a - guide/troubleshooting: add TDZ error section (#9537) by @sapphi-red - dev-engine: add design doc for dev-engine (#9479) by @h-a-n-a - lazy-barrel: tweak some words (#9483) by @shulaoda - lazy-barrel: expand reasoning behind LARGE_BARREL_MODULES advice (#9477) by @shulaoda ### ⚡ Performance - generate: thread ast_table by value into codegen consumer (#9555) by @Boshen - finalizers: replace `_reExport` construction with a direct call to avoid calling `clone_in` (#9501) by @Dunqing - reorder hot-path boolean checks to short-circuit on cheap predicates first (#9523) by @Boshen ### 🧪 Testing - rolldown: regression fixture for #9401 (#9418) by @IWANABETHATGUY - failing test for #9441 (#9504) by @TheAlexLichter ### ⚙️ Miscellaneous Tasks - deps: upgrade oxc to 0.133.0 (#9563) by @Dunqing - deps: update crate-ci/typos action to v1.46.3 (#9576) by @renovate[bot] - deps: update mimalloc-safe to 0.1.62 (#9577) by @shulaoda - mimalloc-safe: update to a bug-fix branch for verification (#9569) by @shulaoda - deps: update test262 submodule for tests (#9551) by @rolldown-guard[bot] - point published crates' readme to root README.md (#9553) by @Boshen - replace actions-cool/issues-helper with gh CLI (#9543) by @Boshen - deps: update cargo-shear to 1.12.4 (#9541) by @Boshen - deps: update taiki-e/install-action action to v2.79.4 (#9535) by @renovate[bot] - deps: update github actions (#9532) by @renovate[bot] - deps: update rust crates (#9534) by @renovate[bot] - deps: update npm packages (#9533) by @renovate[bot] - gate experimental/testing-only items to silence dead_code in publish builds (#9517) by @Boshen - docs: deploy to Void (#9509) by @Boshen - release: set up cargo-release-oxc for publishing crates (#9476) by @Boshen - rolldown_plugin_lazy_compilation: add missing description (#9507) by @Boshen - mimalloc-safe: update to a bug-fix branch for verification (#9506) by @shulaoda - deps: update crate-ci/typos action to v1.46.2 (#9468) by @renovate[bot] ### ❤️ New Contributors * @kylecannon made their first contribution in [#9580](#9580)
Summary
cargo publishbuilds each crate in isolation without workspace feature unification, so items only constructed under atestingorexperimentalfeature elsewhere in the workspace look dead. The recent v1.0.0 publish (run 26274921497) surfaced two such variants inrolldown_dev::CoordinatorMsg.cargo hack check --each-feature --no-dev-deps --workspacerevealed 14 such warnings acrossrolldown,rolldown_dev, and (transitively)rolldown_binding.Changes
rolldown_dev: gateScheduleBuildIfStale/GetWatchedFilesvariants, their match arms inbundle_coordinator, and the matching sender type aliases behindfeature = "testing".rolldown: gatehmr::hmr_stage,hmr::hmr_ast_finalizer,hmr::impl_traverse_for_hmr_ast_finalizer, theHmrAstFinalizertrait impl inhmr::utils, theincremental_*/with_cached_bundle*impls, and theBundler::cachefield behindfeature = "experimental".After this change,
cargo hack check --each-feature --no-dev-deps --workspacereports 0 warnings.