diff options
| author | bors <bors@rust-lang.org> | 2021-09-13 09:41:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-09-13 09:41:22 +0000 |
| commit | 1cd17addad57e2aaf5dc6d3febe042ebb733bee3 (patch) | |
| tree | 77e6aefad6b43ffd1f6a1a19a0c35bbc847a55c3 /src | |
| parent | 61a102914335caebb8c67079bc351822a12862ee (diff) | |
| parent | c86c63436ac074d824d76e151c468554191e168e (diff) | |
| download | rust-1cd17addad57e2aaf5dc6d3febe042ebb733bee3.tar.gz rust-1cd17addad57e2aaf5dc6d3febe042ebb733bee3.zip | |
Auto merge of #88745 - hnj2:allow-trait-impl-missing-code, r=GuillaumeGomez
Allow missing code examples in trait impls. Excludes Trait implementations from the items that need to have doc code examples when using the `rustdoc::missing_doc_code_examples` lint. For details see #88741 fixes #88741 r? `@jyn514`
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/passes/doc_test_lints.rs | 20 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/lint-missing-doc-code-example.rs | 7 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/librustdoc/passes/doc_test_lints.rs b/src/librustdoc/passes/doc_test_lints.rs index 03bc2b52f17..1b5ec1b08fa 100644 --- a/src/librustdoc/passes/doc_test_lints.rs +++ b/src/librustdoc/passes/doc_test_lints.rs @@ -10,6 +10,7 @@ use crate::core::DocContext; use crate::fold::DocFolder; use crate::html::markdown::{find_testable_code, ErrorCodes, Ignore, LangString}; use crate::visit_ast::inherits_doc_hidden; +use rustc_hir as hir; use rustc_middle::lint::LintLevelSource; use rustc_session::lint; use rustc_span::symbol::sym; @@ -67,13 +68,32 @@ crate fn should_have_doc_example(cx: &DocContext<'_>, item: &clean::Item) -> boo | clean::ImportItem(_) | clean::PrimitiveItem(_) | clean::KeywordItem(_) + // check for trait impl + | clean::ImplItem(clean::Impl { trait_: Some(_), .. }) ) { return false; } + // The `expect_def_id()` should be okay because `local_def_id_to_hir_id` // would presumably panic if a fake `DefIndex` were passed. let hir_id = cx.tcx.hir().local_def_id_to_hir_id(item.def_id.expect_def_id().expect_local()); + + // check if parent is trait impl + if let Some(parent_hir_id) = cx.tcx.hir().find_parent_node(hir_id) { + if let Some(parent_node) = cx.tcx.hir().find(parent_hir_id) { + if matches!( + parent_node, + hir::Node::Item(hir::Item { + kind: hir::ItemKind::Impl(hir::Impl { of_trait: Some(_), .. }), + .. + }) + ) { + return false; + } + } + } + if cx.tcx.hir().attrs(hir_id).lists(sym::doc).has_word(sym::hidden) || inherits_doc_hidden(cx.tcx, hir_id) { diff --git a/src/test/rustdoc-ui/lint-missing-doc-code-example.rs b/src/test/rustdoc-ui/lint-missing-doc-code-example.rs index 41e88477926..7dd2ebfedbb 100644 --- a/src/test/rustdoc-ui/lint-missing-doc-code-example.rs +++ b/src/test/rustdoc-ui/lint-missing-doc-code-example.rs @@ -70,6 +70,13 @@ pub union Union { b: f32, } +// no code example and it's fine! +impl Clone for Struct { + fn clone(&self) -> Self { + Self { field: self.field } + } +} + #[doc(hidden)] pub mod foo { |
