diff options
| author | bors <bors@rust-lang.org> | 2022-09-01 22:12:32 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-09-01 22:12:32 +0000 |
| commit | 10706d62da83c4ec215165bc72df46219536648f (patch) | |
| tree | 56447cae81680c661c794e470279f32f9dbf7f8a /src/librustdoc | |
| parent | 2e35f954ada0f0c777844dc4fa66684efe90a035 (diff) | |
| parent | 1c12dedd5382804b6ea289e36969340194f8d44c (diff) | |
Auto merge of #101295 - matthiaskrgr:rollup-046o38p, r=matthiaskrgr
Rollup of 14 pull requests
Successful merges:
- #94467 (Add `special_module_name` lint)
- #100852 (Use `getuid` to check instead of `USER` env var in rustbuild)
- #101072 (bootstrap: Add llvm-has-rust-patches target option)
- #101190 (Make docs formulation more consistent for NonZero{int})
- #101245 (Remove unneeded where whitespace)
- #101251 (Fix bad target name in Walkthrough)
- #101254 (rustdoc: remove unused `.docblock .impl-items` CSS)
- #101256 (Fixes/adjustments to Fuchsia doc walkthrough)
- #101270 (Update outdated comment about output capturing in print_to.)
- #101271 (Fix filename of armv4t-none-eabi.md)
- #101274 (Fix typo in comment)
- #101279 (Fix doc_auto_cfg for impl blocks in different modules with different `cfg`)
- #101285 (Do not suggest adding `move` to closure when `move` is already used)
- #101292 (rustdoc: remove unneeded CSS `.content table td:first-child > a`)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'src/librustdoc')
| -rw-r--r-- | src/librustdoc/html/format.rs | 13 | ||||
| -rw-r--r-- | src/librustdoc/html/render/mod.rs | 12 | ||||
| -rw-r--r-- | src/librustdoc/html/static/css/rustdoc.css | 9 | ||||
| -rw-r--r-- | src/librustdoc/passes/propagate_doc_cfg.rs | 60 | ||||
| -rw-r--r-- | src/librustdoc/passes/stripper.rs | 2 |
5 files changed, 51 insertions, 45 deletions
diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 6f49f00f93e..be10a5c101f 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -349,8 +349,7 @@ pub(crate) fn print_where_clause<'a, 'tcx: 'a>( let where_preds = comma_sep(where_predicates, false); let clause = if f.alternate() { if ending == Ending::Newline { - // add a space so stripping <br> tags and breaking spaces still renders properly - format!(" where{where_preds}, ") + format!(" where{where_preds},") } else { format!(" where{where_preds}") } @@ -364,20 +363,16 @@ pub(crate) fn print_where_clause<'a, 'tcx: 'a>( if ending == Ending::Newline { let mut clause = " ".repeat(indent.saturating_sub(1)); - // add a space so stripping <br> tags and breaking spaces still renders properly - write!( - clause, - " <span class=\"where fmt-newline\">where{where_preds}, </span>" - )?; + write!(clause, "<span class=\"where fmt-newline\">where{where_preds},</span>")?; clause } else { // insert a <br> tag after a single space but before multiple spaces at the start if indent == 0 { - format!(" <br><span class=\"where\">where{where_preds}</span>") + format!("<br><span class=\"where\">where{where_preds}</span>") } else { let mut clause = br_with_padding; clause.truncate(clause.len() - 5 * " ".len()); - write!(clause, " <span class=\"where\">where{where_preds}</span>")?; + write!(clause, "<span class=\"where\">where{where_preds}</span>")?; clause } } diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index eff34047e3c..7577c719623 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1737,8 +1737,8 @@ pub(crate) fn render_impl_summary( // in documentation pages for trait with automatic implementations like "Send" and "Sync". aliases: &[String], ) { - let id = - cx.derive_id(get_id_for_impl(&i.inner_impl().for_, i.inner_impl().trait_.as_ref(), cx)); + let inner_impl = i.inner_impl(); + let id = cx.derive_id(get_id_for_impl(&inner_impl.for_, inner_impl.trait_.as_ref(), cx)); let aliases = if aliases.is_empty() { String::new() } else { @@ -1750,9 +1750,9 @@ pub(crate) fn render_impl_summary( write!(w, "<h3 class=\"code-header in-band\">"); if let Some(use_absolute) = use_absolute { - write!(w, "{}", i.inner_impl().print(use_absolute, cx)); + write!(w, "{}", inner_impl.print(use_absolute, cx)); if show_def_docs { - for it in &i.inner_impl().items { + for it in &inner_impl.items { if let clean::AssocTypeItem(ref tydef, ref _bounds) = *it.kind { w.write_str("<span class=\"where fmt-newline\"> "); assoc_type( @@ -1770,11 +1770,11 @@ pub(crate) fn render_impl_summary( } } } else { - write!(w, "{}", i.inner_impl().print(false, cx)); + write!(w, "{}", inner_impl.print(false, cx)); } write!(w, "</h3>"); - let is_trait = i.inner_impl().trait_.is_some(); + let is_trait = inner_impl.trait_.is_some(); if is_trait { if let Some(portability) = portability(&i.impl_item, Some(parent)) { write!(w, "<span class=\"item-info\">{}</span>", portability); diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index c117e3ac40d..abbfecd8497 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -207,7 +207,6 @@ h1, h2, h3, h4, h5, h6, a.source, .search-input, .search-results .result-name, -.content table td:first-child > a, .item-left > a, .out-of-band, span.since, @@ -759,14 +758,6 @@ pre, .rustdoc.source .example-wrap { margin-bottom: 15px; } -.content .docblock > .impl-items { - margin-left: 20px; - margin-top: -34px; -} -.content .docblock >.impl-items table td { - padding: 0; -} - .item-info { display: block; } diff --git a/src/librustdoc/passes/propagate_doc_cfg.rs b/src/librustdoc/passes/propagate_doc_cfg.rs index 2b12d118bca..765f7c61bd3 100644 --- a/src/librustdoc/passes/propagate_doc_cfg.rs +++ b/src/librustdoc/passes/propagate_doc_cfg.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use crate::clean::cfg::Cfg; use crate::clean::inline::{load_attrs, merge_attrs}; -use crate::clean::{Crate, Item}; +use crate::clean::{Crate, Item, ItemKind}; use crate::core::DocContext; use crate::fold::DocFolder; use crate::passes::Pass; @@ -26,30 +26,50 @@ struct CfgPropagator<'a, 'tcx> { cx: &'a mut DocContext<'tcx>, } -impl<'a, 'tcx> DocFolder for CfgPropagator<'a, 'tcx> { - fn fold_item(&mut self, mut item: Item) -> Option<Item> { - let old_parent_cfg = self.parent_cfg.clone(); +impl<'a, 'tcx> CfgPropagator<'a, 'tcx> { + // Some items need to merge their attributes with their parents' otherwise a few of them + // (mostly `cfg` ones) will be missing. + fn merge_with_parent_attributes(&mut self, item: &mut Item) { + let check_parent = match &*item.kind { + // impl blocks can be in different modules with different cfg and we need to get them + // as well. + ItemKind::ImplItem(_) => false, + kind if kind.is_non_assoc() => true, + _ => return, + }; - if item.kind.is_non_assoc() && - let Some(def_id) = item.item_id.as_def_id().and_then(|def_id| def_id.as_local()) { - let hir = self.cx.tcx.hir(); - let hir_id = hir.local_def_id_to_hir_id(def_id); + let Some(def_id) = item.item_id.as_def_id().and_then(|def_id| def_id.as_local()) + else { return }; + + let hir = self.cx.tcx.hir(); + let hir_id = hir.local_def_id_to_hir_id(def_id); + + if check_parent { let expected_parent = hir.get_parent_item(hir_id); + // If parents are different, it means that `item` is a reexport and we need + // to compute the actual `cfg` by iterating through its "real" parents. + if self.parent == Some(expected_parent) { + return; + } + } - // If parents are different, it means that `item` is a reexport and we need to compute - // the actual `cfg` by iterating through its "real" parents. - if self.parent != Some(expected_parent) { - let mut attrs = Vec::new(); - for (parent_hir_id, _) in hir.parent_iter(hir_id) { - if let Some(def_id) = hir.opt_local_def_id(parent_hir_id) { - attrs.extend_from_slice(load_attrs(self.cx, def_id.to_def_id())); - } - } - let (_, cfg) = - merge_attrs(self.cx, None, item.attrs.other_attrs.as_slice(), Some(&attrs)); - item.cfg = cfg; + let mut attrs = Vec::new(); + for (parent_hir_id, _) in hir.parent_iter(hir_id) { + if let Some(def_id) = hir.opt_local_def_id(parent_hir_id) { + attrs.extend_from_slice(load_attrs(self.cx, def_id.to_def_id())); } } + let (_, cfg) = merge_attrs(self.cx, None, item.attrs.other_attrs.as_slice(), Some(&attrs)); + item.cfg = cfg; + } +} + +impl<'a, 'tcx> DocFolder for CfgPropagator<'a, 'tcx> { + fn fold_item(&mut self, mut item: Item) -> Option<Item> { + let old_parent_cfg = self.parent_cfg.clone(); + + self.merge_with_parent_attributes(&mut item); + let new_cfg = match (self.parent_cfg.take(), item.cfg.take()) { (None, None) => None, (Some(rc), None) | (None, Some(rc)) => Some(rc), diff --git a/src/librustdoc/passes/stripper.rs b/src/librustdoc/passes/stripper.rs index 83ed3752a82..a9d768f0149 100644 --- a/src/librustdoc/passes/stripper.rs +++ b/src/librustdoc/passes/stripper.rs @@ -91,7 +91,7 @@ impl<'a> DocFolder for Stripper<'a> { clean::ExternCrateItem { .. } => {} clean::ImportItem(ref imp) => { // Because json doesn't inline imports from private modules, we need to mark - // the imported item as retained so it's impls won't be stripped.i + // the imported item as retained so it's impls won't be stripped. // // FIXME: Is it necessary to check for json output here: See // https://github.com/rust-lang/rust/pull/100325#discussion_r941495215 |
