diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-05-08 17:03:10 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-08 17:03:10 +0200 |
| commit | 5347652fdf6fb02c8defa245ba487df05274ef6c (patch) | |
| tree | 7dff11dffacbd6390ed39ea78e1db661f370ca92 /src | |
| parent | 9fce3dc685f66ccaa9d3b25c7ca9983c60d7b263 (diff) | |
| parent | 6d6f67a98cbc399ac14a3f9a8ddf6ed30bb7fb83 (diff) | |
| download | rust-5347652fdf6fb02c8defa245ba487df05274ef6c.tar.gz rust-5347652fdf6fb02c8defa245ba487df05274ef6c.zip | |
Rollup merge of #124864 - notriddle:notriddle/feature-flags-are-not-stability-markers, r=fmease
rustdoc: use stability, instead of features, to decide what to show Fixes #124635 To decide if internal items should be inlined in a doc page, check if the crate is itself internal, rather than if it has the rustc_private feature flag. The standard library uses internal items, but is not itself internal and should not show internal items on its docs pages.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/clean/inline.rs | 47 | ||||
| -rw-r--r-- | src/librustdoc/config.rs | 4 |
2 files changed, 19 insertions, 32 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 4d506edc47b..7d8b6f34cbb 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -14,6 +14,7 @@ use rustc_hir::Mutability; use rustc_metadata::creader::{CStore, LoadedMacro}; use rustc_middle::ty::fast_reject::SimplifiedType; use rustc_middle::ty::{self, TyCtxt}; +use rustc_span::def_id::LOCAL_CRATE; use rustc_span::hygiene::MacroKind; use rustc_span::symbol::{kw, sym, Symbol}; @@ -444,24 +445,24 @@ pub(crate) fn build_impl( let associated_trait = tcx.impl_trait_ref(did).map(ty::EarlyBinder::skip_binder); + // Do not inline compiler-internal items unless we're a compiler-internal crate. + let is_compiler_internal = |did| { + tcx.lookup_stability(did) + .is_some_and(|stab| stab.is_unstable() && stab.feature == sym::rustc_private) + }; + let document_compiler_internal = is_compiler_internal(LOCAL_CRATE.as_def_id()); + let is_directly_public = |cx: &mut DocContext<'_>, did| { + cx.cache.effective_visibilities.is_directly_public(tcx, did) + && (document_compiler_internal || !is_compiler_internal(did)) + }; + // Only inline impl if the implemented trait is // reachable in rustdoc generated documentation if !did.is_local() && let Some(traitref) = associated_trait + && !is_directly_public(cx, traitref.def_id) { - let did = traitref.def_id; - if !cx.cache.effective_visibilities.is_directly_public(tcx, did) { - return; - } - - if !tcx.features().rustc_private && !cx.render_options.force_unstable_if_unmarked { - if let Some(stab) = tcx.lookup_stability(did) - && stab.is_unstable() - && stab.feature == sym::rustc_private - { - return; - } - } + return; } let impl_item = match did.as_local() { @@ -484,21 +485,11 @@ pub(crate) fn build_impl( // Only inline impl if the implementing type is // reachable in rustdoc generated documentation - if !did.is_local() { - if let Some(did) = for_.def_id(&cx.cache) { - if !cx.cache.effective_visibilities.is_directly_public(tcx, did) { - return; - } - - if !tcx.features().rustc_private && !cx.render_options.force_unstable_if_unmarked { - if let Some(stab) = tcx.lookup_stability(did) - && stab.is_unstable() - && stab.feature == sym::rustc_private - { - return; - } - } - } + if !did.is_local() + && let Some(did) = for_.def_id(&cx.cache) + && !is_directly_public(cx, did) + { + return; } let document_hidden = cx.render_options.document_hidden; diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 465f969435d..d4468fecba4 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -285,8 +285,6 @@ pub(crate) struct RenderOptions { pub(crate) no_emit_shared: bool, /// If `true`, HTML source code pages won't be generated. pub(crate) html_no_source: bool, - /// Whether `-Zforce-unstable-if-unmarked` unstable option is set - pub(crate) force_unstable_if_unmarked: bool, } #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -353,7 +351,6 @@ impl Options { let codegen_options = CodegenOptions::build(early_dcx, matches); let unstable_opts = UnstableOptions::build(early_dcx, matches); - let force_unstable_if_unmarked = unstable_opts.force_unstable_if_unmarked; let dcx = new_dcx(error_format, None, diagnostic_width, &unstable_opts); @@ -790,7 +787,6 @@ impl Options { call_locations, no_emit_shared: false, html_no_source, - force_unstable_if_unmarked, }; Some((options, render_options)) } |
