From 32f144a5277d80baafcc192a4fd10336b999b6a8 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Sat, 10 Aug 2019 07:30:39 -0400 Subject: [PATCH] Implement Clean on hir::Crate directly --- src/librustdoc/clean/mod.rs | 12 +++++++----- src/librustdoc/core.rs | 7 +------ 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index aee9b74c31c6..6f33bdd7f4d2 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -137,13 +137,15 @@ pub struct Crate { pub masked_crates: FxHashSet, } -// The `()` here is rather ugly and would be great to remove. Unfortunately, we -// already have a different Clean impl for `doctree::Module` which makes this -// the only way to easily disambiguate. -impl<'tcx> Clean for ((), doctree::Module<'tcx>) { +impl Clean for hir::Crate { + // note that self here is ignored in favor of `cx.tcx.hir().krate()` since + // that gets around tying self's lifetime to the '_ in cx. fn clean(&self, cx: &DocContext<'_>) -> Crate { use crate::visit_lib::LibEmbargoVisitor; + let v = crate::visit_ast::RustdocVisitor::new(&cx); + let module = v.visit(cx.tcx.hir().krate()); + { let mut r = cx.renderinfo.borrow_mut(); r.deref_trait_did = cx.tcx.lang_items().deref_trait(); @@ -161,7 +163,7 @@ fn clean(&self, cx: &DocContext<'_>) -> Crate { // Clean the crate, translating the entire libsyntax AST to one that is // understood by rustdoc. - let mut module = self.1.clean(cx); + let mut module = module.clean(cx); let mut masked_crates = FxHashSet::default(); match module.inner { diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 2d19cfacd964..5138e4a23a47 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -30,7 +30,6 @@ use std::sync::Arc; use std::rc::Rc; -use crate::visit_ast::RustdocVisitor; use crate::config::{Options as RustdocOptions, RenderOptions}; use crate::clean; use crate::clean::{Clean, MAX_DEF_ID, AttributesExt}; @@ -392,11 +391,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt }; debug!("crate: {:?}", tcx.hir().krate()); - let mut krate = { - let v = RustdocVisitor::new(&ctxt); - let module = v.visit(tcx.hir().krate()); - ((), module).clean(&ctxt) - }; + let mut krate = tcx.hir().krate().clean(&ctxt); fn report_deprecated_attr(name: &str, diag: &errors::Handler) { let mut msg = diag.struct_warn(&format!("the `#![doc({})]` attribute is \