feat(rustdoc): stabilize --emit flag#146220
Conversation
|
Questions:
|
|
cc @aDotInTheVoid since you've involved in the PR removing the last blocker :) |
|
We discussed on today's rustdoc meeting. Before going any further, we will investigate exactly what each |
Thanks for it! This PR contains a doc based on my understanding and the history of these options, but I am not 100% sure if that is correct |
e1a5014 to
cc82db2
Compare
This comment has been minimized.
This comment has been minimized.
cc82db2 to
bfb63c3
Compare
|
I haven't read this yet but here are probably some very important and relevant considerations: #83784. |
|
For the use case in Cargo, we actually don't need anything other than
I guess one way forward is that rustdoc provides an extra emit type, say,
|
This option hasn't done anything for a long time, and can be removed. I've kept a shim in place to avoid breaking docs.rs, but the option no longer does anything. Using git-blame, I tracked this option down to f77ebd4, the commit that introduced EmitType in the first place. It was used with SharedResource::Unversioned, which no longer exists since f9e1f6f removed them. Part of rust-lang#146220
|
I've opened #148180, a follow-up that removes the no-op unversioned-shared-resources, which hasn't done anything ever since we switched to using hashes for cache busting. |
This option hasn't done anything for a long time, and can be removed. I've kept a shim in place to avoid breaking docs.rs, but the option no longer does anything. Using git-blame, I tracked this option down to f77ebd4, the commit that introduced EmitType in the first place. It was used with SharedResource::Unversioned, which no longer exists since f9e1f6f removed them. CC rust-lang#146220 Part of rust-lang#83784
bfb63c3 to
b7f8908
Compare
This comment has been minimized.
This comment has been minimized.
This option hasn't done anything for a long time, and can be removed. I've kept a shim in place to avoid breaking docs.rs, but the option no longer does anything. Using git-blame, I tracked this option down to f77ebd4, the commit that introduced EmitType in the first place. It was used with SharedResource::Unversioned, which no longer exists since f9e1f6f removed them. CC rust-lang#146220 Part of rust-lang#83784
…rces, r=GuillaumeGomez rustdoc: remove `--emit=unversioned-shared-resources` This option hasn't done anything for a long time, and can be removed. I've kept a shim in place to avoid breaking docs.rs, but the option no longer does anything. Using git-blame, I tracked this option down to f77ebd4, the commit that introduced EmitType in the first place. It was used with SharedResource::Unversioned, which no longer exists since f9e1f6f removed them. CC rust-lang#146220 Part of rust-lang#83784
rustdoc: dep-info for standalone markdown inputs Part of rust-lang#146220 (comment) r? @fmease
Rollup merge of #154352 - notriddle:emit-md, r=fmease rustdoc: dep-info for standalone markdown inputs Part of #146220 (comment) r? @fmease
|
@rfcbot resolve interaction-with-other-modes As already mentioned, we now emit an error if
We still don't honor @rfcbot resolve tiny-stab-report Thanks, weihanglo, for adding a stabilization report! |
|
#155374 adds a few more tests for this functionality |
This comment has been minimized.
This comment has been minimized.
|
🔔 This is now entering its final comment period, as per the review above. 🔔 |
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
The final comment period, with a disposition to merge, as per the review above, is now complete. As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed. |
|
Thanks everyone! @bors r+ rollup |
Rollup merge of #146220 - weihanglo:rustdoc-emit, r=GuillaumeGomez feat(rustdoc): stabilize `--emit` flag ### [---> FCP <---](rust-lang/rust#146220 (comment)) ## Stabilization Report: `rustdoc --emit` **Feature:** `rustdoc --emit` **Tracking issue:** rust-lang/rust#83784 **Stabilization PR:** rust-lang/rust#146220 ### What we are stabilizing This stabilizes the `rustdoc --emit` flag, which controls what types of output rustdoc produces. The flag accepts a comma-separated list of the following emit types: - `html-static-files` --- Shared static files with content-hashed filenames for safe caching. - `html-non-static-files` --- Per-crate documentation files with deterministic filenames. - `dep-info[=<path>]` --- A Makefile-compatible `.d` file listing all source files loaded during documentation generation. Same as rustc's dep-info files. When `--emit` is not specified, the default behavior is `--emit=html-static-files,html-non-static-files` (i.e., full HTML documentation output, no dep-info). ### What we are not stabilizing * Interaction between other unstable options, such as `-Zrustdoc-mergeable-info` and `--output-format=doctest` * Available options and the default options when `--emit` not specified. * Extension of per-type emit paths for options currently missing that. ### Motivation #### Cargo The primary consumer is Cargo, which needs `--emit=dep-info=<path>` to precisely track the input dependencies of a rustdoc invocation (see the [`-Zrustdoc-depinfo`] unstable Cargo feature). Without dep-info, Cargo cannot detect changes to files pulled in via `#[path = "..."]` or similar mechanisms and leads to stale documentation in incremental builds. Cargo also uses the selective emission mechanism (`html-static-files` / `html-non-static-files`) when the unstable [`-Zrustdoc-mergeable-info`] feature is active. It skips writing shared static files and search index during per-crate doc generation and defer them to a final merge phase. Under stable usage, Cargo passes all three emit types together. #### docs.rs docs.rs is the other major consumer. It uses selective emission to avoid redundantly copying toolchain-wide static files for every crate, which has historically been a source of breakage. See the tracking rust-lang/rust#83784 and the about page for more <https://docs.rs/about/download>. ### Tests - `tests/run-make/emit-shared-files` --- Verifies selective emission of static vs non-static files. - `tests/run-make/rustdoc-dep-info` --- Verifies dep-info generation, including explicit path and `--out-dir` interaction. - `tests/run-make/rustdoc-scrape-examples-dep-info` --- Verifies dep-info works with scrape-examples. - `tests/run-make/rustdoc-default-output/` --- Verifies `--help` output shows `[html-static-files,html-non-static-files,dep-info]` [`-Zrustdoc-depinfo`]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#rustdoc-depinfo [`-Zrustdoc-mergeable-info`]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#rustdoc-mergeable-info
`--emit` is now stable in rustdoc: rust-lang/rust#146220 `-Zunstable-options` flag is still required for `-Zrustdoc-mergeable-info` related flags.
### What does this PR try to resolve? `--emit` is now stable in rustdoc: rust-lang/rust#146220 `-Zunstable-options` flag is still required for `-Zrustdoc-mergeable-info` related flags.
View all comments
---> FCP <---
Stabilization Report:
rustdoc --emitFeature:
rustdoc --emitTracking issue: #83784
Stabilization PR: #146220
What we are stabilizing
This stabilizes the
rustdoc --emitflag, which controls what types of output rustdoc produces. The flag accepts a comma-separated list of the following emit types:html-static-files--- Shared static files with content-hashed filenames for safe caching.html-non-static-files--- Per-crate documentation files with deterministic filenames.dep-info[=<path>]--- A Makefile-compatible.dfile listing all source files loaded during documentation generation. Same as rustc's dep-info files.When
--emitis not specified, the default behavior is--emit=html-static-files,html-non-static-files(i.e., full HTML documentation output, no dep-info).What we are not stabilizing
-Zrustdoc-mergeable-infoand--output-format=doctest--emitnot specified.Motivation
Cargo
The primary consumer is Cargo, which needs
--emit=dep-info=<path>to precisely track the input dependencies of a rustdoc invocation (see the-Zrustdoc-depinfounstable Cargo feature). Without dep-info, Cargo cannot detect changes to files pulled in via#[path = "..."]or similar mechanisms and leads to stale documentation in incremental builds.Cargo also uses the selective emission mechanism (
html-static-files/html-non-static-files) when the unstable-Zrustdoc-mergeable-infofeature is active. It skips writing shared static files and search index during per-crate doc generation and defer them to a final merge phase.Under stable usage, Cargo passes all three emit types together.
docs.rs
docs.rs is the other major consumer. It uses selective emission to avoid redundantly copying toolchain-wide static files for every crate, which has historically been a source of breakage. See the tracking #83784 and the about page for more https://docs.rs/about/download.
Tests
tests/run-make/emit-shared-files--- Verifies selective emission of static vs non-static files.tests/run-make/rustdoc-dep-info--- Verifies dep-info generation, including explicit path and--out-dirinteraction.tests/run-make/rustdoc-scrape-examples-dep-info--- Verifies dep-info works with scrape-examples.tests/run-make/rustdoc-default-output/--- Verifies--helpoutput shows[html-static-files,html-non-static-files,dep-info]