Skip to content

Commit 0396aac

Browse files
committed
Auto merge of #63639 - Mark-Simulacrum:rustdoc-clean-3, r=GuillaumeGomez
rustdoc: general cleanup
2 parents 7e0afda + b0fab96 commit 0396aac

File tree

9 files changed

+442
-507
lines changed

9 files changed

+442
-507
lines changed

src/librustdoc/clean/mod.rs

+77-102
Original file line numberDiff line numberDiff line change
@@ -136,94 +136,88 @@ pub struct Crate {
136136
pub collapsed: bool,
137137
}
138138

139-
impl Clean<Crate> for hir::Crate {
140-
// note that self here is ignored in favor of `cx.tcx.hir().krate()` since
141-
// that gets around tying self's lifetime to the '_ in cx.
142-
fn clean(&self, cx: &DocContext<'_>) -> Crate {
143-
use crate::visit_lib::LibEmbargoVisitor;
144-
145-
let v = crate::visit_ast::RustdocVisitor::new(&cx);
146-
let module = v.visit(cx.tcx.hir().krate());
147-
148-
{
149-
let mut r = cx.renderinfo.borrow_mut();
150-
r.deref_trait_did = cx.tcx.lang_items().deref_trait();
151-
r.deref_mut_trait_did = cx.tcx.lang_items().deref_mut_trait();
152-
r.owned_box_did = cx.tcx.lang_items().owned_box();
153-
}
154-
155-
let mut externs = Vec::new();
156-
for &cnum in cx.tcx.crates().iter() {
157-
externs.push((cnum, cnum.clean(cx)));
158-
// Analyze doc-reachability for extern items
159-
LibEmbargoVisitor::new(cx).visit_lib(cnum);
160-
}
161-
externs.sort_by(|&(a, _), &(b, _)| a.cmp(&b));
162-
163-
// Clean the crate, translating the entire libsyntax AST to one that is
164-
// understood by rustdoc.
165-
let mut module = module.clean(cx);
166-
let mut masked_crates = FxHashSet::default();
167-
168-
match module.inner {
169-
ModuleItem(ref module) => {
170-
for it in &module.items {
171-
// `compiler_builtins` should be masked too, but we can't apply
172-
// `#[doc(masked)]` to the injected `extern crate` because it's unstable.
173-
if it.is_extern_crate()
174-
&& (it.attrs.has_doc_flag(sym::masked)
175-
|| cx.tcx.is_compiler_builtins(it.def_id.krate))
176-
{
177-
masked_crates.insert(it.def_id.krate);
178-
}
139+
pub fn krate(mut cx: &mut DocContext<'_>) -> Crate {
140+
use crate::visit_lib::LibEmbargoVisitor;
141+
142+
let krate = cx.tcx.hir().krate();
143+
let module = crate::visit_ast::RustdocVisitor::new(&mut cx).visit(krate);
144+
145+
let mut r = cx.renderinfo.get_mut();
146+
r.deref_trait_did = cx.tcx.lang_items().deref_trait();
147+
r.deref_mut_trait_did = cx.tcx.lang_items().deref_mut_trait();
148+
r.owned_box_did = cx.tcx.lang_items().owned_box();
149+
150+
let mut externs = Vec::new();
151+
for &cnum in cx.tcx.crates().iter() {
152+
externs.push((cnum, cnum.clean(cx)));
153+
// Analyze doc-reachability for extern items
154+
LibEmbargoVisitor::new(&mut cx).visit_lib(cnum);
155+
}
156+
externs.sort_by(|&(a, _), &(b, _)| a.cmp(&b));
157+
158+
// Clean the crate, translating the entire libsyntax AST to one that is
159+
// understood by rustdoc.
160+
let mut module = module.clean(cx);
161+
let mut masked_crates = FxHashSet::default();
162+
163+
match module.inner {
164+
ModuleItem(ref module) => {
165+
for it in &module.items {
166+
// `compiler_builtins` should be masked too, but we can't apply
167+
// `#[doc(masked)]` to the injected `extern crate` because it's unstable.
168+
if it.is_extern_crate()
169+
&& (it.attrs.has_doc_flag(sym::masked)
170+
|| cx.tcx.is_compiler_builtins(it.def_id.krate))
171+
{
172+
masked_crates.insert(it.def_id.krate);
179173
}
180174
}
181-
_ => unreachable!(),
182175
}
176+
_ => unreachable!(),
177+
}
183178

184-
let ExternalCrate { name, src, primitives, keywords, .. } = LOCAL_CRATE.clean(cx);
185-
{
186-
let m = match module.inner {
187-
ModuleItem(ref mut m) => m,
188-
_ => unreachable!(),
189-
};
190-
m.items.extend(primitives.iter().map(|&(def_id, prim, ref attrs)| {
191-
Item {
192-
source: Span::empty(),
193-
name: Some(prim.to_url_str().to_string()),
194-
attrs: attrs.clone(),
195-
visibility: Some(Public),
196-
stability: get_stability(cx, def_id),
197-
deprecation: get_deprecation(cx, def_id),
198-
def_id,
199-
inner: PrimitiveItem(prim),
200-
}
201-
}));
202-
m.items.extend(keywords.into_iter().map(|(def_id, kw, attrs)| {
203-
Item {
204-
source: Span::empty(),
205-
name: Some(kw.clone()),
206-
attrs: attrs,
207-
visibility: Some(Public),
208-
stability: get_stability(cx, def_id),
209-
deprecation: get_deprecation(cx, def_id),
210-
def_id,
211-
inner: KeywordItem(kw),
212-
}
213-
}));
214-
}
179+
let ExternalCrate { name, src, primitives, keywords, .. } = LOCAL_CRATE.clean(cx);
180+
{
181+
let m = match module.inner {
182+
ModuleItem(ref mut m) => m,
183+
_ => unreachable!(),
184+
};
185+
m.items.extend(primitives.iter().map(|&(def_id, prim, ref attrs)| {
186+
Item {
187+
source: Span::empty(),
188+
name: Some(prim.to_url_str().to_string()),
189+
attrs: attrs.clone(),
190+
visibility: Some(Public),
191+
stability: get_stability(cx, def_id),
192+
deprecation: get_deprecation(cx, def_id),
193+
def_id,
194+
inner: PrimitiveItem(prim),
195+
}
196+
}));
197+
m.items.extend(keywords.into_iter().map(|(def_id, kw, attrs)| {
198+
Item {
199+
source: Span::empty(),
200+
name: Some(kw.clone()),
201+
attrs: attrs,
202+
visibility: Some(Public),
203+
stability: get_stability(cx, def_id),
204+
deprecation: get_deprecation(cx, def_id),
205+
def_id,
206+
inner: KeywordItem(kw),
207+
}
208+
}));
209+
}
215210

216-
Crate {
217-
name,
218-
version: None,
219-
src,
220-
module: Some(module),
221-
externs,
222-
primitives,
223-
external_traits: cx.external_traits.clone(),
224-
masked_crates,
225-
collapsed: false,
226-
}
211+
Crate {
212+
name,
213+
version: None,
214+
src,
215+
module: Some(module),
216+
externs,
217+
primitives,
218+
external_traits: cx.external_traits.clone(),
219+
masked_crates,
220+
collapsed: false,
227221
}
228222
}
229223

@@ -572,23 +566,6 @@ pub enum ItemEnum {
572566
}
573567

574568
impl ItemEnum {
575-
pub fn generics(&self) -> Option<&Generics> {
576-
Some(match *self {
577-
ItemEnum::StructItem(ref s) => &s.generics,
578-
ItemEnum::EnumItem(ref e) => &e.generics,
579-
ItemEnum::FunctionItem(ref f) => &f.generics,
580-
ItemEnum::TypedefItem(ref t, _) => &t.generics,
581-
ItemEnum::OpaqueTyItem(ref t, _) => &t.generics,
582-
ItemEnum::TraitItem(ref t) => &t.generics,
583-
ItemEnum::ImplItem(ref i) => &i.generics,
584-
ItemEnum::TyMethodItem(ref i) => &i.generics,
585-
ItemEnum::MethodItem(ref i) => &i.generics,
586-
ItemEnum::ForeignFunctionItem(ref f) => &f.generics,
587-
ItemEnum::TraitAliasItem(ref ta) => &ta.generics,
588-
_ => return None,
589-
})
590-
}
591-
592569
pub fn is_associated(&self) -> bool {
593570
match *self {
594571
ItemEnum::TypedefItem(_, _) |
@@ -1541,8 +1518,6 @@ impl Clean<GenericParamDef> for ty::GenericParamDef {
15411518
(self.name.to_string(), GenericParamDefKind::Lifetime)
15421519
}
15431520
ty::GenericParamDefKind::Type { has_default, synthetic, .. } => {
1544-
cx.renderinfo.borrow_mut().external_param_names
1545-
.insert(self.def_id, self.name.clean(cx));
15461521
let default = if has_default {
15471522
Some(cx.tcx.type_of(self.def_id).clean(cx))
15481523
} else {

src/librustdoc/core.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use std::rc::Rc;
3030

3131
use crate::config::{Options as RustdocOptions, RenderOptions};
3232
use crate::clean;
33-
use crate::clean::{Clean, MAX_DEF_ID, AttributesExt};
33+
use crate::clean::{MAX_DEF_ID, AttributesExt};
3434
use crate::html::render::RenderInfo;
3535

3636
use crate::passes;
@@ -363,7 +363,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
363363
let mut renderinfo = RenderInfo::default();
364364
renderinfo.access_levels = access_levels;
365365

366-
let ctxt = DocContext {
366+
let mut ctxt = DocContext {
367367
tcx,
368368
resolver,
369369
cstore: compiler.cstore().clone(),
@@ -383,7 +383,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
383383
};
384384
debug!("crate: {:?}", tcx.hir().krate());
385385

386-
let mut krate = tcx.hir().krate().clean(&ctxt);
386+
let mut krate = clean::krate(&mut ctxt);
387387

388388
fn report_deprecated_attr(name: &str, diag: &errors::Handler) {
389389
let mut msg = diag.struct_warn(&format!("the `#![doc({})]` attribute is \

0 commit comments

Comments
 (0)