Remove unnecessary Option
wrapping around Crate.module
I'm wondering if it was originally there so that we could `take` the module which enables `after_krate` to take an `&Crate`. However, the two impls of `after_krate` only use `Crate.name`, so we can pass just the name instead.
This commit is contained in:
parent
c9ae35978c
commit
68244fc521
@ -51,7 +51,7 @@ thread_local!(crate static MAX_DEF_IDX: RefCell<FxHashMap<CrateNum, DefIndex>> =
|
||||
crate struct Crate {
|
||||
crate name: Symbol,
|
||||
crate src: FileName,
|
||||
crate module: Option<Item>,
|
||||
crate module: Item,
|
||||
crate externs: Vec<(CrateNum, ExternalCrate)>,
|
||||
crate primitives: Vec<(DefId, PrimitiveType)>,
|
||||
// These are later on moved into `CACHEKEY`, leaving the map empty.
|
||||
|
@ -76,7 +76,7 @@ crate fn krate(cx: &mut DocContext<'_>) -> Crate {
|
||||
Crate {
|
||||
name,
|
||||
src,
|
||||
module: Some(module),
|
||||
module,
|
||||
externs,
|
||||
primitives,
|
||||
external_traits: cx.external_traits.clone(),
|
||||
|
@ -474,21 +474,19 @@ crate fn run_global_ctxt(
|
||||
|
||||
let mut krate = tcx.sess.time("clean_crate", || clean::krate(&mut ctxt));
|
||||
|
||||
if let Some(ref m) = krate.module {
|
||||
if m.doc_value().map(|d| d.is_empty()).unwrap_or(true) {
|
||||
let help = "The following guide may be of use:\n\
|
||||
if krate.module.doc_value().map(|d| d.is_empty()).unwrap_or(true) {
|
||||
let help = "The following guide may be of use:\n\
|
||||
https://doc.rust-lang.org/nightly/rustdoc/how-to-write-documentation.html";
|
||||
tcx.struct_lint_node(
|
||||
crate::lint::MISSING_CRATE_LEVEL_DOCS,
|
||||
DocContext::as_local_hir_id(tcx, m.def_id).unwrap(),
|
||||
|lint| {
|
||||
let mut diag =
|
||||
lint.build("no documentation found for this crate's top-level module");
|
||||
diag.help(help);
|
||||
diag.emit();
|
||||
},
|
||||
);
|
||||
}
|
||||
tcx.struct_lint_node(
|
||||
crate::lint::MISSING_CRATE_LEVEL_DOCS,
|
||||
DocContext::as_local_hir_id(tcx, krate.module.def_id).unwrap(),
|
||||
|lint| {
|
||||
let mut diag =
|
||||
lint.build("no documentation found for this crate's top-level module");
|
||||
diag.help(help);
|
||||
diag.emit();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
fn report_deprecated_attr(name: &str, diag: &rustc_errors::Handler, sp: Span) {
|
||||
@ -531,7 +529,7 @@ crate fn run_global_ctxt(
|
||||
|
||||
// Process all of the crate attributes, extracting plugin metadata along
|
||||
// with the passes which we are supposed to run.
|
||||
for attr in krate.module.as_ref().unwrap().attrs.lists(sym::doc) {
|
||||
for attr in krate.module.attrs.lists(sym::doc) {
|
||||
let diag = ctxt.sess().diagnostic();
|
||||
|
||||
let name = attr.name_or_empty();
|
||||
|
@ -87,7 +87,7 @@ crate trait DocFolder: Sized {
|
||||
}
|
||||
|
||||
fn fold_crate(&mut self, mut c: Crate) -> Crate {
|
||||
c.module = c.module.take().and_then(|module| self.fold_item(module));
|
||||
c.module = self.fold_item(c.module).unwrap();
|
||||
|
||||
{
|
||||
let external_traits = { std::mem::take(&mut *c.external_traits.borrow_mut()) };
|
||||
|
@ -1,5 +1,5 @@
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::{edition::Edition, Symbol};
|
||||
|
||||
use crate::clean;
|
||||
use crate::config::RenderOptions;
|
||||
@ -40,7 +40,7 @@ crate trait FormatRenderer<'tcx>: Sized {
|
||||
/// A handler is available if the renderer wants to report errors.
|
||||
fn after_krate(
|
||||
&mut self,
|
||||
krate: &clean::Crate,
|
||||
crate_name: Symbol,
|
||||
diag: &rustc_errors::Handler,
|
||||
) -> Result<(), Error>;
|
||||
|
||||
@ -58,21 +58,15 @@ crate fn run_format<'tcx, T: FormatRenderer<'tcx>>(
|
||||
) -> Result<(), Error> {
|
||||
let prof = &tcx.sess.prof;
|
||||
|
||||
let (mut format_renderer, mut krate) = prof
|
||||
let (mut format_renderer, krate) = prof
|
||||
.extra_verbose_generic_activity("create_renderer", T::descr())
|
||||
.run(|| T::init(krate, options, edition, cache, tcx))?;
|
||||
|
||||
let mut item = match krate.module.take() {
|
||||
Some(i) => i,
|
||||
None => return Ok(()),
|
||||
};
|
||||
|
||||
item.name = Some(krate.name);
|
||||
|
||||
// Render the crate documentation
|
||||
let mut work = vec![(format_renderer.make_child_renderer(), item)];
|
||||
let crate_name = krate.name;
|
||||
let mut work = vec![(format_renderer.make_child_renderer(), krate.module)];
|
||||
|
||||
let unknown = rustc_span::Symbol::intern("<unknown item>");
|
||||
let unknown = Symbol::intern("<unknown item>");
|
||||
while let Some((mut cx, item)) = work.pop() {
|
||||
if item.is_mod() {
|
||||
// modules are special because they add a namespace. We also need to
|
||||
@ -102,5 +96,5 @@ crate fn run_format<'tcx, T: FormatRenderer<'tcx>>(
|
||||
}
|
||||
}
|
||||
prof.extra_verbose_generic_activity("renderer_after_krate", T::descr())
|
||||
.run(|| format_renderer.after_krate(&krate, diag))
|
||||
.run(|| format_renderer.after_krate(crate_name, diag))
|
||||
}
|
||||
|
@ -127,11 +127,8 @@ crate fn build_index<'tcx>(krate: &clean::Crate, cache: &mut Cache, tcx: TyCtxt<
|
||||
crate_items.push(&*item);
|
||||
}
|
||||
|
||||
let crate_doc = krate
|
||||
.module
|
||||
.as_ref()
|
||||
.map(|module| module.doc_value().map_or_else(String::new, |s| short_markdown_summary(&s)))
|
||||
.unwrap_or_default();
|
||||
let crate_doc =
|
||||
krate.module.doc_value().map_or_else(String::new, |s| short_markdown_summary(&s));
|
||||
|
||||
struct CrateData<'a> {
|
||||
doc: String,
|
||||
|
@ -11,7 +11,7 @@ use rustc_middle::ty::TyCtxt;
|
||||
use rustc_session::Session;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::source_map::FileName;
|
||||
use rustc_span::symbol::sym;
|
||||
use rustc_span::{symbol::sym, Symbol};
|
||||
|
||||
use super::cache::{build_index, ExternalLocation};
|
||||
use super::print_item::{full_path, item_path, print_item};
|
||||
@ -343,29 +343,27 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
|
||||
|
||||
// Crawl the crate attributes looking for attributes which control how we're
|
||||
// going to emit HTML
|
||||
if let Some(attrs) = krate.module.as_ref().map(|m| &m.attrs) {
|
||||
for attr in attrs.lists(sym::doc) {
|
||||
match (attr.name_or_empty(), attr.value_str()) {
|
||||
(sym::html_favicon_url, Some(s)) => {
|
||||
layout.favicon = s.to_string();
|
||||
}
|
||||
(sym::html_logo_url, Some(s)) => {
|
||||
layout.logo = s.to_string();
|
||||
}
|
||||
(sym::html_playground_url, Some(s)) => {
|
||||
playground = Some(markdown::Playground {
|
||||
crate_name: Some(krate.name.to_string()),
|
||||
url: s.to_string(),
|
||||
});
|
||||
}
|
||||
(sym::issue_tracker_base_url, Some(s)) => {
|
||||
issue_tracker_base_url = Some(s.to_string());
|
||||
}
|
||||
(sym::html_no_source, None) if attr.is_word() => {
|
||||
include_sources = false;
|
||||
}
|
||||
_ => {}
|
||||
for attr in krate.module.attrs.lists(sym::doc) {
|
||||
match (attr.name_or_empty(), attr.value_str()) {
|
||||
(sym::html_favicon_url, Some(s)) => {
|
||||
layout.favicon = s.to_string();
|
||||
}
|
||||
(sym::html_logo_url, Some(s)) => {
|
||||
layout.logo = s.to_string();
|
||||
}
|
||||
(sym::html_playground_url, Some(s)) => {
|
||||
playground = Some(markdown::Playground {
|
||||
crate_name: Some(krate.name.to_string()),
|
||||
url: s.to_string(),
|
||||
});
|
||||
}
|
||||
(sym::issue_tracker_base_url, Some(s)) => {
|
||||
issue_tracker_base_url = Some(s.to_string());
|
||||
}
|
||||
(sym::html_no_source, None) if attr.is_word() => {
|
||||
include_sources = false;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
let (sender, receiver) = channel();
|
||||
@ -447,12 +445,11 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
|
||||
|
||||
fn after_krate(
|
||||
&mut self,
|
||||
krate: &clean::Crate,
|
||||
crate_name: Symbol,
|
||||
diag: &rustc_errors::Handler,
|
||||
) -> Result<(), Error> {
|
||||
let final_file = self.dst.join(&*krate.name.as_str()).join("all.html");
|
||||
let final_file = self.dst.join(&*crate_name.as_str()).join("all.html");
|
||||
let settings_file = self.dst.join("settings.html");
|
||||
let crate_name = krate.name;
|
||||
|
||||
let mut root_path = self.dst.to_str().expect("invalid path").to_owned();
|
||||
if !root_path.ends_with('/') {
|
||||
@ -515,9 +512,9 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
|
||||
if let Some(ref redirections) = self.shared.redirections {
|
||||
if !redirections.borrow().is_empty() {
|
||||
let redirect_map_path =
|
||||
self.dst.join(&*krate.name.as_str()).join("redirect-map.json");
|
||||
self.dst.join(&*crate_name.as_str()).join("redirect-map.json");
|
||||
let paths = serde_json::to_string(&*redirections.borrow()).unwrap();
|
||||
self.shared.ensure_dir(&self.dst.join(&*krate.name.as_str()))?;
|
||||
self.shared.ensure_dir(&self.dst.join(&*crate_name.as_str()))?;
|
||||
self.shared.fs.write(&redirect_map_path, paths.as_bytes())?;
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ use std::rc::Rc;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_session::Session;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::{edition::Edition, Symbol};
|
||||
|
||||
use rustdoc_json_types as types;
|
||||
|
||||
@ -202,7 +202,7 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> {
|
||||
|
||||
fn after_krate(
|
||||
&mut self,
|
||||
_krate: &clean::Crate,
|
||||
_crate_name: Symbol,
|
||||
_diag: &rustc_errors::Handler,
|
||||
) -> Result<(), Error> {
|
||||
debug!("Done with crate");
|
||||
|
@ -131,12 +131,8 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
|
||||
}
|
||||
}
|
||||
|
||||
let items = if let Some(ref mut it) = krate.module {
|
||||
if let ModuleItem(Module { ref mut items, .. }) = *it.kind {
|
||||
items
|
||||
} else {
|
||||
panic!("collect-trait-impls can't run");
|
||||
}
|
||||
let items = if let ModuleItem(Module { ref mut items, .. }) = *krate.module.kind {
|
||||
items
|
||||
} else {
|
||||
panic!("collect-trait-impls can't run");
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user