rustdoc: Render associated type bindings
e.g. `Foo<Output=A>` This does not work cross-crate unfortunately. Part of #20646
This commit is contained in:
parent
9f1ead8fad
commit
a0734ff7e0
2 changed files with 48 additions and 4 deletions
|
@ -530,7 +530,8 @@ fn external_path_params(cx: &DocContext, trait_did: Option<ast::DefId>,
|
||||||
_ => {
|
_ => {
|
||||||
return PathParameters::AngleBracketed {
|
return PathParameters::AngleBracketed {
|
||||||
lifetimes: lifetimes,
|
lifetimes: lifetimes,
|
||||||
types: types.clean(cx)
|
types: types.clean(cx),
|
||||||
|
bindings: vec![]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -547,6 +548,7 @@ fn external_path_params(cx: &DocContext, trait_did: Option<ast::DefId>,
|
||||||
PathParameters::AngleBracketed {
|
PathParameters::AngleBracketed {
|
||||||
lifetimes: lifetimes,
|
lifetimes: lifetimes,
|
||||||
types: types.clean(cx),
|
types: types.clean(cx),
|
||||||
|
bindings: vec![] // FIXME(#20646)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1766,6 +1768,7 @@ pub enum PathParameters {
|
||||||
AngleBracketed {
|
AngleBracketed {
|
||||||
lifetimes: Vec<Lifetime>,
|
lifetimes: Vec<Lifetime>,
|
||||||
types: Vec<Type>,
|
types: Vec<Type>,
|
||||||
|
bindings: Vec<TypeBinding>
|
||||||
},
|
},
|
||||||
Parenthesized {
|
Parenthesized {
|
||||||
inputs: Vec<Type>,
|
inputs: Vec<Type>,
|
||||||
|
@ -1779,7 +1782,8 @@ impl Clean<PathParameters> for ast::PathParameters {
|
||||||
ast::AngleBracketedParameters(ref data) => {
|
ast::AngleBracketedParameters(ref data) => {
|
||||||
PathParameters::AngleBracketed {
|
PathParameters::AngleBracketed {
|
||||||
lifetimes: data.lifetimes.clean(cx),
|
lifetimes: data.lifetimes.clean(cx),
|
||||||
types: data.types.clean(cx)
|
types: data.types.clean(cx),
|
||||||
|
bindings: data.bindings.clean(cx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2442,8 +2446,25 @@ fn lang_struct(cx: &DocContext, did: Option<ast::DefId>,
|
||||||
params: PathParameters::AngleBracketed {
|
params: PathParameters::AngleBracketed {
|
||||||
lifetimes: vec![],
|
lifetimes: vec![],
|
||||||
types: vec![t.clean(cx)],
|
types: vec![t.clean(cx)],
|
||||||
|
bindings: vec![]
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// An equality constraint on an associated type, e.g. `A=Bar` in `Foo<A=Bar>`
|
||||||
|
#[derive(Clone, PartialEq, RustcDecodable, RustcEncodable)]
|
||||||
|
pub struct TypeBinding {
|
||||||
|
pub name: String,
|
||||||
|
pub ty: Type
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Clean<TypeBinding> for ast::TypeBinding {
|
||||||
|
fn clean(&self, cx: &DocContext) -> TypeBinding {
|
||||||
|
TypeBinding {
|
||||||
|
name: self.ident.clean(cx),
|
||||||
|
ty: self.ty.clean(cx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -250,8 +250,10 @@ impl fmt::Show for clean::PathParameters {
|
||||||
impl fmt::String for clean::PathParameters {
|
impl fmt::String for clean::PathParameters {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
match *self {
|
match *self {
|
||||||
clean::PathParameters::AngleBracketed { ref lifetimes, ref types } => {
|
clean::PathParameters::AngleBracketed {
|
||||||
if lifetimes.len() > 0 || types.len() > 0 {
|
ref lifetimes, ref types, ref bindings
|
||||||
|
} => {
|
||||||
|
if lifetimes.len() > 0 || types.len() > 0 || bindings.len() > 0 {
|
||||||
try!(f.write_str("<"));
|
try!(f.write_str("<"));
|
||||||
let mut comma = false;
|
let mut comma = false;
|
||||||
for lifetime in lifetimes.iter() {
|
for lifetime in lifetimes.iter() {
|
||||||
|
@ -268,6 +270,13 @@ impl fmt::String for clean::PathParameters {
|
||||||
comma = true;
|
comma = true;
|
||||||
try!(write!(f, "{}", *ty));
|
try!(write!(f, "{}", *ty));
|
||||||
}
|
}
|
||||||
|
for binding in bindings.iter() {
|
||||||
|
if comma {
|
||||||
|
try!(f.write_str(", "));
|
||||||
|
}
|
||||||
|
comma = true;
|
||||||
|
try!(write!(f, "{}", *binding));
|
||||||
|
}
|
||||||
try!(f.write_str(">"));
|
try!(f.write_str(">"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -855,6 +864,7 @@ impl fmt::String for clean::ViewListIdent {
|
||||||
params: clean::PathParameters::AngleBracketed {
|
params: clean::PathParameters::AngleBracketed {
|
||||||
lifetimes: Vec::new(),
|
lifetimes: Vec::new(),
|
||||||
types: Vec::new(),
|
types: Vec::new(),
|
||||||
|
bindings: Vec::new()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
@ -865,6 +875,19 @@ impl fmt::String for clean::ViewListIdent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//NOTE(stage0): remove impl after snapshot
|
||||||
|
impl fmt::Show for clean::TypeBinding {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
fmt::String::fmt(self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::String for clean::TypeBinding {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "{}={}", self.name, self.ty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//NOTE(stage0): remove impl after snapshot
|
//NOTE(stage0): remove impl after snapshot
|
||||||
#[cfg(stage0)]
|
#[cfg(stage0)]
|
||||||
impl fmt::Show for MutableSpace {
|
impl fmt::Show for MutableSpace {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue