From 598a02c6ad78fc00fbfc1370391c645b9446e3f1 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 30 Sep 2022 14:19:19 -0700 Subject: [PATCH] rustdoc: remove orphaned link on array bracket This is 682889fb06591c4245422b73b005c5d8ae2d0cad, but for arrays instead. For non-generics, this retains links to the array page, but instead of trying to link it all, it only links the length part, which distinguishes arrays from slices. For generics, the entire thing becomes a link, just like slices. --- src/librustdoc/html/format.rs | 26 +++++++++++------ .../rustdoc/array-links.link_box_generic.html | 1 + .../rustdoc/array-links.link_box_u32.html | 1 + .../array-links.link_slice_generic.html | 1 + .../rustdoc/array-links.link_slice_u32.html | 1 + src/test/rustdoc/array-links.rs | 28 +++++++++++++++++++ 6 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 src/test/rustdoc/array-links.link_box_generic.html create mode 100644 src/test/rustdoc/array-links.link_box_u32.html create mode 100644 src/test/rustdoc/array-links.link_slice_generic.html create mode 100644 src/test/rustdoc/array-links.link_slice_u32.html create mode 100644 src/test/rustdoc/array-links.rs diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index b499e186cc046..6d46267931bad 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -1010,15 +1010,25 @@ fn fmt_type<'cx>( write!(f, "]") } }, - clean::Array(ref t, ref n) => { - primitive_link(f, PrimitiveType::Array, "[", cx)?; - fmt::Display::fmt(&t.print(cx), f)?; - if f.alternate() { - primitive_link(f, PrimitiveType::Array, &format!("; {}]", n), cx) - } else { - primitive_link(f, PrimitiveType::Array, &format!("; {}]", Escape(n)), cx) + clean::Array(ref t, ref n) => match **t { + clean::Generic(name) if !f.alternate() => primitive_link( + f, + PrimitiveType::Array, + &format!("[{name}; {n}]", n = Escape(n)), + cx, + ), + _ => { + write!(f, "[")?; + fmt::Display::fmt(&t.print(cx), f)?; + if f.alternate() { + write!(f, "; {n}")?; + } else { + write!(f, "; ")?; + primitive_link(f, PrimitiveType::Array, &format!("{n}", n = Escape(n)), cx)?; + } + write!(f, "]") } - } + }, clean::RawPointer(m, ref t) => { let m = match m { hir::Mutability::Mut => "mut", diff --git a/src/test/rustdoc/array-links.link_box_generic.html b/src/test/rustdoc/array-links.link_box_generic.html new file mode 100644 index 0000000000000..3481bb6a02547 --- /dev/null +++ b/src/test/rustdoc/array-links.link_box_generic.html @@ -0,0 +1 @@ +pub fn delta<T>() -> MyBox<[T; 1]> \ No newline at end of file diff --git a/src/test/rustdoc/array-links.link_box_u32.html b/src/test/rustdoc/array-links.link_box_u32.html new file mode 100644 index 0000000000000..e864ae55c9f4b --- /dev/null +++ b/src/test/rustdoc/array-links.link_box_u32.html @@ -0,0 +1 @@ +pub fn gamma() -> MyBox<[u32; 1]> \ No newline at end of file diff --git a/src/test/rustdoc/array-links.link_slice_generic.html b/src/test/rustdoc/array-links.link_slice_generic.html new file mode 100644 index 0000000000000..f1ca2f59bd7ca --- /dev/null +++ b/src/test/rustdoc/array-links.link_slice_generic.html @@ -0,0 +1 @@ +pub fn beta<T>() -> &'static [T; 1] \ No newline at end of file diff --git a/src/test/rustdoc/array-links.link_slice_u32.html b/src/test/rustdoc/array-links.link_slice_u32.html new file mode 100644 index 0000000000000..c3943e8d32122 --- /dev/null +++ b/src/test/rustdoc/array-links.link_slice_u32.html @@ -0,0 +1 @@ +pub fn alpha() -> &'static [u32; 1] \ No newline at end of file diff --git a/src/test/rustdoc/array-links.rs b/src/test/rustdoc/array-links.rs new file mode 100644 index 0000000000000..07f92ac51b9f5 --- /dev/null +++ b/src/test/rustdoc/array-links.rs @@ -0,0 +1,28 @@ +#![crate_name = "foo"] +#![no_std] + +pub struct MyBox(*const T); + +// @has 'foo/fn.alpha.html' +// @snapshot link_slice_u32 - '//pre[@class="rust fn"]/code' +pub fn alpha() -> &'static [u32; 1] { + loop {} +} + +// @has 'foo/fn.beta.html' +// @snapshot link_slice_generic - '//pre[@class="rust fn"]/code' +pub fn beta() -> &'static [T; 1] { + loop {} +} + +// @has 'foo/fn.gamma.html' +// @snapshot link_box_u32 - '//pre[@class="rust fn"]/code' +pub fn gamma() -> MyBox<[u32; 1]> { + loop {} +} + +// @has 'foo/fn.delta.html' +// @snapshot link_box_generic - '//pre[@class="rust fn"]/code' +pub fn delta() -> MyBox<[T; 1]> { + loop {} +}