about summary refs log tree commit diff
diff options
context:
space:
mode:
authory21 <30553356+y21@users.noreply.github.com>2024-10-20 23:42:28 +0200
committery21 <30553356+y21@users.noreply.github.com>2024-10-20 23:42:28 +0200
commitb3bf128e545213b8e101b9584acc84de9ece22d8 (patch)
treea468401eecf4c2bf194102571b3748372b0b691b
parent2f71ce665178b08b5bea3a3e8401c75e67d57e51 (diff)
downloadrust-b3bf128e545213b8e101b9584acc84de9ece22d8.tar.gz
rust-b3bf128e545213b8e101b9584acc84de9ece22d8.zip
don't lint nested items that don't have generated documentation in `missing_docs_in_private_items`
-rw-r--r--clippy_lints/src/missing_doc.rs16
-rw-r--r--tests/ui/missing_doc.rs5
-rw-r--r--tests/ui/missing_doc.stderr11
3 files changed, 31 insertions, 1 deletions
diff --git a/clippy_lints/src/missing_doc.rs b/clippy_lints/src/missing_doc.rs
index cff27681c95..1300c7d1062 100644
--- a/clippy_lints/src/missing_doc.rs
+++ b/clippy_lints/src/missing_doc.rs
@@ -12,6 +12,7 @@ use clippy_utils::is_from_proc_macro;
 use clippy_utils::source::SpanRangeExt;
 use rustc_ast::ast::{self, MetaItem, MetaItemKind};
 use rustc_hir as hir;
+use rustc_hir::def::DefKind;
 use rustc_hir::def_id::LocalDefId;
 use rustc_lint::{LateContext, LateLintPass, LintContext};
 use rustc_middle::ty::Visibility;
@@ -111,6 +112,21 @@ impl MissingDoc {
             return;
         }
 
+        if let Some(parent_def_id) = cx.tcx.opt_parent(def_id.to_def_id())
+            && let DefKind::AnonConst
+            | DefKind::AssocConst
+            | DefKind::AssocFn
+            | DefKind::Closure
+            | DefKind::Const
+            | DefKind::Fn
+            | DefKind::InlineConst
+            | DefKind::Static { .. }
+            | DefKind::SyntheticCoroutineBody = cx.tcx.def_kind(parent_def_id)
+        {
+            // Nested item has no generated documentation, so it doesn't need to be documented.
+            return;
+        }
+
         let has_doc = attrs
             .iter()
             .any(|a| a.doc_str().is_some() || Self::has_include(a.meta()))
diff --git a/tests/ui/missing_doc.rs b/tests/ui/missing_doc.rs
index a8fcbefcc0e..31bc4309582 100644
--- a/tests/ui/missing_doc.rs
+++ b/tests/ui/missing_doc.rs
@@ -119,6 +119,11 @@ with_span!(span pub const FOO2_PM: u32 = 0;);
 // Don't lint unnamed constants
 const _: () = ();
 
+fn issue13298() {
+    // Rustdoc doesn't generate documentation for items within other items like fns or consts
+    const MSG: &str = "Hello, world!";
+}
+
 // issue #12197
 // Undocumented field originated inside of spanned proc-macro attribute
 /// Some dox for struct.
diff --git a/tests/ui/missing_doc.stderr b/tests/ui/missing_doc.stderr
index ef0f96a5b71..133c76ac9d4 100644
--- a/tests/ui/missing_doc.stderr
+++ b/tests/ui/missing_doc.stderr
@@ -88,5 +88,14 @@ error: missing documentation for a function
 LL |         fn also_undocumented2() {}
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 13 previous errors
+error: missing documentation for a function
+  --> tests/ui/missing_doc.rs:122:1
+   |
+LL | / fn issue13298() {
+LL | |     // Rustdoc doesn't generate documentation for items within other items like fns or consts
+LL | |     const MSG: &str = "Hello, world!";
+LL | | }
+   | |_^
+
+error: aborting due to 14 previous errors