diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs
index ebccb1188cc75..02ba4aabc9919 100644
--- a/src/librustdoc/html/format.rs
+++ b/src/librustdoc/html/format.rs
@@ -478,7 +478,25 @@ impl fmt::Show for clean::Type {
Some(ref l) => format!("{} ", *l),
_ => "".to_string(),
};
- write!(f, "&{}{}{}", lt, MutableSpace(mutability), **ty)
+ let m = MutableSpace(mutability);
+ match **ty {
+ clean::Vector(ref bt) => { // BorrowedRef{ ... Vector(T) } is &[T]
+ match **bt {
+ clean::Generic(_) =>
+ primitive_link(f, clean::Slice,
+ format!("&{}{}[{}]", lt, m, **bt).as_slice()),
+ _ => {
+ try!(primitive_link(f, clean::Slice,
+ format!("&{}{}[", lt, m).as_slice()));
+ try!(write!(f, "{}", **bt));
+ primitive_link(f, clean::Slice, "]")
+ }
+ }
+ }
+ _ => {
+ write!(f, "&{}{}{}", lt, m, **ty)
+ }
+ }
}
clean::Unique(..) => {
fail!("should have been cleaned")