From 02e6b861eb04737915636a63eec00ef126f59dd5 Mon Sep 17 00:00:00 2001 From: Roman <romaaan.git@gmail.com> Date: Tue, 1 Sep 2020 14:19:24 +0200 Subject: [PATCH] rustdoc: skip allow missing doc in cover. report During the document coverage reporting with ```bash rustdoc something.rs -Z unstable-options --show-coverage ``` the coverage report also includes parts of the code that are marked with `#[allow(missing_docs)]`, which outputs lower numbers in the coverage report even though these parts should be ignored for the calculation. Co-authored-by: Joshua Nelson <joshua@yottadb.com> --- .../passes/calculate_doc_coverage.rs | 21 +++++++++++-- .../rustdoc-ui/coverage/allow_missing_docs.rs | 31 +++++++++++++++++++ .../coverage/allow_missing_docs.stdout | 7 +++++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/test/rustdoc-ui/coverage/allow_missing_docs.rs create mode 100644 src/test/rustdoc-ui/coverage/allow_missing_docs.stdout diff --git a/src/librustdoc/passes/calculate_doc_coverage.rs b/src/librustdoc/passes/calculate_doc_coverage.rs index 4bca3996eb4..30dd8def70e 100644 --- a/src/librustdoc/passes/calculate_doc_coverage.rs +++ b/src/librustdoc/passes/calculate_doc_coverage.rs @@ -5,7 +5,7 @@ use crate::fold::{self, DocFolder}; use crate::html::markdown::{find_testable_code, ErrorCodes}; use crate::passes::doc_test_lints::{should_have_doc_example, Tests}; use crate::passes::Pass; -use rustc_span::symbol::sym; +use rustc_span::symbol::{sym, Ident}; use rustc_span::FileName; use serde::Serialize; @@ -41,8 +41,11 @@ impl ItemCount { has_docs: bool, has_doc_example: bool, should_have_doc_examples: bool, + should_have_docs: bool, ) { - self.total += 1; + if has_docs || should_have_docs { + self.total += 1; + } if has_docs { self.with_docs += 1; @@ -229,6 +232,15 @@ impl fold::DocFolder for CoverageCalculator { } _ => { let has_docs = !i.attrs.doc_strings.is_empty(); + let should_have_docs = !i.attrs.other_attrs.iter().any(|a| { + a.has_name(sym::allow) + && a.meta_item_list().iter().any(|meta_list_item| { + meta_list_item.iter().any(|li| match li.ident() { + Some(ident) => ident == Ident::from_str("missing_docs"), + _ => false, + }) + }) + }); let mut tests = Tests { found_tests: 0 }; find_testable_code( @@ -250,7 +262,12 @@ impl fold::DocFolder for CoverageCalculator { has_docs, has_doc_example, should_have_doc_example(&i.inner), + should_have_docs, ); + + if !should_have_docs { + return Some(i); + } } } diff --git a/src/test/rustdoc-ui/coverage/allow_missing_docs.rs b/src/test/rustdoc-ui/coverage/allow_missing_docs.rs new file mode 100644 index 00000000000..8c076761ede --- /dev/null +++ b/src/test/rustdoc-ui/coverage/allow_missing_docs.rs @@ -0,0 +1,31 @@ +// compile-flags:-Z unstable-options --show-coverage +// check-pass + +//! Make sure to have some docs on your crate root + +#[allow(missing_docs)] +pub mod mod_foo { + pub struct Bar; +} + +/// This is a struct with a `#[allow(missing_docs)]` +pub struct AllowTheMissingDocs { + #[allow(missing_docs)] + pub empty_str: String, + + /// This has + #[allow(missing_docs)] + /// but also has documentation comments + pub hello: usize, + + /// The doc id just to create a boilerplate comment + pub doc_id: Vec<u8>, +} + +/// A function that has a documentation +pub fn this_is_func() {} + +#[allow(missing_docs)] +pub struct DemoStruct { + something: usize, +} diff --git a/src/test/rustdoc-ui/coverage/allow_missing_docs.stdout b/src/test/rustdoc-ui/coverage/allow_missing_docs.stdout new file mode 100644 index 00000000000..ea5380e3204 --- /dev/null +++ b/src/test/rustdoc-ui/coverage/allow_missing_docs.stdout @@ -0,0 +1,7 @@ ++-------------------------------------+------------+------------+------------+------------+ +| File | Documented | Percentage | Examples | Percentage | ++-------------------------------------+------------+------------+------------+------------+ +| ...i/coverage/allow_missing_docs.rs | 5 | 100.0% | 0 | 0.0% | ++-------------------------------------+------------+------------+------------+------------+ +| Total | 5 | 100.0% | 0 | 0.0% | ++-------------------------------------+------------+------------+------------+------------+