提交 45677047 编写于 作者: W William Throwe

Fix rustdoc formatting of impls

Some cases displayed negative impls as positive, and some were missing
where clauses.  This factors all the impl formatting into one
function so the different cases can't get out of sync again.
上级 e4e93196
......@@ -540,6 +540,19 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
}
}
impl fmt::Display for clean::Impl {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
try!(write!(f, "impl{} ", self.generics));
if let Some(ref ty) = self.trait_ {
try!(write!(f, "{}{} for ",
if self.polarity == Some(clean::ImplPolarity::Negative) { "!" } else { "" },
*ty));
}
try!(write!(f, "{}{}", self.for_, WhereClause(&self.generics)));
Ok(())
}
}
impl fmt::Display for clean::Arguments {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for (i, input) in self.values.iter().enumerate() {
......
......@@ -118,11 +118,8 @@ pub enum ExternalLocation {
/// Metadata about an implementor of a trait.
pub struct Implementor {
pub def_id: ast::DefId,
pub generics: clean::Generics,
pub trait_: clean::Type,
pub for_: clean::Type,
pub stability: Option<clean::Stability>,
pub polarity: Option<clean::ImplPolarity>,
pub impl_: clean::Impl,
}
/// Metadata about implementations for a type.
......@@ -644,10 +641,7 @@ fn collect(path: &Path, krate: &str,
// going on). If they're in different crates then the crate defining
// the trait will be interested in our implementation.
if imp.def_id.krate == did.krate { continue }
try!(write!(&mut f, r#""impl{} {}{} for {}","#,
imp.generics,
if imp.polarity == Some(clean::ImplPolarity::Negative) { "!" } else { "" },
imp.trait_, imp.for_));
try!(write!(&mut f, r#""{}","#, imp.impl_));
}
try!(writeln!(&mut f, r"];"));
try!(writeln!(&mut f, "{}", r"
......@@ -888,11 +882,8 @@ fn fold_item(&mut self, item: clean::Item) -> Option<clean::Item> {
Some(clean::ResolvedPath{ did, .. }) => {
self.implementors.entry(did).or_insert(vec![]).push(Implementor {
def_id: item.def_id,
generics: i.generics.clone(),
trait_: i.trait_.as_ref().unwrap().clone(),
for_: i.for_.clone(),
stability: item.stability.clone(),
polarity: i.polarity.clone(),
impl_: i.clone(),
});
}
Some(..) | None => {}
......@@ -1910,8 +1901,7 @@ fn trait_item(w: &mut fmt::Formatter, m: &clean::Item)
match cache.implementors.get(&it.def_id) {
Some(implementors) => {
for i in implementors {
try!(writeln!(w, "<li><code>impl{} {} for {}{}</code></li>",
i.generics, i.trait_, i.for_, WhereClause(&i.generics)));
try!(writeln!(w, "<li><code>{}</code></li>", i.impl_));
}
}
None => {}
......@@ -2335,16 +2325,7 @@ fn render_deref_methods(w: &mut fmt::Formatter, impl_: &Impl) -> fmt::Result {
fn render_impl(w: &mut fmt::Formatter, i: &Impl, link: AssocItemLink,
render_header: bool) -> fmt::Result {
if render_header {
try!(write!(w, "<h3 class='impl'><code>impl{} ",
i.impl_.generics));
if let Some(clean::ImplPolarity::Negative) = i.impl_.polarity {
try!(write!(w, "!"));
}
if let Some(ref ty) = i.impl_.trait_ {
try!(write!(w, "{} for ", *ty));
}
try!(write!(w, "{}{}</code></h3>", i.impl_.for_,
WhereClause(&i.impl_.generics)));
try!(write!(w, "<h3 class='impl'><code>{}</code></h3>", i.impl_));
if let Some(ref dox) = i.dox {
try!(write!(w, "<div class='docblock'>{}</div>", Markdown(dox)));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册