diff options
| author | bors <bors@rust-lang.org> | 2021-06-09 03:15:34 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-06-09 03:15:34 +0000 |
| commit | c8381389ee10e3c0505ccb5bac05382de1b9f99d (patch) | |
| tree | 803eab2ca047060b033973af85d031498d6c6e04 /src | |
| parent | ed597e7e19d0fe716d9f81b1e840a5abbfd7c28d (diff) | |
| parent | d8376f486566be409d8e6dab4f6cb7de1982c601 (diff) | |
| download | rust-c8381389ee10e3c0505ccb5bac05382de1b9f99d.tar.gz rust-c8381389ee10e3c0505ccb5bac05382de1b9f99d.zip | |
Auto merge of #86160 - JohnTitor:rollup-8ark9x7, r=JohnTitor
Rollup of 11 pull requests Successful merges: - #85676 (Fix documentation style inconsistencies for IP addresses) - #85715 (Document `From` impls in string.rs) - #85791 (Add `Ipv6Addr::is_unicast`) - #85957 (Display defaults on const params- rustdoc ) - #85982 (Enable rustdoc to document safe wasm intrinsics) - #86121 (Forwarding implementation for Seek trait's stream_position method) - #86124 (Include macro name in 'local ambiguity' error) - #86128 (Refactor: Extract render_summary from render_impl.) - #86142 (Simplify proc_macro code using Bound::cloned().) - #86158 (Update books) - #86159 (Update cargo) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'src')
| m--------- | src/doc/reference | 0 | ||||
| m--------- | src/doc/rustc-dev-guide | 0 | ||||
| -rw-r--r-- | src/librustdoc/clean/auto_trait.rs | 5 | ||||
| -rw-r--r-- | src/librustdoc/clean/mod.rs | 13 | ||||
| -rw-r--r-- | src/librustdoc/clean/types.rs | 1 | ||||
| -rw-r--r-- | src/librustdoc/html/format.rs | 16 | ||||
| -rw-r--r-- | src/librustdoc/html/render/mod.rs | 164 | ||||
| -rw-r--r-- | src/librustdoc/json/conversions.rs | 4 | ||||
| -rw-r--r-- | src/librustdoc/json/mod.rs | 2 | ||||
| -rw-r--r-- | src/rustdoc-json-types/lib.rs | 2 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/wasm-safe.rs | 7 | ||||
| -rw-r--r-- | src/test/rustdoc/const-generics/const-generic-defaults.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/macros/local-ambiguity-multiple-parsing-options.stderr | 4 | ||||
| m--------- | src/tools/cargo | 0 |
14 files changed, 134 insertions, 90 deletions
diff --git a/src/doc/reference b/src/doc/reference -Subproject 9c68af3ce6ccca2395e1868addef26a0542e9dd +Subproject 8f598e2af6c25b4a7ee88ef6a8196d9b8ea50ca diff --git a/src/doc/rustc-dev-guide b/src/doc/rustc-dev-guide -Subproject 50de7f0682adc5d95ce858fe6318d19b4b95155 +Subproject c8da5bfd1c7c71d90ef1646f5e0a9f6609d5c78 diff --git a/src/librustdoc/clean/auto_trait.rs b/src/librustdoc/clean/auto_trait.rs index 35ff57f85a5..a3f63ea1046 100644 --- a/src/librustdoc/clean/auto_trait.rs +++ b/src/librustdoc/clean/auto_trait.rs @@ -664,7 +664,10 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> { } } GenericParamDefKind::Lifetime => {} - GenericParamDefKind::Const { .. } => {} + GenericParamDefKind::Const { ref mut default, .. } => { + // We never want something like `impl<const N: usize = 10>` + default.take(); + } } } diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 231f13adeb6..d1c18821ea6 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -445,11 +445,15 @@ impl Clean<GenericParamDef> for ty::GenericParamDef { }, ) } - ty::GenericParamDefKind::Const { .. } => ( + ty::GenericParamDefKind::Const { has_default, .. } => ( self.name, GenericParamDefKind::Const { did: self.def_id, ty: cx.tcx.type_of(self.def_id).clean(cx), + default: match has_default { + true => Some(cx.tcx.const_param_default(self.def_id).to_string()), + false => None, + }, }, ), }; @@ -487,12 +491,15 @@ impl Clean<GenericParamDef> for hir::GenericParam<'_> { synthetic, }, ), - hir::GenericParamKind::Const { ref ty, default: _ } => ( + hir::GenericParamKind::Const { ref ty, default } => ( self.name.ident().name, GenericParamDefKind::Const { did: cx.tcx.hir().local_def_id(self.hir_id).to_def_id(), ty: ty.clean(cx), - // FIXME(const_generics_defaults): add `default` field here for docs + default: default.map(|ct| { + let def_id = cx.tcx.hir().local_def_id(ct.hir_id); + ty::Const::from_anon_const(cx.tcx, def_id).to_string() + }), }, ), }; diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index fa1639f9dc3..6a7c3f8caa4 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -1220,6 +1220,7 @@ crate enum GenericParamDefKind { Const { did: DefId, ty: Type, + default: Option<String>, }, } diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index d5213fd7711..918a5cb5094 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -177,12 +177,22 @@ impl clean::GenericParamDef { Ok(()) } - clean::GenericParamDefKind::Const { ref ty, .. } => { + clean::GenericParamDefKind::Const { ref ty, ref default, .. } => { if f.alternate() { - write!(f, "const {}: {:#}", self.name, ty.print(cx)) + write!(f, "const {}: {:#}", self.name, ty.print(cx))?; } else { - write!(f, "const {}: {}", self.name, ty.print(cx)) + write!(f, "const {}: {}", self.name, ty.print(cx))?; } + + if let Some(default) = default { + if f.alternate() { + write!(f, " = {:#}", default)?; + } else { + write!(f, " = {}", default)?; + } + } + + Ok(()) } }) } diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 4b6faefc2fb..2e940a31c2a 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1286,7 +1286,6 @@ fn render_impl( // in documentation pages for trait with automatic implementations like "Send" and "Sync". aliases: &[String], ) { - let tcx = cx.tcx(); let cache = cx.cache(); let traits = &cache.traits; let trait_ = i.trait_did_full(cache).map(|did| &traits[&did]); @@ -1558,94 +1557,34 @@ fn render_impl( ); } } - let toggled = !impl_items.is_empty() || !default_impl_items.is_empty(); - let open_details = |close_tags: &mut String, is_collapsed: bool| { + if render_mode == RenderMode::Normal { + let is_implementing_trait = i.inner_impl().trait_.is_some(); + let toggled = !impl_items.is_empty() || !default_impl_items.is_empty(); if toggled { close_tags.insert_str(0, "</details>"); - if is_collapsed { - "<details class=\"rustdoc-toggle implementors-toggle\"><summary>" + if is_implementing_trait { + write!(w, "<details class=\"rustdoc-toggle implementors-toggle\">"); } else { - "<details class=\"rustdoc-toggle implementors-toggle\" open><summary>" + write!(w, "<details class=\"rustdoc-toggle implementors-toggle\" open>"); } - } else { - "" } - }; - if render_mode == RenderMode::Normal { - let is_implementing_trait; - let id = cx.derive_id(match i.inner_impl().trait_ { - Some(ref t) => { - is_implementing_trait = true; - if is_on_foreign_type { - get_id_for_impl_on_foreign_type(&i.inner_impl().for_, t, cx) - } else { - format!("impl-{}", small_url_encode(format!("{:#}", t.print(cx)))) - } - } - None => { - is_implementing_trait = false; - "impl".to_string() - } - }); - let aliases = if aliases.is_empty() { - String::new() - } else { - format!(" data-aliases=\"{}\"", aliases.join(",")) - }; - if let Some(use_absolute) = use_absolute { - write!( - w, - "{}<div id=\"{}\" class=\"impl has-srclink\"{}>\ - <code class=\"in-band\">", - open_details(&mut close_tags, is_implementing_trait), - id, - aliases - ); - write!(w, "{}", i.inner_impl().print(use_absolute, cx)); - if show_def_docs { - for it in &i.inner_impl().items { - if let clean::TypedefItem(ref tydef, _) = *it.kind { - w.write_str("<span class=\"where fmt-newline\"> "); - assoc_type( - w, - it, - &[], - Some(&tydef.type_), - AssocItemLink::Anchor(None), - "", - cx, - ); - w.write_str(";</span>"); - } - } - } - w.write_str("</code>"); - } else { - write!( - w, - "{}<div id=\"{}\" class=\"impl has-srclink\"{}>\ - <code class=\"in-band\">{}</code>", - open_details(&mut close_tags, is_implementing_trait), - id, - aliases, - i.inner_impl().print(false, cx) - ); + if toggled { + write!(w, "<summary>") } - write!(w, "<a href=\"#{}\" class=\"anchor\"></a>", id); - render_stability_since_raw( + render_impl_summary( w, - i.impl_item.stable_since(tcx).as_deref(), - i.impl_item.const_stable_since(tcx).as_deref(), + cx, + i, outer_version, outer_const_version, + show_def_docs, + use_absolute, + is_on_foreign_type, + aliases, ); - write_srclink(cx, &i.impl_item, w); - if !toggled { - w.write_str("</div>"); - } else { - w.write_str("</div></summary>"); + if toggled { + write!(w, "</summary>") } - if trait_.is_some() { if let Some(portability) = portability(&i.impl_item, Some(parent)) { write!(w, "<div class=\"item-info\">{}</div>", portability); @@ -1678,6 +1617,75 @@ fn render_impl( w.write_str(&close_tags); } +fn render_impl_summary( + w: &mut Buffer, + cx: &Context<'_>, + i: &Impl, + outer_version: Option<&str>, + outer_const_version: Option<&str>, + show_def_docs: bool, + use_absolute: Option<bool>, + is_on_foreign_type: bool, + // This argument is used to reference same type with different paths to avoid duplication + // in documentation pages for trait with automatic implementations like "Send" and "Sync". + aliases: &[String], +) { + let tcx = cx.tcx(); + let id = cx.derive_id(match i.inner_impl().trait_ { + Some(ref t) => { + if is_on_foreign_type { + get_id_for_impl_on_foreign_type(&i.inner_impl().for_, t, cx) + } else { + format!("impl-{}", small_url_encode(format!("{:#}", t.print(cx)))) + } + } + None => "impl".to_string(), + }); + let aliases = if aliases.is_empty() { + String::new() + } else { + format!(" data-aliases=\"{}\"", aliases.join(",")) + }; + if let Some(use_absolute) = use_absolute { + write!( + w, + "<div id=\"{}\" class=\"impl has-srclink\"{}>\ + <code class=\"in-band\">", + id, aliases + ); + write!(w, "{}", i.inner_impl().print(use_absolute, cx)); + if show_def_docs { + for it in &i.inner_impl().items { + if let clean::TypedefItem(ref tydef, _) = *it.kind { + w.write_str("<span class=\"where fmt-newline\"> "); + assoc_type(w, it, &[], Some(&tydef.type_), AssocItemLink::Anchor(None), "", cx); + w.write_str(";</span>"); + } + } + } + w.write_str("</code>"); + } else { + write!( + w, + "<div id=\"{}\" class=\"impl has-srclink\"{}>\ + <code class=\"in-band\">{}</code>", + id, + aliases, + i.inner_impl().print(false, cx) + ); + } + write!(w, "<a href=\"#{}\" class=\"anchor\"></a>", id); + render_stability_since_raw( + w, + i.impl_item.stable_since(tcx).as_deref(), + i.impl_item.const_stable_since(tcx).as_deref(), + outer_version, + outer_const_version, + ); + write_srclink(cx, &i.impl_item, w); + w.write_str("</div>"); +} + fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) { let parentlen = cx.current.len() - if it.is_mod() { 1 } else { 0 }; diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index bee62915ea9..7086dd8c4d2 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -317,7 +317,9 @@ impl FromWithTcx<clean::GenericParamDefKind> for GenericParamDefKind { bounds: bounds.into_iter().map(|x| x.into_tcx(tcx)).collect(), default: default.map(|x| x.into_tcx(tcx)), }, - Const { did: _, ty } => GenericParamDefKind::Const(ty.into_tcx(tcx)), + Const { did: _, ty, default } => { + GenericParamDefKind::Const { ty: ty.into_tcx(tcx), default } + } } } } diff --git a/src/librustdoc/json/mod.rs b/src/librustdoc/json/mod.rs index f8bd9710813..0d84bf250c9 100644 --- a/src/librustdoc/json/mod.rs +++ b/src/librustdoc/json/mod.rs @@ -234,7 +234,7 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> { ) }) .collect(), - format_version: 5, + format_version: 6, }; let mut p = self.out_path.clone(); p.push(output.index.get(&output.root).unwrap().name.clone().unwrap()); diff --git a/src/rustdoc-json-types/lib.rs b/src/rustdoc-json-types/lib.rs index 72a4d9a1830..6d9a5cb515a 100644 --- a/src/rustdoc-json-types/lib.rs +++ b/src/rustdoc-json-types/lib.rs @@ -324,7 +324,7 @@ pub struct GenericParamDef { pub enum GenericParamDefKind { Lifetime, Type { bounds: Vec<GenericBound>, default: Option<Type> }, - Const(Type), + Const { ty: Type, default: Option<String> }, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] diff --git a/src/test/rustdoc-ui/wasm-safe.rs b/src/test/rustdoc-ui/wasm-safe.rs new file mode 100644 index 00000000000..80b15ace0ee --- /dev/null +++ b/src/test/rustdoc-ui/wasm-safe.rs @@ -0,0 +1,7 @@ +// check-pass + +#![feature(wasm_target_feature)] + +#[cfg(any(target_arch = "wasm32", doc))] +#[target_feature(enable = "simd128")] +pub fn foo() {} diff --git a/src/test/rustdoc/const-generics/const-generic-defaults.rs b/src/test/rustdoc/const-generics/const-generic-defaults.rs new file mode 100644 index 00000000000..efe35bf7aa4 --- /dev/null +++ b/src/test/rustdoc/const-generics/const-generic-defaults.rs @@ -0,0 +1,6 @@ +#![crate_name = "foo"] +#![feature(const_generics_defaults)] + +// @has foo/struct.Foo.html '//pre[@class="rust struct"]' \ +// 'pub struct Foo<const M: usize = 10_usize, const N: usize = M, T = i32>(_);' +pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>(T); diff --git a/src/test/ui/macros/local-ambiguity-multiple-parsing-options.stderr b/src/test/ui/macros/local-ambiguity-multiple-parsing-options.stderr index 0ae56c42221..68b278fd3c8 100644 --- a/src/test/ui/macros/local-ambiguity-multiple-parsing-options.stderr +++ b/src/test/ui/macros/local-ambiguity-multiple-parsing-options.stderr @@ -1,10 +1,10 @@ -error: local ambiguity: multiple parsing options: built-in NTs ident ('i') or ident ('j'). +error: local ambiguity when calling macro `ambiguity`: multiple parsing options: built-in NTs ident ('i') or ident ('j'). --> $DIR/local-ambiguity-multiple-parsing-options.rs:7:12 | LL | ambiguity!(error); | ^^^^^ -error: local ambiguity: multiple parsing options: built-in NTs ident ('i') or ident ('j'). +error: local ambiguity when calling macro `ambiguity`: multiple parsing options: built-in NTs ident ('i') or ident ('j'). --> $DIR/local-ambiguity-multiple-parsing-options.rs:8:12 | LL | ambiguity!(error); diff --git a/src/tools/cargo b/src/tools/cargo -Subproject 0cecbd67323ca14a7eb6505900d0d7307b00355 +Subproject aa8b09297bb3156b849e73db48af4cd050492fe |
