rustdoc: treat allowed_through_unstable_modules
as deprecation
This ensures `std::intrinsics::transmute` is deemphasized in the search engine and other UI, by cleaning it into a deprecation without propagating it through reexports when the parent module is stable.
This commit is contained in:
parent
6ca66598ad
commit
c7cb8224e2
5 changed files with 45 additions and 3 deletions
|
@ -400,7 +400,27 @@ impl Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn deprecation(&self, tcx: TyCtxt<'_>) -> Option<Deprecation> {
|
pub(crate) fn deprecation(&self, tcx: TyCtxt<'_>) -> Option<Deprecation> {
|
||||||
self.def_id().and_then(|did| tcx.lookup_deprecation(did))
|
self.def_id().and_then(|did| tcx.lookup_deprecation(did)).or_else(|| {
|
||||||
|
// `allowed_through_unstable_modules` is a bug-compatibility hack for old rustc
|
||||||
|
// versions; the paths that are exposed through it are "deprecated" because they
|
||||||
|
// were never supposed to work at all.
|
||||||
|
let stab = self.stability(tcx)?;
|
||||||
|
if let rustc_attr_parsing::StabilityLevel::Stable {
|
||||||
|
allowed_through_unstable_modules: true,
|
||||||
|
..
|
||||||
|
} = stab.level
|
||||||
|
{
|
||||||
|
Some(Deprecation {
|
||||||
|
// FIXME(#131676, #135003): when a note is added to this stability tag,
|
||||||
|
// translate it here
|
||||||
|
since: rustc_attr_parsing::DeprecatedSince::Unspecified,
|
||||||
|
note: None,
|
||||||
|
suggestion: None,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn inner_docs(&self, tcx: TyCtxt<'_>) -> bool {
|
pub(crate) fn inner_docs(&self, tcx: TyCtxt<'_>) -> bool {
|
||||||
|
|
|
@ -107,6 +107,15 @@ fn merge_stability(
|
||||||
|| parent_stab.stable_since().is_some_and(|parent_since| parent_since > own_since))
|
|| parent_stab.stable_since().is_some_and(|parent_since| parent_since > own_since))
|
||||||
{
|
{
|
||||||
parent_stability
|
parent_stability
|
||||||
|
} else if let Some(mut own_stab) = own_stability
|
||||||
|
&& let StabilityLevel::Stable { since, allowed_through_unstable_modules: true } =
|
||||||
|
own_stab.level
|
||||||
|
&& let Some(parent_stab) = parent_stability
|
||||||
|
&& parent_stab.is_stable()
|
||||||
|
{
|
||||||
|
// this property does not apply transitively through re-exports
|
||||||
|
own_stab.level = StabilityLevel::Stable { since, allowed_through_unstable_modules: false };
|
||||||
|
Some(own_stab)
|
||||||
} else {
|
} else {
|
||||||
own_stability
|
own_stability
|
||||||
}
|
}
|
||||||
|
|
11
tests/rustdoc-js-std/core-transmute.js
Normal file
11
tests/rustdoc-js-std/core-transmute.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
const FILTER_CRATE = "core";
|
||||||
|
const EXPECTED = [
|
||||||
|
{
|
||||||
|
'query': 'generic:T -> generic:U',
|
||||||
|
'others': [
|
||||||
|
{ 'path': 'core::intrinsics::simd', 'name': 'simd_as' },
|
||||||
|
{ 'path': 'core::intrinsics::simd', 'name': 'simd_cast' },
|
||||||
|
{ 'path': 'core::mem', 'name': 'transmute' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
|
@ -1,4 +1,5 @@
|
||||||
// should-fail
|
// should-fail
|
||||||
|
const FILTER_CRATE = "std";
|
||||||
const EXPECTED = [
|
const EXPECTED = [
|
||||||
{
|
{
|
||||||
// Keep this test case identical to `transmute`, except the
|
// Keep this test case identical to `transmute`, except the
|
||||||
|
@ -7,7 +8,7 @@ const EXPECTED = [
|
||||||
'others': [
|
'others': [
|
||||||
{ 'path': 'std::intrinsics::simd', 'name': 'simd_as' },
|
{ 'path': 'std::intrinsics::simd', 'name': 'simd_as' },
|
||||||
{ 'path': 'std::intrinsics::simd', 'name': 'simd_cast' },
|
{ 'path': 'std::intrinsics::simd', 'name': 'simd_cast' },
|
||||||
{ 'path': 'std::intrinsics', 'name': 'transmute' },
|
{ 'path': 'std::mem', 'name': 'transmute' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
const FILTER_CRATE = "std";
|
||||||
const EXPECTED = [
|
const EXPECTED = [
|
||||||
{
|
{
|
||||||
// Keep this test case identical to `transmute-fail`, except the
|
// Keep this test case identical to `transmute-fail`, except the
|
||||||
|
@ -6,7 +7,7 @@ const EXPECTED = [
|
||||||
'others': [
|
'others': [
|
||||||
{ 'path': 'std::intrinsics::simd', 'name': 'simd_as' },
|
{ 'path': 'std::intrinsics::simd', 'name': 'simd_as' },
|
||||||
{ 'path': 'std::intrinsics::simd', 'name': 'simd_cast' },
|
{ 'path': 'std::intrinsics::simd', 'name': 'simd_cast' },
|
||||||
{ 'path': 'std::intrinsics', 'name': 'transmute' },
|
{ 'path': 'std::mem', 'name': 'transmute' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue