Skip to content

Commit 3f0f510

Browse files
committed
Convert more impls of DocFolder to DocVisitor
I think these are the last of the impls that can be easily converted to visitors.
1 parent b742870 commit 3f0f510

File tree

2 files changed

+26
-27
lines changed

2 files changed

+26
-27
lines changed

src/librustdoc/passes/collect_intra_doc_links.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ use std::ops::Range;
3232

3333
use crate::clean::{self, utils::find_nearest_parent_module, Crate, Item, ItemLink, PrimitiveType};
3434
use crate::core::DocContext;
35-
use crate::fold::DocFolder;
3635
use crate::html::markdown::{markdown_links, MarkdownLink};
3736
use crate::lint::{BROKEN_INTRA_DOC_LINKS, PRIVATE_INTRA_DOC_LINKS};
3837
use crate::passes::Pass;
38+
use crate::visit::DocVisitor;
3939

4040
mod early;
4141
crate use early::load_intra_link_crates;
@@ -47,13 +47,14 @@ crate const COLLECT_INTRA_DOC_LINKS: Pass = Pass {
4747
};
4848

4949
fn collect_intra_doc_links(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
50-
LinkCollector {
50+
let mut collector = LinkCollector {
5151
cx,
5252
mod_ids: Vec::new(),
5353
kind_side_channel: Cell::new(None),
5454
visited_links: FxHashMap::default(),
55-
}
56-
.fold_crate(krate)
55+
};
56+
collector.visit_crate(&krate);
57+
krate
5758
}
5859

5960
/// Top-level errors emitted by this pass.
@@ -816,8 +817,8 @@ fn is_derive_trait_collision<T>(ns: &PerNS<Result<(Res, T), ResolutionFailure<'_
816817
)
817818
}
818819

819-
impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
820-
fn fold_item(&mut self, item: Item) -> Option<Item> {
820+
impl<'a, 'tcx> DocVisitor for LinkCollector<'a, 'tcx> {
821+
fn visit_item(&mut self, item: &Item) {
821822
use rustc_middle::ty::DefIdTree;
822823

823824
let parent_node =
@@ -911,17 +912,16 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
911912
}
912913
}
913914

914-
Some(if item.is_mod() {
915+
if item.is_mod() {
915916
if !inner_docs {
916917
self.mod_ids.push(item.def_id.expect_def_id());
917918
}
918919

919-
let ret = self.fold_item_recur(item);
920+
self.visit_item_recur(item);
920921
self.mod_ids.pop();
921-
ret
922922
} else {
923-
self.fold_item_recur(item)
924-
})
923+
self.visit_item_recur(item)
924+
}
925925
}
926926
}
927927

src/librustdoc/passes/collect_trait_impls.rs

+15-16
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use super::Pass;
2-
use crate::clean::*;
32
use crate::core::DocContext;
4-
use crate::fold::DocFolder;
3+
use crate::{clean::*, visit::DocVisitor};
54

65
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
76
use rustc_hir::def_id::DefId;
@@ -14,17 +13,18 @@ crate const COLLECT_TRAIT_IMPLS: Pass = Pass {
1413
description: "retrieves trait impls for items in the crate",
1514
};
1615

17-
crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
18-
let (mut krate, synth_impls) = cx.sess().time("collect_synthetic_impls", || {
16+
crate fn collect_trait_impls(mut krate: Crate, cx: &mut DocContext<'_>) -> Crate {
17+
let synth_impls = cx.sess().time("collect_synthetic_impls", || {
1918
let mut synth = SyntheticImplCollector { cx, impls: Vec::new() };
20-
(synth.fold_crate(krate), synth.impls)
19+
synth.visit_crate(&krate);
20+
synth.impls
2121
});
2222

2323
let prims: FxHashSet<PrimitiveType> = krate.primitives.iter().map(|p| p.1).collect();
2424

2525
let crate_items = {
2626
let mut coll = ItemCollector::new();
27-
krate = cx.sess().time("collect_items_for_trait_impls", || coll.fold_crate(krate));
27+
cx.sess().time("collect_items_for_trait_impls", || coll.visit_crate(&krate));
2828
coll.items
2929
};
3030

@@ -152,14 +152,13 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
152152
}
153153
}
154154

155-
let items = if let ModuleItem(Module { ref mut items, .. }) = *krate.module.kind {
156-
items
155+
if let ModuleItem(Module { items, .. }) = &mut *krate.module.kind {
156+
items.extend(synth_impls);
157+
items.extend(new_items);
157158
} else {
158159
panic!("collect-trait-impls can't run");
159160
};
160161

161-
items.extend(synth_impls);
162-
items.extend(new_items);
163162
krate
164163
}
165164

@@ -168,8 +167,8 @@ struct SyntheticImplCollector<'a, 'tcx> {
168167
impls: Vec<Item>,
169168
}
170169

171-
impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
172-
fn fold_item(&mut self, i: Item) -> Option<Item> {
170+
impl<'a, 'tcx> DocVisitor for SyntheticImplCollector<'a, 'tcx> {
171+
fn visit_item(&mut self, i: &Item) {
173172
if i.is_struct() || i.is_enum() || i.is_union() {
174173
// FIXME(eddyb) is this `doc(hidden)` check needed?
175174
if !self
@@ -184,7 +183,7 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
184183
}
185184
}
186185

187-
Some(self.fold_item_recur(i))
186+
self.visit_item_recur(i)
188187
}
189188
}
190189

@@ -199,11 +198,11 @@ impl ItemCollector {
199198
}
200199
}
201200

202-
impl DocFolder for ItemCollector {
203-
fn fold_item(&mut self, i: Item) -> Option<Item> {
201+
impl DocVisitor for ItemCollector {
202+
fn visit_item(&mut self, i: &Item) {
204203
self.items.insert(i.def_id);
205204

206-
Some(self.fold_item_recur(i))
205+
self.visit_item_recur(i)
207206
}
208207
}
209208

0 commit comments

Comments
 (0)