]> git.proxmox.com Git - rustc.git/blob - src/librustdoc/passes/strip_private.rs
c6b5bec4692dc3b4fbafb94bee7830d266c4289a
[rustc.git] / src / librustdoc / passes / strip_private.rs
1 //! Strip all private items from the output. Additionally implies strip_priv_imports.
2 //! Basically, the goal is to remove items that are not relevant for public documentation.
3 use crate::clean::{self, ItemIdSet};
4 use crate::core::DocContext;
5 use crate::fold::DocFolder;
6 use crate::passes::{ImplStripper, ImportStripper, Pass, Stripper};
7
8 crate const STRIP_PRIVATE: Pass = Pass {
9 name: "strip-private",
10 run: strip_private,
11 description: "strips all private items from a crate which cannot be seen externally, \
12 implies strip-priv-imports",
13 };
14
15 /// Strip private items from the point of view of a crate or externally from a
16 /// crate, specified by the `xcrate` flag.
17 crate fn strip_private(mut krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
18 // This stripper collects all *retained* nodes.
19 let mut retained = ItemIdSet::default();
20
21 // strip all private items
22 {
23 let mut stripper = Stripper {
24 retained: &mut retained,
25 access_levels: &cx.cache.access_levels,
26 update_retained: true,
27 };
28 krate = ImportStripper.fold_crate(stripper.fold_crate(krate));
29 }
30
31 // strip all impls referencing private items
32 let mut stripper = ImplStripper { retained: &retained };
33 stripper.fold_crate(krate)
34 }