Skip to content

Commit 942369c

Browse files
authored
Rollup merge of rust-lang#77817 - jyn514:const-since, r=petrochenkov
Switch rustdoc from `clean::Stability` to `rustc_attr::Stability` This gives greater type safety and is less work to maintain on the rustdoc end. It also makes rustdoc more consistent with rustc. Noticed this while working on rust-lang#76998. - Remove `clean::Stability` in favor of `rustc_attr::Stability` - Remove `impl Clean for Stability`; it's no longer necessary r? @GuillaumeGomez cc @petrochenkov
2 parents 31c3f51 + 96b0446 commit 942369c

File tree

6 files changed

+62
-82
lines changed

6 files changed

+62
-82
lines changed

compiler/rustc_attr/src/builtin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ pub struct ConstStability {
154154
}
155155

156156
/// The available stability levels.
157-
#[derive(Encodable, Decodable, PartialEq, PartialOrd, Copy, Clone, Debug, Eq, Hash)]
157+
#[derive(Encodable, Decodable, PartialEq, Copy, Clone, Debug, Eq, Hash)]
158158
#[derive(HashStable_Generic)]
159159
pub enum StabilityLevel {
160160
// Reason for the current stability level and the relevant rust-lang issue

src/librustdoc/clean/inline.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ pub fn try_inline(
130130
attrs,
131131
inner,
132132
visibility: clean::Public,
133-
stability: cx.tcx.lookup_stability(did).clean(cx),
133+
stability: cx.tcx.lookup_stability(did).cloned(),
134134
deprecation: cx.tcx.lookup_deprecation(did).clean(cx),
135135
def_id: did,
136136
});
@@ -461,7 +461,7 @@ pub fn build_impl(
461461
name: None,
462462
attrs,
463463
visibility: clean::Inherited,
464-
stability: tcx.lookup_stability(did).clean(cx),
464+
stability: tcx.lookup_stability(did).cloned(),
465465
deprecation: tcx.lookup_deprecation(did).clean(cx),
466466
def_id: did,
467467
});

src/librustdoc/clean/mod.rs

