diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 66edbf82017..1457c454c57 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -279,18 +279,17 @@ fn path(w: &mut io::Writer, path: &clean::Path, print_all: bool, } /// Helper to render type parameters -fn typarams(w: &mut io::Writer, +fn tybounds(w: &mut io::Writer, typarams: &Option >) -> fmt::Result { match *typarams { Some(ref params) => { - try!(write!(w, "<")); + try!(write!(w, ":")); for (i, param) in params.iter().enumerate() { if i > 0 { - try!(write!(w, ", ")); + try!(write!(w, " + ")); } try!(write!(w, "{}", *param)); } - try!(write!(w, ">")); Ok(()) } None => Ok(()) @@ -308,13 +307,13 @@ impl fmt::Show for clean::Type { } clean::ResolvedPath{id, typarams: ref tp, path: ref path} => { try!(resolved_path(f.buf, id, path, false)); - typarams(f.buf, tp) + tybounds(f.buf, tp) } clean::ExternalPath{path: ref path, typarams: ref tp, fqn: ref fqn, kind, krate} => { try!(external_path(f.buf, path, false, fqn.as_slice(), kind, krate)) - typarams(f.buf, tp) + tybounds(f.buf, tp) } clean::Self(..) => f.buf.write("Self".as_bytes()), clean::Primitive(prim) => { @@ -338,26 +337,59 @@ impl fmt::Show for clean::Type { f.buf.write(s.as_bytes()) } clean::Closure(ref decl, ref region) => { - let region = match *region { - Some(ref region) => format!("{} ", *region), - None => ~"", - }; - - write!(f.buf, "{}{}|{}|{arrow, select, yes{ -> {ret}} other{}}", - FnStyleSpace(decl.fn_style), - region, - decl.decl.inputs, + write!(f.buf, "{style}{lifetimes}|{args}|{bounds}\ + {arrow, select, yes{ -> {ret}} other{}}", + style = FnStyleSpace(decl.fn_style), + lifetimes = if decl.lifetimes.len() == 0 { + ~"" + } else { + format!("<{:#}>", decl.lifetimes) + }, + args = decl.decl.inputs, arrow = match decl.decl.output { clean::Unit => "no", _ => "yes" }, - ret = decl.decl.output) - // FIXME: where are bounds and lifetimes printed?! + ret = decl.decl.output, + bounds = { + let mut ret = StrBuf::new(); + match *region { + Some(ref lt) => { + ret.push_str(format!(": {}", *lt)); + } + None => {} + } + for bound in decl.bounds.iter() { + match *bound { + clean::RegionBound => {} + clean::TraitBound(ref t) => { + if ret.len() == 0 { + ret.push_str(": "); + } else { + ret.push_str(" + "); + } + ret.push_str(format!("{}", *t)); + } + } + } + ret.into_owned() + }) } clean::Proc(ref decl) => { - write!(f.buf, "{}proc({}){arrow, select, yes{ -> {ret}} other{}}", - FnStyleSpace(decl.fn_style), - decl.decl.inputs, + write!(f.buf, "{style}{lifetimes}proc({args}){bounds}\ + {arrow, select, yes{ -> {ret}} other{}}", + style = FnStyleSpace(decl.fn_style), + lifetimes = if decl.lifetimes.len() == 0 { + ~"" + } else { + format!("<{:#}>", decl.lifetimes) + }, + args = decl.decl.inputs, + bounds = if decl.bounds.len() == 0 { + ~"" + } else { + let mut m = decl.bounds.iter().map(|s| s.to_str()); + ": " + m.collect::<~[~str]>().connect(" + ") + }, arrow = match decl.decl.output { clean::Unit => "no", _ => "yes" }, ret = decl.decl.output) - // FIXME: where are bounds and lifetimes printed?! } clean::BareFunction(ref decl) => { write!(f.buf, "{}{}fn{}{}", diff --git a/src/libstd/slice.rs b/src/libstd/slice.rs index 28c5b56a7a7..aedaa5b3c15 100644 --- a/src/libstd/slice.rs +++ b/src/libstd/slice.rs @@ -2601,7 +2601,9 @@ impl Clone for ~[A] { impl<'a, T: fmt::Show> fmt::Show for &'a [T] { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - try!(write!(f.buf, "[")); + if f.flags & (1 << (fmt::parse::FlagAlternate as uint)) == 0 { + try!(write!(f.buf, "[")); + } let mut is_first = true; for x in self.iter() { if is_first { @@ -2611,7 +2613,10 @@ impl<'a, T: fmt::Show> fmt::Show for &'a [T] { } try!(write!(f.buf, "{}", *x)) } - write!(f.buf, "]") + if f.flags & (1 << (fmt::parse::FlagAlternate as uint)) == 0 { + try!(write!(f.buf, "]")); + } + Ok(()) } }