From 7bfef4b2befee954bc002724c8331612fed3d47f Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 16 Sep 2023 14:41:56 -0600 Subject: [PATCH] Work around doc breakage in generate-link-to-definition mode --- src/ident.rs | 11 ++++++----- src/lifetime.rs | 11 ++++++----- src/lit.rs | 33 ++++++++++++++++++--------------- src/macros.rs | 17 +++++++++++++++++ 4 files changed, 47 insertions(+), 25 deletions(-) diff --git a/src/ident.rs b/src/ident.rs index 4abb7dd34e..d0f4ba08db 100644 --- a/src/ident.rs +++ b/src/ident.rs @@ -4,11 +4,12 @@ use crate::lookahead; pub use proc_macro2::Ident; #[cfg(feature = "parsing")] -#[cfg(not(doc))] // Rustdoc bug: does not respect the doc(hidden) -#[doc(hidden)] -#[allow(non_snake_case)] -pub fn Ident(marker: lookahead::TokenMarker) -> Ident { - match marker {} +pub_if_not_doc! { + #[doc(hidden)] + #[allow(non_snake_case)] + pub fn Ident(marker: lookahead::TokenMarker) -> Ident { + match marker {} + } } macro_rules! ident_from_token { diff --git a/src/lifetime.rs b/src/lifetime.rs index 98f6fa4c50..29f4cfdb3b 100644 --- a/src/lifetime.rs +++ b/src/lifetime.rs @@ -113,11 +113,12 @@ impl Hash for Lifetime { } #[cfg(feature = "parsing")] -#[cfg(not(doc))] // Rustdoc bug: does not respect the doc(hidden) -#[doc(hidden)] -#[allow(non_snake_case)] -pub fn Lifetime(marker: lookahead::TokenMarker) -> Lifetime { - match marker {} +pub_if_not_doc! { + #[doc(hidden)] + #[allow(non_snake_case)] + pub fn Lifetime(marker: lookahead::TokenMarker) -> Lifetime { + match marker {} + } } #[cfg(feature = "parsing")] diff --git a/src/lit.rs b/src/lit.rs index 5b6438eafd..f7426ce818 100644 --- a/src/lit.rs +++ b/src/lit.rs @@ -758,11 +758,12 @@ macro_rules! lit_extra_traits { } #[cfg(feature = "parsing")] - #[cfg(not(doc))] // Rustdoc bug: does not respect the doc(hidden) - #[doc(hidden)] - #[allow(non_snake_case)] - pub fn $ty(marker: lookahead::TokenMarker) -> $ty { - match marker {} + pub_if_not_doc! { + #[doc(hidden)] + #[allow(non_snake_case)] + pub fn $ty(marker: lookahead::TokenMarker) -> $ty { + match marker {} + } } }; } @@ -775,11 +776,12 @@ lit_extra_traits!(LitInt); lit_extra_traits!(LitFloat); #[cfg(feature = "parsing")] -#[cfg(not(doc))] // Rustdoc bug: does not respect the doc(hidden) -#[doc(hidden)] -#[allow(non_snake_case)] -pub fn LitBool(marker: lookahead::TokenMarker) -> LitBool { - match marker {} +pub_if_not_doc! { + #[doc(hidden)] + #[allow(non_snake_case)] + pub fn LitBool(marker: lookahead::TokenMarker) -> LitBool { + match marker {} + } } ast_enum! { @@ -796,11 +798,12 @@ ast_enum! { } #[cfg(feature = "parsing")] -#[cfg(not(doc))] // Rustdoc bug: does not respect the doc(hidden) -#[doc(hidden)] -#[allow(non_snake_case)] -pub fn Lit(marker: lookahead::TokenMarker) -> Lit { - match marker {} +pub_if_not_doc! { + #[doc(hidden)] + #[allow(non_snake_case)] + pub fn Lit(marker: lookahead::TokenMarker) -> Lit { + match marker {} + } } #[cfg(feature = "parsing")] diff --git a/src/macros.rs b/src/macros.rs index 953841b6f5..06ceb542da 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -166,3 +166,20 @@ macro_rules! check_keyword_matches { (enum enum) => {}; (pub pub) => {}; } + +// Rustdoc bug: does not respect the doc(hidden) on some items. +#[cfg(all(doc, feature = "parsing"))] +macro_rules! pub_if_not_doc { + ($(#[$m:meta])* pub $($item:tt)*) => { + $(#[$m])* + pub(crate) $($item)* + }; +} + +#[cfg(all(not(doc), feature = "parsing"))] +macro_rules! pub_if_not_doc { + ($(#[$m:meta])* pub $($item:tt)*) => { + $(#[$m])* + pub $($item)* + }; +}