Convert more impls of DocFolder to DocVisitor

I think these are the last of the impls that can be easily converted to visitors.
This commit is contained in:
Noah Lev 2021-10-31 21:33:50 -07:00
parent b74287076c
commit 3f0f51017c
2 changed files with 26 additions and 27 deletions

View File

@ -32,10 +32,10 @@ use std::ops::Range;
use crate::clean::{self, utils::find_nearest_parent_module, Crate, Item, ItemLink, PrimitiveType};
use crate::core::DocContext;
use crate::fold::DocFolder;
use crate::html::markdown::{markdown_links, MarkdownLink};
use crate::lint::{BROKEN_INTRA_DOC_LINKS, PRIVATE_INTRA_DOC_LINKS};
use crate::passes::Pass;
use crate::visit::DocVisitor;
mod early;
crate use early::load_intra_link_crates;
@ -47,13 +47,14 @@ crate const COLLECT_INTRA_DOC_LINKS: Pass = Pass {
};
fn collect_intra_doc_links(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
LinkCollector {
let mut collector = LinkCollector {
cx,
mod_ids: Vec::new(),
kind_side_channel: Cell::new(None),
visited_links: FxHashMap::default(),
}
.fold_crate(krate)
};
collector.visit_crate(&krate);
krate
}
/// Top-level errors emitted by this pass.
@ -816,8 +817,8 @@ fn is_derive_trait_collision<T>(ns: &PerNS<Result<(Res, T), ResolutionFailure<'_
)
}
impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
fn fold_item(&mut self, item: Item) -> Option<Item> {
impl<'a, 'tcx> DocVisitor for LinkCollector<'a, 'tcx> {
fn visit_item(&mut self, item: &Item) {
use rustc_middle::ty::DefIdTree;
let parent_node =
@ -911,17 +912,16 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
}
}
Some(if item.is_mod() {
if item.is_mod() {
if !inner_docs {
self.mod_ids.push(item.def_id.expect_def_id());
}
let ret = self.fold_item_recur(item);
self.visit_item_recur(item);
self.mod_ids.pop();
ret
} else {
self.fold_item_recur(item)
})
self.visit_item_recur(item)
}
}
}

View File

@ -1,7 +1,6 @@
use super::Pass;
use crate::clean::*;
use crate::core::DocContext;
use crate::fold::DocFolder;
use crate::{clean::*, visit::DocVisitor};
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_hir::def_id::DefId;
@ -14,17 +13,18 @@ crate const COLLECT_TRAIT_IMPLS: Pass = Pass {
description: "retrieves trait impls for items in the crate",
};
crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
let (mut krate, synth_impls) = cx.sess().time("collect_synthetic_impls", || {
crate fn collect_trait_impls(mut krate: Crate, cx: &mut DocContext<'_>) -> Crate {
let synth_impls = cx.sess().time("collect_synthetic_impls", || {
let mut synth = SyntheticImplCollector { cx, impls: Vec::new() };
(synth.fold_crate(krate), synth.impls)
synth.visit_crate(&krate);
synth.impls
});
let prims: FxHashSet<PrimitiveType> = krate.primitives.iter().map(|p| p.1).collect();
let crate_items = {
let mut coll = ItemCollector::new();
krate = cx.sess().time("collect_items_for_trait_impls", || coll.fold_crate(krate));
cx.sess().time("collect_items_for_trait_impls", || coll.visit_crate(&krate));
coll.items
};
@ -152,14 +152,13 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
}
}
let items = if let ModuleItem(Module { ref mut items, .. }) = *krate.module.kind {
items
if let ModuleItem(Module { items, .. }) = &mut *krate.module.kind {
items.extend(synth_impls);
items.extend(new_items);
} else {
panic!("collect-trait-impls can't run");
};
items.extend(synth_impls);
items.extend(new_items);
krate
}
@ -168,8 +167,8 @@ struct SyntheticImplCollector<'a, 'tcx> {
impls: Vec<Item>,
}
impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
fn fold_item(&mut self, i: Item) -> Option<Item> {
impl<'a, 'tcx> DocVisitor for SyntheticImplCollector<'a, 'tcx> {
fn visit_item(&mut self, i: &Item) {
if i.is_struct() || i.is_enum() || i.is_union() {
// FIXME(eddyb) is this `doc(hidden)` check needed?
if !self
@ -184,7 +183,7 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
}
}
Some(self.fold_item_recur(i))
self.visit_item_recur(i)
}
}
@ -199,11 +198,11 @@ impl ItemCollector {
}
}
impl DocFolder for ItemCollector {
fn fold_item(&mut self, i: Item) -> Option<Item> {
impl DocVisitor for ItemCollector {
fn visit_item(&mut self, i: &Item) {
self.items.insert(i.def_id);
Some(self.fold_item_recur(i))
self.visit_item_recur(i)
}
}