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::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_hir as hir;
|
||||||
use rustc_lint::builtin::MISSING_DOCS;
|
use rustc_lint::builtin::MISSING_DOCS;
|
||||||
use rustc_middle::lint::LintLevelSource;
|
use rustc_middle::lint::LintLevelSource;
|
||||||
|
use rustc_middle::ty::DefIdTree;
|
||||||
use rustc_session::lint;
|
use rustc_session::lint;
|
||||||
use rustc_span::FileName;
|
use rustc_span::FileName;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
@ -221,10 +223,42 @@ impl<'a, 'b> fold::DocFolder for CoverageCalculator<'a, 'b> {
|
|||||||
.hir()
|
.hir()
|
||||||
.local_def_id_to_hir_id(i.def_id.expect_def_id().expect_local());
|
.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);
|
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
|
// `missing_docs` is allow-by-default, so don't treat this as ignoring the item
|
||||||
// unless the user had an explicit `allow`
|
// unless the user had an explicit `allow`.
|
||||||
let should_have_docs =
|
//
|
||||||
level != lint::Level::Allow || matches!(source, LintLevelSource::Default);
|
let should_have_docs = !should_be_ignored
|
||||||
|
&& (level != lint::Level::Allow || matches!(source, LintLevelSource::Default));
|
||||||
|
|
||||||
debug!("counting {:?} {:?} in {:?}", i.type_(), i.name, filename);
|
debug!("counting {:?} {:?} in {:?}", i.type_(), i.name, filename);
|
||||||
self.items.entry(filename).or_default().count_item(
|
self.items.entry(filename).or_default().count_item(
|
||||||
has_docs,
|
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 |
|
| 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