+16-38
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use rustc_index::vec::{Idx, IndexVec};
1919
use rustc_infer::infer::region_constraints::{Constraint, RegionConstraintData};
2020
use rustc_middle::bug;
2121
use rustc_middle::middle::resolve_lifetime as rl;
22-
use rustc_middle::middle::stability;
2322
use rustc_middle::ty::fold::TypeFolder;
2423
use rustc_middle::ty::subst::{InternalSubsts, Subst};
2524
use rustc_middle::ty::{self, AdtKind, Lift, Ty, TyCtxt};
@@ -274,7 +273,7 @@ impl Clean<Item> for doctree::Module<'_> {
274273
attrs,
275274
source: span.clean(cx),
276275
visibility: self.vis.clean(cx),
277-
stability: cx.stability(self.id).clean(cx),
276+
stability: cx.stability(self.id),
278277
deprecation: cx.deprecation(self.id).clean(cx),
279278
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
280279
inner: ModuleItem(Module { is_crate: self.is_crate, items }),
@@ -914,7 +913,7 @@ impl Clean<Item> for doctree::Function<'_> {
914913
attrs: self.attrs.clean(cx),
915914
source: self.span.clean(cx),
916915
visibility: self.vis.clean(cx),
917-
stability: cx.stability(self.id).clean(cx),
916+
stability: cx.stability(self.id),
918917
deprecation: cx.deprecation(self.id).clean(cx),
919918
def_id: did.to_def_id(),
920919
inner: FunctionItem(Function {
@@ -1023,7 +1022,7 @@ impl Clean<Item> for doctree::Trait<'_> {
10231022
source: self.span.clean(cx),
10241023
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
10251024
visibility: self.vis.clean(cx),
1026-
stability: cx.stability(self.id).clean(cx),
1025+
stability: cx.stability(self.id),
10271026
deprecation: cx.deprecation(self.id).clean(cx),
10281027
inner: TraitItem(Trait {
10291028
auto: self.is_auto.clean(cx),
@@ -1047,7 +1046,7 @@ impl Clean<Item> for doctree::TraitAlias<'_> {
10471046
source: self.span.clean(cx),
10481047
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
10491048
visibility: self.vis.clean(cx),
1050-
stability: cx.stability(self.id).clean(cx),
1049+
stability: cx.stability(self.id),
10511050
deprecation: cx.deprecation(self.id).clean(cx),
10521051
inner: TraitAliasItem(TraitAlias {
10531052
generics: self.generics.clean(cx),
@@ -1832,7 +1831,7 @@ impl Clean<Item> for doctree::Struct<'_> {
18321831
source: self.span.clean(cx),
18331832
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
18341833
visibility: self.vis.clean(cx),
1835-
stability: cx.stability(self.id).clean(cx),
1834+
stability: cx.stability(self.id),
18361835
deprecation: cx.deprecation(self.id).clean(cx),
18371836
inner: StructItem(Struct {
18381837
struct_type: self.struct_type,
@@ -1852,7 +1851,7 @@ impl Clean<Item> for doctree::Union<'_> {
18521851
source: self.span.clean(cx),
18531852
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
18541853
visibility: self.vis.clean(cx),
1855-
stability: cx.stability(self.id).clean(cx),
1854+
stability: cx.stability(self.id),
18561855
deprecation: cx.deprecation(self.id).clean(cx),
18571856
inner: UnionItem(Union {
18581857
struct_type: self.struct_type,
@@ -1882,7 +1881,7 @@ impl Clean<Item> for doctree::Enum<'_> {
18821881
source: self.span.clean(cx),
18831882
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
18841883
visibility: self.vis.clean(cx),
1885-
stability: cx.stability(self.id).clean(cx),
1884+
stability: cx.stability(self.id),
18861885
deprecation: cx.deprecation(self.id).clean(cx),
18871886
inner: EnumItem(Enum {
18881887
variants: self.variants.iter().map(|v| v.clean(cx)).collect(),
@@ -1900,7 +1899,7 @@ impl Clean<Item> for doctree::Variant<'_> {
19001899
attrs: self.attrs.clean(cx),
19011900
source: self.span.clean(cx),
19021901
visibility: Inherited,
1903-
stability: cx.stability(self.id).clean(cx),
1902+
stability: cx.stability(self.id),
19041903
deprecation: cx.deprecation(self.id).clean(cx),
19051904
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
19061905
inner: VariantItem(Variant { kind: self.def.clean(cx) }),
@@ -2049,7 +2048,7 @@ impl Clean<Item> for doctree::Typedef<'_> {
20492048
source: self.span.clean(cx),
20502049
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
20512050
visibility: self.vis.clean(cx),
2052-
stability: cx.stability(self.id).clean(cx),
2051+
stability: cx.stability(self.id),
20532052
deprecation: cx.deprecation(self.id).clean(cx),
20542053
inner: TypedefItem(Typedef { type_, generics: self.gen.clean(cx), item_type }, false),
20552054
}
@@ -2064,7 +2063,7 @@ impl Clean<Item> for doctree::OpaqueTy<'_> {
20642063
source: self.span.clean(cx),
20652064
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
20662065
visibility: self.vis.clean(cx),
2067-
stability: cx.stability(self.id).clean(cx),
2066+
stability: cx.stability(self.id),
20682067
deprecation: cx.deprecation(self.id).clean(cx),
20692068
inner: OpaqueTyItem(OpaqueTy {
20702069
bounds: self.opaque_ty.bounds.clean(cx),
@@ -2092,7 +2091,7 @@ impl Clean<Item> for doctree::Static<'_> {
20922091
source: self.span.clean(cx),
20932092
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
20942093
visibility: self.vis.clean(cx),
2095-
stability: cx.stability(self.id).clean(cx),
2094+
stability: cx.stability(self.id),
20962095
deprecation: cx.deprecation(self.id).clean(cx),
20972096
inner: StaticItem(Static {
20982097
type_: self.type_.clean(cx),
@@ -2113,7 +2112,7 @@ impl Clean<Item> for doctree::Constant<'_> {
21132112
source: self.span.clean(cx),
21142113
def_id: def_id.to_def_id(),
21152114
visibility: self.vis.clean(cx),
2116-
stability: cx.stability(self.id).clean(cx),
2115+
stability: cx.stability(self.id),
21172116
deprecation: cx.deprecation(self.id).clean(cx),
21182117
inner: ConstantItem(Constant {
21192118
type_: self.type_.clean(cx),
@@ -2167,7 +2166,7 @@ impl Clean<Vec<Item>> for doctree::Impl<'_> {
21672166
source: self.span.clean(cx),
21682167
def_id: def_id.to_def_id(),
21692168
visibility: self.vis.clean(cx),
2170-
stability: cx.stability(self.id).clean(cx),
2169+
stability: cx.stability(self.id),
21712170
deprecation: cx.deprecation(self.id).clean(cx),
21722171
inner: ImplItem(Impl {
21732172
unsafety: self.unsafety,
@@ -2349,7 +2348,7 @@ impl Clean<Item> for doctree::ForeignItem<'_> {
23492348
source: self.span.clean(cx),
23502349
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
23512350
visibility: self.vis.clean(cx),
2352-
stability: cx.stability(self.id).clean(cx),
2351+
stability: cx.stability(self.id),
23532352
deprecation: cx.deprecation(self.id).clean(cx),
23542353
inner,
23552354
}
@@ -2364,7 +2363,7 @@ impl Clean<Item> for doctree::Macro<'_> {
23642363
attrs: self.attrs.clean(cx),
23652364
source: self.span.clean(cx),
23662365
visibility: Public,
2367-
stability: cx.stability(self.hid).clean(cx),
2366+
stability: cx.stability(self.hid),
23682367
deprecation: cx.deprecation(self.hid).clean(cx),
23692368
def_id: self.def_id,
23702369
inner: MacroItem(Macro {
@@ -2389,35 +2388,14 @@ impl Clean<Item> for doctree::ProcMacro<'_> {
23892388
attrs: self.attrs.clean(cx),
23902389
source: self.span.clean(cx),
23912390
visibility: Public,
2392-
stability: cx.stability(self.id).clean(cx),
2391+
stability: cx.stability(self.id),
23932392
deprecation: cx.deprecation(self.id).clean(cx),
23942393
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
23952394
inner: ProcMacroItem(ProcMacro { kind: self.kind, helpers: self.helpers.clean(cx) }),
23962395
}
23972396
}
23982397
}
23992398

2400-
impl Clean<Stability> for attr::Stability {
2401-
fn clean(&self, _: &DocContext<'_>) -> Stability {
2402-
Stability {
2403-
level: stability::StabilityLevel::from_attr_level(&self.level),
2404-
feature: self.feature.to_string(),
2405-
since: match self.level {
2406-
attr::Stable { ref since } => since.to_string(),
2407-
_ => String::new(),
2408-
},
2409-
unstable_reason: match self.level {
2410-
attr::Unstable { reason: Some(ref reason), .. } => Some(reason.to_string()),
2411-
_ => None,
2412-
},
2413-
issue: match self.level {
2414-
attr::Unstable { issue, .. } => issue,
2415-
_ => None,
2416-
},
2417-
}
2418-
}
2419-
}
2420-
24212399
impl Clean<Deprecation> for attr::Deprecation {
24222400
fn clean(&self, _: &DocContext<'_>) -> Deprecation {
24232401
Deprecation {

src/librustdoc/clean/types.rs

+8-15
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use std::fmt;
44
use std::hash::{Hash, Hasher};
55
use std::iter::FromIterator;
66
use std::lazy::SyncOnceCell as OnceCell;
7-
use std::num::NonZeroU32;
87
use std::rc::Rc;
98
use std::sync::Arc;
109
use std::{slice, vec};
@@ -13,18 +12,18 @@ use rustc_ast::attr;
1312
use rustc_ast::util::comments::beautify_doc_string;
1413
use rustc_ast::{self as ast, AttrStyle};
1514
use rustc_ast::{FloatTy, IntTy, UintTy};
15+
use rustc_attr::{Stability, StabilityLevel};
1616
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
1717
use rustc_hir as hir;
1818
use rustc_hir::def::Res;
1919
use rustc_hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
2020
use rustc_hir::lang_items::LangItem;
2121
use rustc_hir::Mutability;
2222
use rustc_index::vec::IndexVec;
23-
use rustc_middle::middle::stability;
2423
use rustc_middle::ty::{AssocKind, TyCtxt};
2524
use rustc_span::hygiene::MacroKind;
2625
use rustc_span::source_map::DUMMY_SP;
27-
use rustc_span::symbol::{kw, sym, Ident, Symbol};
26+
use rustc_span::symbol::{kw, sym, Ident, Symbol, SymbolStr};
2827
use rustc_span::{self, FileName};
2928
use rustc_target::abi::VariantIdx;
3029
use rustc_target::spec::abi::Abi;
@@ -197,7 +196,7 @@ impl Item {
197196
self.stability.as_ref().and_then(|ref s| {
198197
let mut classes = Vec::with_capacity(2);
199198

200-
if s.level == stability::Unstable {
199+
if s.level.is_unstable() {
201200
classes.push("unstable");
202201
}
203202

@@ -210,8 +209,11 @@ impl Item {
210209
})
211210
}
212211

213-
pub fn stable_since(&self) -> Option<&str> {
214-
self.stability.as_ref().map(|s| &s.since[..])
212+
pub fn stable_since(&self) -> Option<SymbolStr> {
213+
match self.stability?.level {
214+
StabilityLevel::Stable { since, .. } => Some(since.as_str()),
215+
StabilityLevel::Unstable { .. } => None,
216+
}
215217
}
216218

217219
pub fn is_non_exhaustive(&self) -> bool {
@@ -1698,15 +1700,6 @@ pub struct ProcMacro {
16981700
pub helpers: Vec<String>,
16991701
}
17001702

1701-
#[derive(Clone, Debug)]
1702-
pub struct Stability {
1703-
pub level: stability::StabilityLevel,
1704-
pub feature: String,
1705-
pub since: String,
1706-
pub unstable_reason: Option<String>,
1707-
pub issue: Option<NonZeroU32>,
1708-
}
1709-
17101703
#[derive(Clone, Debug)]
17111704
pub struct Deprecation {
17121705
pub since: Option<String>,

src/librustdoc/clean/utils.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ use crate::clean::blanket_impl::BlanketImplFinder;
33
use crate::clean::{
44
inline, Clean, Crate, Deprecation, ExternalCrate, FnDecl, FnRetTy, Generic, GenericArg,
55
GenericArgs, GenericBound, Generics, GetDefId, ImportSource, Item, ItemEnum, Lifetime,
6-
MacroKind, Path, PathSegment, Primitive, PrimitiveType, ResolvedPath, Span, Stability, Type,
7-
TypeBinding, TypeKind, Visibility, WherePredicate,
6+
MacroKind, Path, PathSegment, Primitive, PrimitiveType, ResolvedPath, Span, Type, TypeBinding,
7+
TypeKind, Visibility, WherePredicate,
88
};
99
use crate::core::DocContext;
1010

1111
use itertools::Itertools;
12+
use rustc_attr::Stability;
1213
use rustc_data_structures::fx::FxHashSet;
1314
use rustc_hir as hir;
1415
use rustc_hir::def::{DefKind, Res};
@@ -102,7 +103,7 @@ pub fn krate(mut cx: &mut DocContext<'_>) -> Crate {
102103

103104
// extract the stability index for a node from tcx, if possible
104105
pub fn get_stability(cx: &DocContext<'_>, def_id: DefId) -> Option<Stability> {
105-
cx.tcx.lookup_stability(def_id).clean(cx)
106+
cx.tcx.lookup_stability(def_id).cloned()
106107
}
107108

108109
pub fn get_deprecation(cx: &DocContext<'_>, def_id: DefId) -> Option<Deprecation> {

0 commit comments

Comments
 (0)