Skip to content

rustdoc: Represent --output-format=json coverage and ir differently#154445

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aDotInTheVoid:better-enum
Jul 9, 2026
Merged

rustdoc: Represent --output-format=json coverage and ir differently#154445
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aDotInTheVoid:better-enum

Conversation

@aDotInTheVoid

@aDotInTheVoid aDotInTheVoid commented Mar 27, 2026

Copy link
Copy Markdown
Member

--output-format=json does a few different things:

  • By itself, it emits a JSON representation of a crate's API ("IR
    JSON").
  • When used with --show-coverage, it prints the doc coverage as JSON,
    instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
show_coverage variable each time we check is_json, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.

@rustbot rustbot added A-run-make Area: port run-make Makefiles to rmake.rs S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels Mar 27, 2026
@rustbot

rustbot commented Mar 27, 2026

Copy link
Copy Markdown
Collaborator

r? @notriddle

rustbot has assigned @notriddle.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: rustdoc
  • rustdoc expanded to 9 candidates
  • Random selection from GuillaumeGomez, camelid, fmease, lolbinarycat, notriddle

@aDotInTheVoid aDotInTheVoid added the A-rustdoc-json Area: Rustdoc JSON backend label Mar 30, 2026
@apiraino apiraino removed the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label May 14, 2026
@rust-log-analyzer

This comment has been minimized.

@aDotInTheVoid

Copy link
Copy Markdown
Member Author

@rustbot author

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 19, 2026
@notriddle

Copy link
Copy Markdown
Contributor

Assign to someone who knows more about this:

r? Urgau

@rustbot rustbot assigned Urgau and unassigned notriddle Jun 19, 2026

@Urgau Urgau 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.

Thanks for the cleanup. Looks good to me.

View changes since this review

@Urgau

Urgau commented Jun 19, 2026

Copy link
Copy Markdown
Member

r=me after fixing CI

@rust-log-analyzer

This comment has been minimized.

@rust-cloud-vms rust-cloud-vms Bot force-pushed the better-enum branch 3 times, most recently from eb1d4fa to 9ed47c1 Compare July 7, 2026 23:14
@aDotInTheVoid

Copy link
Copy Markdown
Member Author

This has changed enough that it probably needs re-review.

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jul 7, 2026
`--output-format=json` does a few different things:

- By itself, it emits a JSON representation of a crate's API ("IR
  JSON").
- When used with `--show-coverage`, it prints the doc coverage as JSON,
  instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
