mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-10 14:02:57 +00:00
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:
parent
b74287076c
commit
3f0f51017c
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user