Skip to main content

rustdoc/passes/
strip_private.rs

1//! Strip all private items from the output.
2//!
3//! Implies `strip_priv_imports`.
4
5use crate::clean::{self, ItemIdSet};
6use crate::core::DocContext;
7use crate::fold::DocFolder;
8use crate::passes::{ImplStripper, ImportStripper, Stripper};
9
10pub(super) fn strip_private(mut krate: clean::Crate, cx: &mut DocContext<'_>) -> clean::Crate {
11    if cx.document_private() {
12        return krate;
13    }
14
15    // This stripper collects all *retained* nodes.
16    let mut retained = ItemIdSet::default();
17    let is_json_output = cx.is_json_output();
18
19    // strip all private items
20    {
21        let mut stripper = Stripper {
22            retained: &mut retained,
23            effective_visibilities: &cx.cache.effective_visibilities,
24            update_retained: true,
25            is_json_output,
26            tcx: cx.tcx,
27        };
28        krate =
29            ImportStripper { tcx: cx.tcx, is_json_output, document_hidden: cx.document_hidden() }
30                .fold_crate(stripper.fold_crate(krate));
31    }
32
33    // strip all impls referencing private items
34    let mut stripper = ImplStripper {
35        tcx: cx.tcx,
36        retained: &retained,
37        cache: &cx.cache,
38        is_json_output,
39        document_private: cx.document_private(),
40        document_hidden: cx.document_hidden(),
41    };
42    stripper.fold_crate(krate)
43}