Skip to content

chore: gate experimental/testing-only items to silence dead_code in publish builds#9517

Merged
graphite-app[bot] merged 1 commit into
mainfrom
fix/feature-gated-dead-code
May 24, 2026
Merged

chore: gate experimental/testing-only items to silence dead_code in publish builds#9517
graphite-app[bot] merged 1 commit into
mainfrom
fix/feature-gated-dead-code

Conversation

@Boshen

@Boshen Boshen commented May 22, 2026

Copy link
Copy Markdown
Member

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) 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.

@netlify

netlify Bot commented May 22, 2026

Copy link
Copy Markdown

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 0c6f8ea
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/6a1269faa0de4f0008230a08

@codspeed-hq

codspeed-hq Bot commented May 22, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 4 untouched benchmarks
⏩ 10 skipped benchmarks1


Comparing fix/feature-gated-dead-code (4f993ac) with main (2c533e4)2

Open in CodSpeed

Footnotes

  1. 10 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

  2. No successful run was found on main (a9e23ec) during the generation of this report, so 2c533e4 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@Boshen Boshen left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Why do have these feature gates in rolldown anyway? I don't get it.

@hyf0

hyf0 commented May 24, 2026

Copy link
Copy Markdown
Member

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.

@hyf0 hyf0 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It's better we could have a CI to check if it's publisable for every commit.

Boshen commented May 24, 2026

Copy link
Copy Markdown
Member Author

Merge activity

  • May 24, 3:00 AM UTC: The merge label 'graphite: merge-when-ready' was detected. This PR will be added to the Graphite merge queue once it meets the requirements.
  • May 24, 3:00 AM UTC: Boshen added this pull request to the Graphite merge queue.
  • May 24, 3:05 AM UTC: Merged by the Graphite merge queue.

…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.
@graphite-app graphite-app Bot force-pushed the fix/feature-gated-dead-code branch from 4f993ac to 0c6f8ea Compare May 24, 2026 03:01
@graphite-app graphite-app Bot merged commit 0c6f8ea into main May 24, 2026
33 checks passed
@graphite-app graphite-app Bot deleted the fix/feature-gated-dead-code branch May 24, 2026 03:05
V1OL3TF0X pushed a commit to V1OL3TF0X/rolldown that referenced this pull request May 25, 2026
…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.
@shulaoda shulaoda mentioned this pull request May 27, 2026
shulaoda added a commit that referenced this pull request May 27, 2026
## [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)
shulaoda pushed a commit that referenced this pull request May 27, 2026
## [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)
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