use crate::clean;
use crate::clean::inline::build_external_trait;
use crate::clean::{AttributesExt, TraitWithExtraInfo, MAX_DEF_IDX};
-use crate::config::{Options as RustdocOptions, RenderOptions};
-use crate::config::{OutputFormat, RenderInfo};
+use crate::config::{Options as RustdocOptions, OutputFormat, RenderOptions};
use crate::formats::cache::Cache;
use crate::passes::{self, Condition::*, ConditionalPass};
crate use rustc_session::config::{DebuggingOptions, Input, Options};
-crate type ExternalPaths = FxHashMap<DefId, (Vec<String>, clean::TypeKind)>;
-
crate struct DocContext<'tcx> {
crate tcx: TyCtxt<'tcx>,
/// Name resolver. Used for intra-doc links.
///
/// Most of this logic is copied from rustc_lint::late.
crate param_env: ParamEnv<'tcx>,
- /// Later on moved into `cache`
- crate renderinfo: RenderInfo,
/// Later on moved through `clean::Crate` into `cache`
crate external_traits: Rc<RefCell<FxHashMap<DefId, clean::TraitWithExtraInfo>>>,
/// Used while populating `external_traits` to ensure we don't process the same trait twice at
/// See `collect_intra_doc_links::traits_implemented_by` for more details.
/// `map<module, set<trait>>`
crate module_trait_cache: RefCell<FxHashMap<DefId, FxHashSet<DefId>>>,
- /// Fake empty cache used when cache is required as parameter.
+ /// This same cache is used throughout rustdoc, including in [`crate::html::render`].
crate cache: Cache,
+ /// Used by [`clean::inline`] to tell if an item has already been inlined.
+ crate inlined: FxHashSet<DefId>,
+ /// Used by `calculate_doc_coverage`.
+ crate output_format: OutputFormat,
}
impl<'tcx> DocContext<'tcx> {
mut manual_passes: Vec<String>,
render_options: RenderOptions,
output_format: OutputFormat,
-) -> (clean::Crate, RenderInfo, RenderOptions) {
+) -> (clean::Crate, RenderOptions, Cache) {
// Certain queries assume that some checks were run elsewhere
// (see https://github.com/rust-lang/rust/pull/73566#issuecomment-656954425),
// so type-check everything other than function bodies in this crate before running lints.
.collect(),
};
- let mut renderinfo = RenderInfo::default();
- renderinfo.access_levels = access_levels;
- renderinfo.output_format = output_format;
-
let mut ctxt = DocContext {
tcx,
resolver,
param_env: ParamEnv::empty(),
external_traits: Default::default(),
active_extern_traits: Default::default(),
- renderinfo,
ty_substs: Default::default(),
lt_substs: Default::default(),
ct_substs: Default::default(),
.cloned()
.filter(|trait_def_id| tcx.trait_is_auto(*trait_def_id))
.collect(),
- render_options,
module_trait_cache: RefCell::new(FxHashMap::default()),
- cache: Cache::default(),
+ cache: Cache::new(access_levels, render_options.document_private),
+ inlined: FxHashSet::default(),
+ output_format,
+ render_options,
};
// Small hack to force the Sized trait to be present.
ctxt.sess().abort_if_errors();
+ let render_options = ctxt.render_options;
+ let mut cache = ctxt.cache;
+ krate = tcx.sess.time("create_format_cache", || {
+ cache.populate(krate, tcx, &render_options.extern_html_root_urls, &render_options.output)
+ });
+
// The main crate doc comments are always collapsed.
krate.collapsed = true;
- (krate, ctxt.renderinfo, ctxt.render_options)
+ (krate, render_options, cache)
}
/// Due to <https://github.com/rust-lang/rust/pull/73566>,