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>
This commit is contained in:
Roman 2020-09-01 14:19:24 +02:00 committed by Guillaume Gomez
parent 0e022fc2b8
commit 02e6b861eb
3 changed files with 57 additions and 2 deletions

View file

@ -5,7 +5,7 @@ use crate::fold::{self, DocFolder};
use crate::html::markdown::{find_testable_code, ErrorCodes}; use crate::html::markdown::{find_testable_code, ErrorCodes};
use crate::passes::doc_test_lints::{should_have_doc_example, Tests}; use crate::passes::doc_test_lints::{should_have_doc_example, Tests};
use crate::passes::Pass; use crate::passes::Pass;
use rustc_span::symbol::sym; use rustc_span::symbol::{sym, Ident};
use rustc_span::FileName; use rustc_span::FileName;
use serde::Serialize; use serde::Serialize;
@ -41,8 +41,11 @@ impl ItemCount {
has_docs: bool, has_docs: bool,
has_doc_example: bool, has_doc_example: bool,
should_have_doc_examples: 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 { if has_docs {
self.with_docs += 1; self.with_docs += 1;
@ -229,6 +232,15 @@ impl fold::DocFolder for CoverageCalculator {
} }
_ => { _ => {
let has_docs = !i.attrs.doc_strings.is_empty(); 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 }; let mut tests = Tests { found_tests: 0 };
find_testable_code( find_testable_code(
@ -250,7 +262,12 @@ impl fold::DocFolder for CoverageCalculator {
has_docs, has_docs,
has_doc_example, has_doc_example,
should_have_doc_example(&i.inner), should_have_doc_example(&i.inner),
should_have_docs,
); );
if !should_have_docs {
return Some(i);
}
} }
} }

View file

@ -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,
}

View file

@ -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% |
+-------------------------------------+------------+------------+------------+------------+