`show_coverage` variable each time we check `is_json`, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.
@aDotInTheVoid aDotInTheVoid changed the title rustdoc: Repersent --output-format=json coverage and ir diferently rustdoc: Represent --output-format=json coverage and ir differently Jul 7, 2026
Comment thread src/librustdoc/config.rs
match typ {
EmitType::DepInfo(_) => match output_format {
OutputFormat::Json | OutputFormat::Html => {}
OutputFormat::Html | OutputFormat::IrJson | OutputFormat::CoverageJson => {}

@aDotInTheVoid aDotInTheVoid Jul 7, 2026

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.

I don't think this is actually correct as --emit=dep-info makes no sense for --show-coverage (which only goes to stdout). I've filed #158929 to track doing this, as that fix should be a separate PR.

View changes since the review

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.

Indeed this seems weird. I agree that we should probably disallow --emit=dep-info with --show-coverage.

@Urgau Urgau 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.

Looks good to me.

View changes since this review

@Urgau

Urgau commented Jul 8, 2026

Copy link
Copy Markdown
Member

@bors r+

@rust-bors

rust-bors Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d2ee4ca has been approved by Urgau

It is now in the queue for this repository.

🌲 The tree is currently closed for pull requests below priority 10. This pull request will be tested once the tree is reopened.

Reason for tree closure: spurious failures

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 8, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jul 8, 2026
rustdoc: Represent `--output-format=json` coverage and ir differently

`--output-format=json` does a few different things:

- By itself, it emits a JSON representation of a crate's API ("IR
  JSON").
- When used with `--show-coverage`, it prints the doc coverage as JSON,
  instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
`show_coverage` variable each time we check `is_json`, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jul 8, 2026
rustdoc: Represent `--output-format=json` coverage and ir differently

`--output-format=json` does a few different things:

- By itself, it emits a JSON representation of a crate's API ("IR
  JSON").
- When used with `--show-coverage`, it prints the doc coverage as JSON,
  instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
`show_coverage` variable each time we check `is_json`, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jul 8, 2026
rustdoc: Represent `--output-format=json` coverage and ir differently

`--output-format=json` does a few different things:

- By itself, it emits a JSON representation of a crate's API ("IR
  JSON").
- When used with `--show-coverage`, it prints the doc coverage as JSON,
  instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
`show_coverage` variable each time we check `is_json`, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.
rust-bors Bot pushed a commit that referenced this pull request Jul 8, 2026
…uwer

Rollup of 25 pull requests

Successful merges:

 - #158871 (add relnotes for 1.97.0)
 - #158968 (stdarch subtree update)
 - #154445 (rustdoc: Represent `--output-format=json` coverage and ir differently)
 - #156370 (Reject linked dylib EII default overrides)
 - #157153 (allow `Allocator`s to be used as `#[global_allocator]`s)
 - #158495 (Rename HAS_CT_PROJECTION to HAS_CONST_ALIAS)
 - #158617 (allow mGCA const arguments to fall back to anon consts)
 - #158645 (Fix splat ICEs and ban it in closures)
 - #158655 (Fix coroutine MIR saved local remapping)
 - #158666 (Carry the `b_offset` inside `BackendRepr::ScalarPair`)
 - #158912 (Introduce new bootstrap config section for PGO configuration)
 - #158920 (Update wasm-component-ld to 0.5.26)
 - #158926 (wrapping_sh* methods: clarify underspecified reference)
 - #158927 (add core test run with `-Zforce-intrinsic-fallback`)
 - #158932 (Do not build the compiler when invoking `x perf compare`)
 - #158937 (Emit the emscripten entry point as `__main_argc_argv`)
 - #151379 (Stabilize `VecDeque::retain_back` from `truncate_front`)
 - #156548 ( Library support for aarch64-unknown-linux-pauthtest target)
 - #158307 (CI job for parallel frontend ui tests)
 - #158347 (Improve generic parameters handling for #[diagnostic::on_const])
 - #158722 (delegation: do not always inherit `ConstArgHasType` predicates)
 - #158741 (Simplify `Option::into_flat_iter` signature)
 - #158807 (Add regression test for CString::clone_into unwind safety)
 - #158862 (Fix the span for parameter suggestion )
 - #158883 (tests: fix enum-match.rs to handle LLVM 23)
jhpratt added a commit to jhpratt/rust that referenced this pull request Jul 8, 2026
rustdoc: Represent `--output-format=json` coverage and ir differently

`--output-format=json` does a few different things:

- By itself, it emits a JSON representation of a crate's API ("IR
  JSON").
- When used with `--show-coverage`, it prints the doc coverage as JSON,
  instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
`show_coverage` variable each time we check `is_json`, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.
rust-bors Bot pushed a commit that referenced this pull request Jul 8, 2026
Rollup of 25 pull requests

Successful merges:

 - #158871 (add relnotes for 1.97.0)
 - #158968 (stdarch subtree update)
 - #157690 (codegen_ssa: pack small const aggregates into immediate stores)
 - #158541 (Move `std::io::Write` to `core::io`)
 - #154445 (rustdoc: Represent `--output-format=json` coverage and ir differently)
 - #156370 (Reject linked dylib EII default overrides)
 - #157153 (allow `Allocator`s to be used as `#[global_allocator]`s)
 - #158495 (Rename HAS_CT_PROJECTION to HAS_CONST_ALIAS)
 - #158617 (allow mGCA const arguments to fall back to anon consts)
 - #158645 (Fix splat ICEs and ban it in closures)
 - #158655 (Fix coroutine MIR saved local remapping)
 - #158666 (Carry the `b_offset` inside `BackendRepr::ScalarPair`)
 - #158870 (std: merge the unix-like io::error modules into one file)
 - #158920 (Update wasm-component-ld to 0.5.26)
 - #158926 (wrapping_sh* methods: clarify underspecified reference)
 - #158927 (add core test run with `-Zforce-intrinsic-fallback`)
 - #158932 (Do not build the compiler when invoking `x perf compare`)
 - #158937 (Emit the emscripten entry point as `__main_argc_argv`)
 - #151379 (Stabilize `VecDeque::retain_back` from `truncate_front`)
 - #156144 (Better docs for PartialEq (includes macro rename))
 - #156548 ( Library support for aarch64-unknown-linux-pauthtest target)
 - #158307 (CI job for parallel frontend ui tests)
 - #158347 (Improve generic parameters handling for #[diagnostic::on_const])
 - #158722 (delegation: do not always inherit `ConstArgHasType` predicates)
 - #158741 (Simplify `Option::into_flat_iter` signature)
jhpratt added a commit to jhpratt/rust that referenced this pull request Jul 9, 2026
rustdoc: Represent `--output-format=json` coverage and ir differently

`--output-format=json` does a few different things:

- By itself, it emits a JSON representation of a crate's API ("IR
  JSON").
- When used with `--show-coverage`, it prints the doc coverage as JSON,
  instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
`show_coverage` variable each time we check `is_json`, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.
rust-bors Bot pushed a commit that referenced this pull request Jul 9, 2026
Rollup of 23 pull requests

Successful merges:

 - #158968 (stdarch subtree update)
 - #154445 (rustdoc: Represent `--output-format=json` coverage and ir differently)
 - #158495 (Rename HAS_CT_PROJECTION to HAS_CONST_ALIAS)
 - #158666 (Carry the `b_offset` inside `BackendRepr::ScalarPair`)
 - #158870 (std: merge the unix-like io::error modules into one file)
 - #158920 (Update wasm-component-ld to 0.5.26)
 - #158926 (wrapping_sh* methods: clarify underspecified reference)
 - #158927 (add core test run with `-Zforce-intrinsic-fallback`)
 - #158932 (Do not build the compiler when invoking `x perf compare`)
 - #158937 (Emit the emscripten entry point as `__main_argc_argv`)
 - #151379 (Stabilize `VecDeque::retain_back` from `truncate_front`)
 - #156144 (Better docs for PartialEq (includes macro rename))
 - #156548 ( Library support for aarch64-unknown-linux-pauthtest target)
 - #157995 (`Vec::dedup_by` docs explicit function argument order)
 - #158307 (CI job for parallel frontend ui tests)
 - #158741 (Simplify `Option::into_flat_iter` signature)
 - #158807 (Add regression test for CString::clone_into unwind safety)
 - #158862 (Fix the span for parameter suggestion )
 - #158894 (Make the ordering of non-terminal binds in ambiguity error messages deterministic)
 - #158902 (add codegen test for range length bound propagation)
 - #158913 (Update `browser-ui-test` version to `0.24.1`)
 - #158935 (std: support real fd methods on Emscripten)
 - #158978 (Add regression test for too-big by-value ABI args)
@rust-bors rust-bors Bot merged commit 470853e into rust-lang:main Jul 9, 2026
13 checks passed
@rustbot rustbot added this to the 1.99.0 milestone Jul 9, 2026
rust-timer added a commit that referenced this pull request Jul 9, 2026
Rollup merge of #154445 - aDotInTheVoid:better-enum, r=Urgau

rustdoc: Represent `--output-format=json` coverage and ir differently

`--output-format=json` does a few different things:

- By itself, it emits a JSON representation of a crate's API ("IR
  JSON").
- When used with `--show-coverage`, it prints the doc coverage as JSON,
  instead of an ASCII table ("Coverage JSON").

These two cases need to be handled entirely differently. There's no
overlapping code, they just are called the same way.

By making these separate variants, we don't need to check the
`show_coverage` variable each time we check `is_json`, which makes it
harder to write a bug that checks for IR JSON, and accidentally happens in
coverage JSON too.

Also, as a driveby, improves some instability error messages, and cleans
up their tests, and adds other related tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-run-make Area: port run-make Makefiles to rmake.rs A-rustdoc-json Area: Rustdoc JSON backend S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants