std: Tweak String implementations
This commit performs a pass over the implementations of the new `String` trait
in the formatting module. Some implementations were removed as a conservative
move pending an upcoming convention about `String` implementations, and some
were added in order to retain consistency across the libraries. Specifically:
* All "smart pointers" implement `String` now, adding missing implementations
for `Arc` and `Rc`.
* The `Vec<T>` and `[T]` types no longer implement `String`.
* The `*const T` and `*mut T` type no longer implement `String`.
* The `()` type no longer implements `String`.
* The `Path` type's `Show` implementation does not surround itself with `Path
{}` (a minor tweak).
All implementations of `String` in this PR were also marked `#[stable]` to
indicate that the types will continue to implement the `String` trait regardless
of what it looks like.
This commit is contained in:
@@ -51,6 +51,8 @@ pub struct ConciseStability<'a>(pub &'a Option<clean::Stability>);
|
||||
pub struct WhereClause<'a>(pub &'a clean::Generics);
|
||||
/// Wrapper struct for emitting type parameter bounds.
|
||||
pub struct TyParamBounds<'a>(pub &'a [clean::TyParamBound]);
|
||||
/// Wrapper struct for emitting a comma-separated list of items
|
||||
pub struct CommaSep<'a, T: 'a>(pub &'a [T]);
|
||||
|
||||
impl VisSpace {
|
||||
pub fn get(&self) -> Option<ast::Visibility> {
|
||||
@@ -64,6 +66,16 @@ impl UnsafetySpace {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T: fmt::String> fmt::String for CommaSep<'a, T> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
for (i, item) in self.0.iter().enumerate() {
|
||||
if i != 0 { try!(write!(f, ", ")); }
|
||||
try!(write!(f, "{}", item));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
//NOTE(stage0): remove impl after snapshot
|
||||
#[cfg(stage0)]
|
||||
impl<'a> fmt::Show for TyParamBounds<'a> {
|
||||
@@ -530,7 +542,8 @@ impl fmt::String for clean::Type {
|
||||
lifetimes = if decl.lifetimes.len() == 0 {
|
||||
"".to_string()
|
||||
} else {
|
||||
format!("for <{:#}>", decl.lifetimes)
|
||||
format!("for <{}>",
|
||||
CommaSep(decl.lifetimes.as_slice()))
|
||||
},
|
||||
args = decl.decl.inputs,
|
||||
arrow = decl.decl.output,
|
||||
@@ -562,7 +575,8 @@ impl fmt::String for clean::Type {
|
||||
lifetimes = if decl.lifetimes.len() == 0 {
|
||||
"".to_string()
|
||||
} else {
|
||||
format!("for <{:#}>", decl.lifetimes)
|
||||
format!("for <{}>",
|
||||
CommaSep(decl.lifetimes.as_slice()))
|
||||
},
|
||||
args = decl.decl.inputs,
|
||||
bounds = if decl.bounds.len() == 0 {
|
||||
@@ -592,7 +606,8 @@ impl fmt::String for clean::Type {
|
||||
primitive_link(f, clean::PrimitiveTuple,
|
||||
match typs.as_slice() {
|
||||
[ref one] => format!("({},)", one),
|
||||
many => format!("({:#})", many)
|
||||
many => format!("({})",
|
||||
CommaSep(many.as_slice()))
|
||||
}.as_slice())
|
||||
}
|
||||
clean::Vector(ref t) => {
|
||||
|
||||
Reference in New Issue
Block a user