From 2bcbb25cb5463873591e779cbace39d9aef66a96 Mon Sep 17 00:00:00 2001 From: inquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com> Date: Wed, 7 Jul 2021 17:42:03 -0700 Subject: [PATCH 1/3] Remove `missing_docs` lint on private 2.0 macros --- compiler/rustc_lint/src/builtin.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/compiler/rustc_lint/src/builtin.rs b/compiler/rustc_lint/src/builtin.rs index b303f55cf772b..24d9e8fc23962 100644 --- a/compiler/rustc_lint/src/builtin.rs +++ b/compiler/rustc_lint/src/builtin.rs @@ -571,6 +571,11 @@ impl<'tcx> LateLintPass<'tcx> for MissingDoc { self.check_missing_docs_attrs(cx, hir::CRATE_HIR_ID, krate.item.inner, "the", "crate"); for macro_def in krate.exported_macros { + // Non exported MBE 2.0 macros should be skipped + if !macro_def.ast.macro_rules && !cx.access_levels.is_exported(macro_def.hir_id()) { + continue; + } + let attrs = cx.tcx.hir().attrs(macro_def.hir_id()); let has_doc = attrs.iter().any(|a| has_doc(cx.sess(), a)); if !has_doc { From 88fd46e129ca01c92c2c8273f03202ed4bc3876f Mon Sep 17 00:00:00 2001 From: inquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com> Date: Wed, 7 Jul 2021 17:55:09 -0700 Subject: [PATCH 2/3] Add regression test --- src/test/ui/lint/missing-doc-private-macro.rs | 43 +++++++++++++++++++ .../ui/lint/missing-doc-private-macro.stderr | 20 +++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/test/ui/lint/missing-doc-private-macro.rs create mode 100644 src/test/ui/lint/missing-doc-private-macro.stderr diff --git a/src/test/ui/lint/missing-doc-private-macro.rs b/src/test/ui/lint/missing-doc-private-macro.rs new file mode 100644 index 0000000000000..8d1d5c568803b --- /dev/null +++ b/src/test/ui/lint/missing-doc-private-macro.rs @@ -0,0 +1,43 @@ +// Checks that undocumented private macros will not generate `missing_docs` +// lints, but public ones will. +// +// This is a regression test for issue #57569 +#![deny(missing_docs)] +#![feature(decl_macro)] +//! Empty documentation. + +macro new_style_private_macro { + () => () +} + +pub(crate) macro new_style_crate_macro { + () => () +} + +macro_rules! old_style_private_macro { + () => () +} + +mod submodule { + pub macro new_style_macro_in_private_module { + () => () + } + + macro_rules! old_style_mod_private_macro { + () => () + } + + #[macro_export] + macro_rules! exported_to_top_level { + //~^ ERROR missing documentation for macro + () => () + } +} + +pub macro top_level_pub_macro { + //~^ ERROR missing documentation for macro + () => () +} + +/// Empty documentation. +pub fn main() {} diff --git a/src/test/ui/lint/missing-doc-private-macro.stderr b/src/test/ui/lint/missing-doc-private-macro.stderr new file mode 100644 index 0000000000000..a5d39faf40562 --- /dev/null +++ b/src/test/ui/lint/missing-doc-private-macro.stderr @@ -0,0 +1,20 @@ +error: missing documentation for macro + --> $DIR/missing-doc-private-macro.rs:31:5 + | +LL | macro_rules! exported_to_top_level { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: the lint level is defined here + --> $DIR/missing-doc-private-macro.rs:5:9 + | +LL | #![deny(missing_docs)] + | ^^^^^^^^^^^^ + +error: missing documentation for macro + --> $DIR/missing-doc-private-macro.rs:37:1 + | +LL | pub macro top_level_pub_macro { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + From b49936c0bfe5d6748765c4f2898f765ff4a53a05 Mon Sep 17 00:00:00 2001 From: inquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com> Date: Thu, 8 Jul 2021 22:39:31 -0700 Subject: [PATCH 3/3] Improve handing of `missing_docs` for macros --- compiler/rustc_lint/src/builtin.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_lint/src/builtin.rs b/compiler/rustc_lint/src/builtin.rs index 24d9e8fc23962..92e627bce0293 100644 --- a/compiler/rustc_lint/src/builtin.rs +++ b/compiler/rustc_lint/src/builtin.rs @@ -571,8 +571,9 @@ impl<'tcx> LateLintPass<'tcx> for MissingDoc { self.check_missing_docs_attrs(cx, hir::CRATE_HIR_ID, krate.item.inner, "the", "crate"); for macro_def in krate.exported_macros { - // Non exported MBE 2.0 macros should be skipped - if !macro_def.ast.macro_rules && !cx.access_levels.is_exported(macro_def.hir_id()) { + // Non exported macros should be skipped, since `missing_docs` only + // applies to externally visible items. + if !cx.access_levels.is_exported(macro_def.hir_id()) { continue; }