Rollup merge of #88720 - GuillaumeGomez:rustdoc-coverage-fields-count, r=Manishearth
Rustdoc coverage fields count Follow-up of #88688. Instead of requiring enum tuple variant fields and tuple struct fields to be documented, we count them if they are documented, otherwise we don't include them in the count. r? `@Manishearth`
This commit is contained in:
commit
e0e3d85ec3
@ -4,8 +4,10 @@ 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_hir as hir;
|
||||
use rustc_lint::builtin::MISSING_DOCS;
|
||||
use rustc_middle::lint::LintLevelSource;
|
||||
use rustc_middle::ty::DefIdTree;
|
||||
use rustc_session::lint;
|
||||
use rustc_span::FileName;
|
||||
use serde::Serialize;
|
||||
@ -221,10 +223,42 @@ impl<'a, 'b> fold::DocFolder for CoverageCalculator<'a, 'b> {
|
||||
.hir()
|
||||
.local_def_id_to_hir_id(i.def_id.expect_def_id().expect_local());
|
||||
let (level, source) = self.ctx.tcx.lint_level_at_node(MISSING_DOCS, hir_id);
|
||||
|
||||
// In case we have:
|
||||
//
|
||||
// ```
|
||||
// enum Foo { Bar(u32) }
|
||||
// // or:
|
||||
// struct Bar(u32);
|
||||
// ```
|
||||
//
|
||||
// there is no need to require documentation on the fields of tuple variants and
|
||||
// tuple structs.
|
||||
let should_be_ignored = i
|
||||
.def_id
|
||||
.as_def_id()
|
||||
.and_then(|def_id| self.ctx.tcx.parent(def_id))
|
||||
.and_then(|def_id| self.ctx.tcx.hir().get_if_local(def_id))
|
||||
.map(|node| {
|
||||
matches!(
|
||||
node,
|
||||
hir::Node::Variant(hir::Variant {
|
||||
data: hir::VariantData::Tuple(_, _),
|
||||
..
|
||||
}) | hir::Node::Item(hir::Item {
|
||||
kind: hir::ItemKind::Struct(hir::VariantData::Tuple(_, _), _),
|
||||
..
|
||||
})
|
||||
)
|
||||
})
|
||||
.unwrap_or(false);
|
||||
|
||||
// `missing_docs` is allow-by-default, so don't treat this as ignoring the item
|
||||
// unless the user had an explicit `allow`
|
||||
let should_have_docs =
|
||||
level != lint::Level::Allow || matches!(source, LintLevelSource::Default);
|
||||
// unless the user had an explicit `allow`.
|
||||
//
|
||||
let should_have_docs = !should_be_ignored
|
||||
&& (level != lint::Level::Allow || matches!(source, LintLevelSource::Default));
|
||||
|
||||
debug!("counting {:?} {:?} in {:?}", i.type_(), i.name, filename);
|
||||
self.items.entry(filename).or_default().count_item(
|
||||
has_docs,
|
||||
|
37
src/test/rustdoc-ui/coverage/enum-tuple-documented.rs
Normal file
37
src/test/rustdoc-ui/coverage/enum-tuple-documented.rs
Normal file
@ -0,0 +1,37 @@
|
||||
// compile-flags:-Z unstable-options --show-coverage
|
||||
// check-pass
|
||||
|
||||
// The point of this test is to ensure that the number of "documented" items
|
||||
// is higher than in `enum-tuple.rs`.
|
||||
|
||||
//! (remember the crate root is still a module)
|
||||
|
||||
/// so check out this enum here
|
||||
pub enum ThisEnum {
|
||||
/// VarOne.
|
||||
VarOne(
|
||||
/// hello!
|
||||
String,
|
||||
),
|
||||
/// Var Two.
|
||||
VarTwo(
|
||||
/// Hello
|
||||
String,
|
||||
/// Bis repetita.
|
||||
String,
|
||||
),
|
||||
}
|
||||
|
||||
/// Struct.
|
||||
pub struct ThisStruct(
|
||||
/// hello
|
||||
u32,
|
||||
);
|
||||
|
||||
/// Struct.
|
||||
pub struct ThisStruct2(
|
||||
/// hello
|
||||
u32,
|
||||
/// Bis repetita.
|
||||
u8,
|
||||
);
|
@ -0,0 +1,7 @@
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| File | Documented | Percentage | Examples | Percentage |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| ...overage/enum-tuple-documented.rs | 9 | 100.0% | 0 | 0.0% |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| Total | 9 | 100.0% | 0 | 0.0% |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
18
src/test/rustdoc-ui/coverage/enum-tuple.rs
Normal file
18
src/test/rustdoc-ui/coverage/enum-tuple.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// compile-flags:-Z unstable-options --show-coverage
|
||||
// check-pass
|
||||
|
||||
//! (remember the crate root is still a module)
|
||||
|
||||
/// so check out this enum here
|
||||
pub enum ThisEnum {
|
||||
/// No need to document the field if there is only one in a tuple variant!
|
||||
VarOne(String),
|
||||
/// But if there is more than one... still fine!
|
||||
VarTwo(String, String),
|
||||
}
|
||||
|
||||
/// Struct.
|
||||
pub struct ThisStruct(u32);
|
||||
|
||||
/// Struct.
|
||||
pub struct ThisStruct2(u32, u8);
|
7
src/test/rustdoc-ui/coverage/enum-tuple.stdout
Normal file
7
src/test/rustdoc-ui/coverage/enum-tuple.stdout
Normal file
@ -0,0 +1,7 @@
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| File | Documented | Percentage | Examples | Percentage |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| ...ustdoc-ui/coverage/enum-tuple.rs | 6 | 100.0% | 0 | 0.0% |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| Total | 6 | 100.0% | 0 | 0.0% |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
@ -1,7 +1,7 @@
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| File | Documented | Percentage | Examples | Percentage |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| ...est/rustdoc-ui/coverage/enums.rs | 6 | 66.7% | 0 | 0.0% |
|
||||
| ...est/rustdoc-ui/coverage/enums.rs | 6 | 75.0% | 0 | 0.0% |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
| Total | 6 | 66.7% | 0 | 0.0% |
|
||||
| Total | 6 | 75.0% | 0 | 0.0% |
|
||||
+-------------------------------------+------------+------------+------------+------------+
|
||||
|
Loading…
x
Reference in New Issue
Block a user