Rollup merge of #132596 - GuillaumeGomez:show-coverage, r=notriddle
[rustdoc] Fix `--show-coverage` when JSON output format is used I realized while looking on the docs.rs page of the `sysinfo` crate that the coverage numbers displayed were wrong: ![image](https://github.com/user-attachments/assets/264b2e25-6271-4ed1-8b35-e8bd4fd475c6) I realized that it was because `--show-coverage --output-format=json` was relying on the same logic as the JSON output for the doc generation whereas it should not. I fixed it by changing the API for querying `is_json` a bit. The underlying issue is that JSON output format is stripping reexports of items from private modules. r? ``@notriddle``
This commit is contained in:
commit
b3fc9e6d6f
@ -2907,7 +2907,7 @@ fn clean_extern_crate<'tcx>(
|
|||||||
None => false,
|
None => false,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
&& !cx.output_format.is_json();
|
&& !cx.is_json_output();
|
||||||
|
|
||||||
let krate_owner_def_id = krate.owner_id.def_id;
|
let krate_owner_def_id = krate.owner_id.def_id;
|
||||||
if please_inline {
|
if please_inline {
|
||||||
@ -3000,7 +3000,7 @@ fn clean_use_statement_inner<'tcx>(
|
|||||||
// forcefully don't inline if this is not public or if the
|
// forcefully don't inline if this is not public or if the
|
||||||
// #[doc(no_inline)] attribute is present.
|
// #[doc(no_inline)] attribute is present.
|
||||||
// Don't inline doc(hidden) imports so they can be stripped at a later stage.
|
// Don't inline doc(hidden) imports so they can be stripped at a later stage.
|
||||||
let mut denied = cx.output_format.is_json()
|
let mut denied = cx.is_json_output()
|
||||||
|| !(visibility.is_public()
|
|| !(visibility.is_public()
|
||||||
|| (cx.render_options.document_private && is_visible_from_parent_mod))
|
|| (cx.render_options.document_private && is_visible_from_parent_mod))
|
||||||
|| pub_underscore
|
|| pub_underscore
|
||||||
|
@ -121,6 +121,13 @@ pub(crate) fn as_local_hir_id(tcx: TyCtxt<'_>, item_id: ItemId) -> Option<HirId>
|
|||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns `true` if the JSON output format is enabled for generating the crate content.
|
||||||
|
///
|
||||||
|
/// If another option like `--show-coverage` is enabled, it will return `false`.
|
||||||
|
pub(crate) fn is_json_output(&self) -> bool {
|
||||||
|
self.output_format.is_json() && !self.show_coverage
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new `DiagCtxt` that can be used to emit warnings and errors.
|
/// Creates a new `DiagCtxt` that can be used to emit warnings and errors.
|
||||||
|
@ -132,6 +132,7 @@ fn to_json(&self) -> String {
|
|||||||
|
|
||||||
fn print_results(&self) {
|
fn print_results(&self) {
|
||||||
let output_format = self.ctx.output_format;
|
let output_format = self.ctx.output_format;
|
||||||
|
// In this case we want to ensure that the `OutputFormat` is JSON and NOT the `DocContext`.
|
||||||
if output_format.is_json() {
|
if output_format.is_json() {
|
||||||
println!("{}", self.to_json());
|
println!("{}", self.to_json());
|
||||||
return;
|
return;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
/// Strip items marked `#[doc(hidden)]`
|
/// Strip items marked `#[doc(hidden)]`
|
||||||
pub(crate) fn strip_hidden(krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
|
pub(crate) fn strip_hidden(krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
|
||||||
let mut retained = ItemIdSet::default();
|
let mut retained = ItemIdSet::default();
|
||||||
let is_json_output = cx.output_format.is_json() && !cx.show_coverage;
|
let is_json_output = cx.is_json_output();
|
||||||
|
|
||||||
// strip all #[doc(hidden)] items
|
// strip all #[doc(hidden)] items
|
||||||
let krate = {
|
let krate = {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub(crate) fn strip_priv_imports(krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
|
pub(crate) fn strip_priv_imports(krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
|
||||||
let is_json_output = cx.output_format.is_json() && !cx.show_coverage;
|
let is_json_output = cx.is_json_output();
|
||||||
ImportStripper {
|
ImportStripper {
|
||||||
tcx: cx.tcx,
|
tcx: cx.tcx,
|
||||||
is_json_output,
|
is_json_output,
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
pub(crate) fn strip_private(mut krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
|
pub(crate) fn strip_private(mut krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
|
||||||
// This stripper collects all *retained* nodes.
|
// This stripper collects all *retained* nodes.
|
||||||
let mut retained = ItemIdSet::default();
|
let mut retained = ItemIdSet::default();
|
||||||
let is_json_output = cx.output_format.is_json() && !cx.show_coverage;
|
let is_json_output = cx.is_json_output();
|
||||||
|
|
||||||
// strip all private items
|
// strip all private items
|
||||||
{
|
{
|
||||||
|
@ -235,7 +235,7 @@ fn maybe_inline_local(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.cx.output_format.is_json() {
|
if self.cx.is_json_output() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
tests/rustdoc-ui/show-coverage-json.rs
Normal file
13
tests/rustdoc-ui/show-coverage-json.rs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
//@ compile-flags: -Z unstable-options --show-coverage --output-format=json
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
mod bar {
|
||||||
|
/// a
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// let x = 0;
|
||||||
|
/// ```
|
||||||
|
pub struct Foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub use bar::Foo;
|
1
tests/rustdoc-ui/show-coverage-json.stdout
Normal file
1
tests/rustdoc-ui/show-coverage-json.stdout
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"$DIR/show-coverage-json.rs":{"total":2,"with_docs":1,"total_examples":2,"with_examples":1}}
|
13
tests/rustdoc-ui/show-coverage.rs
Normal file
13
tests/rustdoc-ui/show-coverage.rs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
//@ compile-flags: -Z unstable-options --show-coverage
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
mod bar {
|
||||||
|
/// a
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// let x = 0;
|
||||||
|
/// ```
|
||||||
|
pub struct Foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub use bar::Foo;
|
7
tests/rustdoc-ui/show-coverage.stdout
Normal file
7
tests/rustdoc-ui/show-coverage.stdout
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
+-------------------------------------+------------+------------+------------+------------+
|
||||||
|
| File | Documented | Percentage | Examples | Percentage |
|
||||||
|
+-------------------------------------+------------+------------+------------+------------+
|
||||||
|
| ...ests/rustdoc-ui/show-coverage.rs | 1 | 50.0% | 1 | 50.0% |
|
||||||
|
+-------------------------------------+------------+------------+------------+------------+
|
||||||
|
| Total | 1 | 50.0% | 1 | 50.0% |
|
||||||
|
+-------------------------------------+------------+------------+------------+------------+
|
Loading…
Reference in New Issue
Block a user