Skip to content

Commit 9703ef6

Browse files
committed
Auto merge of #62955 - Mark-Simulacrum:rustdoc-clean-1, r=eddyb
rustdoc: general cleanups This is purely a refactoring, mostly just simplifying some of the code. Commits are best reviewed individually.
2 parents be3fb0c + 32f144a commit 9703ef6

File tree

10 files changed

+97
-186
lines changed

10 files changed

+97
-186
lines changed

src/librustc_interface/passes.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ use std::path::PathBuf;
5858
use std::sync::mpsc;
5959
use std::cell::RefCell;
6060
use std::rc::Rc;
61-
use std::mem;
6261

6362
pub fn parse<'a>(sess: &'a Session, input: &Input) -> PResult<'a, ast::Crate> {
6463
sess.diagnostic()
@@ -204,15 +203,16 @@ impl ExpansionResult {
204203

205204
impl BoxedResolver {
206205
pub fn to_expansion_result(
207-
mut resolver: Rc<Option<RefCell<BoxedResolver>>>,
206+
resolver: Rc<RefCell<BoxedResolver>>,
208207
) -> ExpansionResult {
209-
if let Some(resolver) = Rc::get_mut(&mut resolver) {
210-
mem::replace(resolver, None).unwrap().into_inner().complete()
211-
} else {
212-
let resolver = &*resolver;
213-
resolver.as_ref().unwrap().borrow_mut().access(|resolver| {
214-
ExpansionResult::from_resolver_ref(resolver)
215-
})
208+
match Rc::try_unwrap(resolver) {
209+
Ok(resolver) => resolver.into_inner().complete(),
210+
Err(resolver) => {
211+
let resolver = &*resolver;
212+
resolver.borrow_mut().access(|resolver| {
213+
ExpansionResult::from_resolver_ref(resolver)
214+
})
215+
}
216216
}
217217
}
218218
}

src/librustc_interface/queries.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pub(crate) struct Queries {
7676
parse: Query<ast::Crate>,
7777
crate_name: Query<String>,
7878
register_plugins: Query<(ast::Crate, PluginInfo)>,
79-
expansion: Query<(ast::Crate, Rc<Option<RefCell<BoxedResolver>>>)>,
79+
expansion: Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>)>,
8080
dep_graph: Query<DepGraph>,
8181
lower_to_hir: Query<(Steal<hir::map::Forest>, ExpansionResult)>,
8282
prepare_outputs: Query<OutputFilenames>,
@@ -142,7 +142,7 @@ impl Compiler {
142142

143143
pub fn expansion(
144144
&self
145-
) -> Result<&Query<(ast::Crate, Rc<Option<RefCell<BoxedResolver>>>)>> {
145+
) -> Result<&Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>)>> {
146146
self.queries.expansion.compute(|| {
147147
let crate_name = self.crate_name()?.peek().clone();
148148
let (krate, plugin_info) = self.register_plugins()?.take();
@@ -152,7 +152,7 @@ impl Compiler {
152152
krate,
153153
&crate_name,
154154
plugin_info,
155-
).map(|(krate, resolver)| (krate, Rc::new(Some(RefCell::new(resolver)))))
155+
).map(|(krate, resolver)| (krate, Steal::new(Rc::new(RefCell::new(resolver)))))
156156
})
157157
}
158158

@@ -176,9 +176,10 @@ impl Compiler {
176176
pub fn lower_to_hir(&self) -> Result<&Query<(Steal<hir::map::Forest>, ExpansionResult)>> {
177177
self.queries.lower_to_hir.compute(|| {
178178
let expansion_result = self.expansion()?;
179-
let (krate, resolver) = expansion_result.take();
180-
let resolver_ref = &*resolver;
181-
let hir = Steal::new(resolver_ref.as_ref().unwrap().borrow_mut().access(|resolver| {
179+
let peeked = expansion_result.peek();
180+
let krate = &peeked.0;
181+
let resolver = peeked.1.steal();
182+
let hir = Steal::new(resolver.borrow_mut().access(|resolver| {
182183
passes::lower_to_hir(
183184
self.session(),
184185
self.cstore(),
@@ -187,7 +188,6 @@ impl Compiler {
187188
&krate
188189
)
189190
})?);
190-
expansion_result.give((krate, Rc::new(None)));
191191
Ok((hir, BoxedResolver::to_expansion_result(resolver)))
192192
})
193193
}

src/librustdoc/clean/blanket_impl.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ use rustc::ty::subst::Subst;
55
use rustc::infer::InferOk;
66
use syntax_pos::DUMMY_SP;
77

8-
use crate::core::DocAccessLevels;
9-
108
use super::*;
119

1210
pub struct BlanketImplFinder<'a, 'tcx> {
@@ -30,7 +28,7 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
3028
debug!("get_blanket_impls({:?})", ty);
3129
let mut impls = Vec::new();
3230
for &trait_def_id in self.cx.all_traits.iter() {
33-
if !self.cx.renderinfo.borrow().access_levels.is_doc_reachable(trait_def_id) ||
31+
if !self.cx.renderinfo.borrow().access_levels.is_public(trait_def_id) ||
3432
self.cx.generated_synthetics
3533
.borrow_mut()
3634
.get(&(ty, trait_def_id))

src/librustdoc/clean/inline.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use rustc_metadata::cstore::LoadedMacro;
1414
use rustc::ty;
1515
use rustc::util::nodemap::FxHashSet;
1616

17-
use crate::core::{DocContext, DocAccessLevels};
17+
use crate::core::DocContext;
1818
use crate::doctree;
1919
use crate::clean::{
2020
self,
@@ -326,7 +326,7 @@ pub fn build_impl(cx: &DocContext<'_>, did: DefId, attrs: Option<Attrs<'_>>,
326326
// reachable in rustdoc generated documentation
327327
if !did.is_local() {
328328
if let Some(traitref) = associated_trait {
329-
if !cx.renderinfo.borrow().access_levels.is_doc_reachable(traitref.def_id) {
329+
if !cx.renderinfo.borrow().access_levels.is_public(traitref.def_id) {
330330
return
331331
}
332332
}
@@ -347,7 +347,7 @@ pub fn build_impl(cx: &DocContext<'_>, did: DefId, attrs: Option<Attrs<'_>>,
347347
// reachable in rustdoc generated documentation
348348
if !did.is_local() {
349349
if let Some(did) = for_.def_id() {
350-
if !cx.renderinfo.borrow().access_levels.is_doc_reachable(did) {
350+
if !cx.renderinfo.borrow().access_levels.is_public(did) {
351351
return
352352
}
353353
}

src/librustdoc/clean/mod.rs

+41-37
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ use parking_lot::ReentrantMutex;
4949

5050
use crate::core::{self, DocContext};
5151
use crate::doctree;
52-
use crate::visit_ast;
5352
use crate::html::render::{cache, ExternalLocation};
5453
use crate::html::item_type::ItemType;
5554

@@ -138,10 +137,15 @@ pub struct Crate {
138137
pub masked_crates: FxHashSet<CrateNum>,
139138
}
140139

141-
impl<'a, 'tcx> Clean<Crate> for visit_ast::RustdocVisitor<'a, 'tcx> {
140+
impl Clean<Crate> for hir::Crate {
141+
// note that self here is ignored in favor of `cx.tcx.hir().krate()` since
142+
// that gets around tying self's lifetime to the '_ in cx.
142143
fn clean(&self, cx: &DocContext<'_>) -> Crate {
143144
use crate::visit_lib::LibEmbargoVisitor;
144145

146+
let v = crate::visit_ast::RustdocVisitor::new(&cx);
147+
let module = v.visit(cx.tcx.hir().krate());
148+
145149
{
146150
let mut r = cx.renderinfo.borrow_mut();
147151
r.deref_trait_did = cx.tcx.lang_items().deref_trait();
@@ -159,7 +163,7 @@ impl<'a, 'tcx> Clean<Crate> for visit_ast::RustdocVisitor<'a, 'tcx> {
159163

160164
// Clean the crate, translating the entire libsyntax AST to one that is
161165
// understood by rustdoc.
162-
let mut module = self.module.as_ref().unwrap().clean(cx);
166+
let mut module = module.clean(cx);
163167
let mut masked_crates = FxHashSet::default();
164168

165169
match module.inner {
@@ -169,7 +173,7 @@ impl<'a, 'tcx> Clean<Crate> for visit_ast::RustdocVisitor<'a, 'tcx> {
169173
// `#[doc(masked)]` to the injected `extern crate` because it's unstable.
170174
if it.is_extern_crate()
171175
&& (it.attrs.has_doc_flag(sym::masked)
172-
|| self.cx.tcx.is_compiler_builtins(it.def_id.krate))
176+
|| cx.tcx.is_compiler_builtins(it.def_id.krate))
173177
{
174178
masked_crates.insert(it.def_id.krate);
175179
}
@@ -652,9 +656,9 @@ impl Clean<Item> for doctree::Module<'_> {
652656
attrs,
653657
source: whence.clean(cx),
654658
visibility: self.vis.clean(cx),
655-
stability: self.stab.clean(cx),
656-
deprecation: self.depr.clean(cx),
657-
def_id: cx.tcx.hir().local_def_id_from_node_id(self.id),
659+
stability: cx.stability(self.id).clean(cx),
660+
deprecation: cx.deprecation(self.id).clean(cx),
661+
def_id: cx.tcx.hir().local_def_id(self.id),
658662
inner: ModuleItem(Module {
659663
is_crate: self.is_crate,
660664
items,
@@ -1938,8 +1942,8 @@ impl Clean<Item> for doctree::Function<'_> {
19381942
attrs: self.attrs.clean(cx),
19391943
source: self.whence.clean(cx),
19401944
visibility: self.vis.clean(cx),
1941-
stability: self.stab.clean(cx),
1942-
deprecation: self.depr.clean(cx),
1945+
stability: cx.stability(self.id).clean(cx),
1946+
deprecation: cx.deprecation(self.id).clean(cx),
19431947
def_id: did,
19441948
inner: FunctionItem(Function {
19451949
decl,
@@ -2138,8 +2142,8 @@ impl Clean<Item> for doctree::Trait<'_> {
21382142
source: self.whence.clean(cx),
21392143
def_id: cx.tcx.hir().local_def_id(self.id),
21402144
visibility: self.vis.clean(cx),
2141-
stability: self.stab.clean(cx),
2142-
deprecation: self.depr.clean(cx),
2145+
stability: cx.stability(self.id).clean(cx),
2146+
deprecation: cx.deprecation(self.id).clean(cx),
21432147
inner: TraitItem(Trait {
21442148
auto: self.is_auto.clean(cx),
21452149
unsafety: self.unsafety,
@@ -2168,8 +2172,8 @@ impl Clean<Item> for doctree::TraitAlias<'_> {
21682172
source: self.whence.clean(cx),
21692173
def_id: cx.tcx.hir().local_def_id(self.id),
21702174
visibility: self.vis.clean(cx),
2171-
stability: self.stab.clean(cx),
2172-
deprecation: self.depr.clean(cx),
2175+
stability: cx.stability(self.id).clean(cx),
2176+
deprecation: cx.deprecation(self.id).clean(cx),
21732177
inner: TraitAliasItem(TraitAlias {
21742178
generics: self.generics.clean(cx),
21752179
bounds: self.bounds.clean(cx),
@@ -3242,8 +3246,8 @@ impl Clean<Item> for doctree::Struct<'_> {
32423246
source: self.whence.clean(cx),
32433247
def_id: cx.tcx.hir().local_def_id(self.id),
32443248
visibility: self.vis.clean(cx),
3245-
stability: self.stab.clean(cx),
3246-
deprecation: self.depr.clean(cx),
3249+
stability: cx.stability(self.id).clean(cx),
3250+
deprecation: cx.deprecation(self.id).clean(cx),
32473251
inner: StructItem(Struct {
32483252
struct_type: self.struct_type,
32493253
generics: self.generics.clean(cx),
@@ -3262,8 +3266,8 @@ impl Clean<Item> for doctree::Union<'_> {
32623266
source: self.whence.clean(cx),
32633267
def_id: cx.tcx.hir().local_def_id(self.id),
32643268
visibility: self.vis.clean(cx),
3265-
stability: self.stab.clean(cx),
3266-
deprecation: self.depr.clean(cx),
3269+
stability: cx.stability(self.id).clean(cx),
3270+
deprecation: cx.deprecation(self.id).clean(cx),
32673271
inner: UnionItem(Union {
32683272
struct_type: self.struct_type,
32693273
generics: self.generics.clean(cx),
@@ -3309,8 +3313,8 @@ impl Clean<Item> for doctree::Enum<'_> {
33093313
source: self.whence.clean(cx),
33103314
def_id: cx.tcx.hir().local_def_id(self.id),
33113315
visibility: self.vis.clean(cx),
3312-
stability: self.stab.clean(cx),
3313-
deprecation: self.depr.clean(cx),
3316+
stability: cx.stability(self.id).clean(cx),
3317+
deprecation: cx.deprecation(self.id).clean(cx),
33143318
inner: EnumItem(Enum {
33153319
variants: self.variants.iter().map(|v| v.clean(cx)).collect(),
33163320
generics: self.generics.clean(cx),
@@ -3332,8 +3336,8 @@ impl Clean<Item> for doctree::Variant<'_> {
33323336
attrs: self.attrs.clean(cx),
33333337
source: self.whence.clean(cx),
33343338
visibility: None,
3335-
stability: self.stab.clean(cx),
3336-
deprecation: self.depr.clean(cx),
3339+
stability: cx.stability(self.id).clean(cx),
3340+
deprecation: cx.deprecation(self.id).clean(cx),
33373341
def_id: cx.tcx.hir().local_def_id(self.id),
33383342
inner: VariantItem(Variant {
33393343
kind: self.def.clean(cx),
@@ -3637,8 +3641,8 @@ impl Clean<Item> for doctree::Typedef<'_> {
36373641
source: self.whence.clean(cx),
36383642
def_id: cx.tcx.hir().local_def_id(self.id),
36393643
visibility: self.vis.clean(cx),
3640-
stability: self.stab.clean(cx),
3641-
deprecation: self.depr.clean(cx),
3644+
stability: cx.stability(self.id).clean(cx),
3645+
deprecation: cx.deprecation(self.id).clean(cx),
36423646
inner: TypedefItem(Typedef {
36433647
type_: self.ty.clean(cx),
36443648
generics: self.gen.clean(cx),
@@ -3661,8 +3665,8 @@ impl Clean<Item> for doctree::OpaqueTy<'_> {
36613665
source: self.whence.clean(cx),
36623666
def_id: cx.tcx.hir().local_def_id(self.id),
36633667
visibility: self.vis.clean(cx),
3664-
stability: self.stab.clean(cx),
3665-
deprecation: self.depr.clean(cx),
3668+
stability: cx.stability(self.id).clean(cx),
3669+
deprecation: cx.deprecation(self.id).clean(cx),
36663670
inner: OpaqueTyItem(OpaqueTy {
36673671
bounds: self.opaque_ty.bounds.clean(cx),
36683672
generics: self.opaque_ty.generics.clean(cx),
@@ -3712,8 +3716,8 @@ impl Clean<Item> for doctree::Static<'_> {
37123716
source: self.whence.clean(cx),
37133717
def_id: cx.tcx.hir().local_def_id(self.id),
37143718
visibility: self.vis.clean(cx),
3715-
stability: self.stab.clean(cx),
3716-
deprecation: self.depr.clean(cx),
3719+
stability: cx.stability(self.id).clean(cx),
3720+
deprecation: cx.deprecation(self.id).clean(cx),
37173721
inner: StaticItem(Static {
37183722
type_: self.type_.clean(cx),
37193723
mutability: self.mutability.clean(cx),
@@ -3737,8 +3741,8 @@ impl Clean<Item> for doctree::Constant<'_> {
37373741
source: self.whence.clean(cx),
37383742
def_id: cx.tcx.hir().local_def_id(self.id),
37393743
visibility: self.vis.clean(cx),
3740-
stability: self.stab.clean(cx),
3741-
deprecation: self.depr.clean(cx),
3744+
stability: cx.stability(self.id).clean(cx),
3745+
deprecation: cx.deprecation(self.id).clean(cx),
37423746
inner: ConstantItem(Constant {
37433747
type_: self.type_.clean(cx),
37443748
expr: print_const_expr(cx, self.expr),
@@ -3824,8 +3828,8 @@ impl Clean<Vec<Item>> for doctree::Impl<'_> {
38243828
source: self.whence.clean(cx),
38253829
def_id: cx.tcx.hir().local_def_id(self.id),
38263830
visibility: self.vis.clean(cx),
3827-
stability: self.stab.clean(cx),
3828-
deprecation: self.depr.clean(cx),
3831+
stability: cx.stability(self.id).clean(cx),
3832+
deprecation: cx.deprecation(self.id).clean(cx),
38293833
inner: ImplItem(Impl {
38303834
unsafety: self.unsafety,
38313835
generics: self.generics.clean(cx),
@@ -4063,8 +4067,8 @@ impl Clean<Item> for doctree::ForeignItem<'_> {
40634067
source: self.whence.clean(cx),
40644068
def_id: cx.tcx.hir().local_def_id(self.id),
40654069
visibility: self.vis.clean(cx),
4066-
stability: self.stab.clean(cx),
4067-
deprecation: self.depr.clean(cx),
4070+
stability: cx.stability(self.id).clean(cx),
4071+
deprecation: cx.deprecation(self.id).clean(cx),
40684072
inner,
40694073
}
40704074
}
@@ -4246,8 +4250,8 @@ impl Clean<Item> for doctree::Macro<'_> {
42464250
attrs: self.attrs.clean(cx),
42474251
source: self.whence.clean(cx),
42484252
visibility: Some(Public),
4249-
stability: self.stab.clean(cx),
4250-
deprecation: self.depr.clean(cx),
4253+
stability: cx.stability(self.hid).clean(cx),
4254+
deprecation: cx.deprecation(self.hid).clean(cx),
42514255
def_id: self.def_id,
42524256
inner: MacroItem(Macro {
42534257
source: format!("macro_rules! {} {{\n{}}}",
@@ -4274,8 +4278,8 @@ impl Clean<Item> for doctree::ProcMacro<'_> {
42744278
attrs: self.attrs.clean(cx),
42754279
source: self.whence.clean(cx),
42764280
visibility: Some(Public),
4277-
stability: self.stab.clean(cx),
4278-
deprecation: self.depr.clean(cx),
4281+
stability: cx.stability(self.id).clean(cx),
4282+
deprecation: cx.deprecation(self.id).clean(cx),
42794283
def_id: cx.tcx.hir().local_def_id(self.id),
42804284
inner: ProcMacroItem(ProcMacro {
42814285
kind: self.kind,

0 commit comments

Comments
 (0)