未验证 提交 5c0d880e 编写于 作者: D Dylan DPC 提交者: GitHub

Rollup merge of #83415 - camelid:remove-crate-module-option, r=jyn514

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.
......@@ -231,7 +231,7 @@ fn clean(&self, cx: &mut DocContext<'_>) -> Item {
let what_rustc_thinks = Item::from_hir_id_and_parts(
self.id,
self.name,
Some(self.name),
ModuleItem(Module { is_crate: self.is_crate, items }),
cx,
);
......
......@@ -51,7 +51,7 @@
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 {
name,
src,
module: Some(module),
module,
externs,
primitives,
external_traits: cx.external_traits.clone(),
......
......@@ -474,13 +474,12 @@ impl<'tcx> DocContext<'tcx> {
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) {
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(),
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");
......@@ -489,7 +488,6 @@ impl<'tcx> DocContext<'tcx> {
},
);
}
}
fn report_deprecated_attr(name: &str, diag: &rustc_errors::Handler, sp: Span) {
let mut msg =
......@@ -531,7 +529,7 @@ fn report_deprecated_attr(name: &str, diag: &rustc_errors::Handler, sp: Span) {
// 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();
......
......@@ -5,7 +5,7 @@
use rustc_hir as hir;
crate struct Module<'hir> {
crate name: Option<Symbol>,
crate name: Symbol,
crate where_outer: Span,
crate where_inner: Span,
crate mods: Vec<Module<'hir>>,
......@@ -18,7 +18,7 @@
}
impl Module<'hir> {
crate fn new(name: Option<Symbol>) -> Module<'hir> {
crate fn new(name: Symbol) -> Module<'hir> {
Module {
name,
id: hir::CRATE_HIR_ID,
......
......@@ -87,7 +87,7 @@ fn fold_mod(&mut self, m: Module) -> Module {
}
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()) };
......
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 @@ fn init(
/// 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 @@ fn after_krate(
) -> 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 @@ fn after_krate(
}
}
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_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_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,8 +343,7 @@ fn init(
// 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) {
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();
......@@ -367,7 +366,6 @@ fn init(
_ => {}
}
}
}
let (sender, receiver) = channel();
let mut scx = SharedContext {
tcx,
......@@ -447,12 +445,11 @@ fn make_child_renderer(&self) -> Self {
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 @@ fn after_krate(
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 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 @@ fn mod_item_out(&mut self, _item_name: &str) -> Result<(), Error> {
fn after_krate(
&mut self,
_krate: &clean::Crate,
_crate_name: Symbol,
_diag: &rustc_errors::Handler,
) -> Result<(), Error> {
debug!("Done with crate");
......
......@@ -131,14 +131,10 @@ fn add_deref_target(
}
}
let items = if let Some(ref mut it) = krate.module {
if let ModuleItem(Module { ref mut items, .. }) = *it.kind {
let items = if let ModuleItem(Module { ref mut items, .. }) = *krate.module.kind {
items
} else {
panic!("collect-trait-impls can't run");
}
} else {
panic!("collect-trait-impls can't run");
};
items.extend(synth_impls);
......
......@@ -76,7 +76,7 @@ fn store_path(&mut self, did: DefId) {
&Spanned { span: rustc_span::DUMMY_SP, node: hir::VisibilityKind::Public },
hir::CRATE_HIR_ID,
&krate.item.module,
Some(self.cx.tcx.crate_name),
self.cx.tcx.crate_name,
);
top_level_module.is_crate = true;
// Attach the crate's exported macros to the top-level module.
......@@ -114,7 +114,7 @@ fn store_path(&mut self, did: DefId) {
_ => continue 'exported_macros,
};
// Descend into the child module that matches this path segment (if any).
match cur_mod.mods.iter_mut().find(|child| child.name == Some(path_segment_ty_ns)) {
match cur_mod.mods.iter_mut().find(|child| child.name == path_segment_ty_ns) {
Some(child_mod) => cur_mod = &mut *child_mod,
None => continue 'exported_macros,
}
......@@ -133,7 +133,7 @@ fn visit_mod_contents(
vis: &'tcx hir::Visibility<'_>,
id: hir::HirId,
m: &'tcx hir::Mod<'tcx>,
name: Option<Symbol>,
name: Symbol,
) -> Module<'tcx> {
let mut om = Module::new(name);
om.where_outer = span;
......@@ -312,13 +312,7 @@ fn visit_item(
om.items.push((item, renamed))
}
hir::ItemKind::Mod(ref m) => {
om.mods.push(self.visit_mod_contents(
item.span,
&item.vis,
item.hir_id(),
m,
Some(name),
));
om.mods.push(self.visit_mod_contents(item.span, &item.vis, item.hir_id(), m, name));
}
hir::ItemKind::Fn(..)
| hir::ItemKind::ExternCrate(..)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册