diff options
| author | bors <bors@rust-lang.org> | 2017-04-09 17:51:32 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-04-09 17:51:32 +0000 |
| commit | d616f47cd03a65fed13be2ee5527f24f6a4f7f92 (patch) | |
| tree | a3af2cda894abde784d405b75e4f8f0db4996a71 /src/librustdoc/html/render.rs | |
| parent | fa332c901575da70ac7a612609a26b752b1adc65 (diff) | |
| parent | 8dd4c44ef6c851afcc9651c9b32df005e35d0d1d (diff) | |
| download | rust-d616f47cd03a65fed13be2ee5527f24f6a4f7f92.tar.gz rust-d616f47cd03a65fed13be2ee5527f24f6a4f7f92.zip | |
Auto merge of #41084 - QuietMisdreavus:rustdoc-format-redux, r=frewsxcxv,GuillaumeGomez
rustdoc: update formatting of fn signatures and where clauses to match style rfcs Recent updates to style RFCs ([where clauses](https://github.com/rust-lang-nursery/fmt-rfcs/issues/38), [function definitions](https://github.com/rust-lang-nursery/fmt-rfcs/issues/39)) changed the "canonical" style for these items, so this is a rustdoc update to make it emit that style where necessary. This is mainly a conversion from visual indent to block indent, which helps out in situations where there was excessive indent causing lines to wrap regardless. Samples:        fixes #41025 and #40687 r? @rust-lang/docs
Diffstat (limited to 'src/librustdoc/html/render.rs')
| -rw-r--r-- | src/librustdoc/html/render.rs | 113 |
1 files changed, 55 insertions, 58 deletions
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 1e1202f0400..42a18345681 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -2016,13 +2016,13 @@ fn item_function(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, UnstableFeatures::Allow => f.constness, _ => hir::Constness::NotConst }; - let indent = format!("{}{}{}{:#}fn {}{:#}", - VisSpace(&it.visibility), - ConstnessSpace(vis_constness), - UnsafetySpace(f.unsafety), - AbiSpace(f.abi), - it.name.as_ref().unwrap(), - f.generics).len(); + let name_len = format!("{}{}{}{:#}fn {}{:#}", + VisSpace(&it.visibility), + ConstnessSpace(vis_constness), + UnsafetySpace(f.unsafety), + AbiSpace(f.abi), + it.name.as_ref().unwrap(), + f.generics).len(); write!(w, "<pre class='rust fn'>")?; render_attributes(w, it)?; write!(w, "{vis}{constness}{unsafety}{abi}fn \ @@ -2033,8 +2033,12 @@ fn item_function(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, abi = AbiSpace(f.abi), name = it.name.as_ref().unwrap(), generics = f.generics, - where_clause = WhereClause(&f.generics, 2), - decl = Method(&f.decl, indent))?; + where_clause = WhereClause { gens: &f.generics, indent: 0, end_newline: true }, + decl = Method { + decl: &f.decl, + name_len: name_len, + indent: 0, + })?; document(w, cx, it) } @@ -2062,14 +2066,18 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, // Output the trait definition write!(w, "<pre class='rust trait'>")?; render_attributes(w, it)?; - write!(w, "{}{}trait {}{}{}{} ", + write!(w, "{}{}trait {}{}{}", VisSpace(&it.visibility), UnsafetySpace(t.unsafety), it.name.as_ref().unwrap(), t.generics, - bounds, - // Where clauses in traits are indented nine spaces, per rustdoc.css - WhereClause(&t.generics, 9))?; + bounds)?; + + if !t.generics.where_predicates.is_empty() { + write!(w, "{}", WhereClause { gens: &t.generics, indent: 0, end_newline: true })?; + } else { + write!(w, " ")?; + } let types = t.items.iter().filter(|m| m.is_associated_type()).collect::<Vec<_>>(); let consts = t.items.iter().filter(|m| m.is_associated_const()).collect::<Vec<_>>(); @@ -2108,7 +2116,14 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, for m in &provided { write!(w, " ")?; render_assoc_item(w, m, AssocItemLink::Anchor(None), ItemType::Trait)?; - write!(w, " {{ ... }}\n")?; + match m.inner { + clean::MethodItem(ref inner) if !inner.generics.where_predicates.is_empty() => { + write!(w, ",\n {{ ... }}\n")?; + }, + _ => { + write!(w, " {{ ... }}\n")?; + }, + } } write!(w, "}}")?; } @@ -2342,21 +2357,17 @@ fn render_assoc_item(w: &mut fmt::Formatter, } else { hir::Constness::NotConst }; - let prefix = format!("{}{}{:#}fn {}{:#}", - ConstnessSpace(vis_constness), - UnsafetySpace(unsafety), - AbiSpace(abi), - name, - *g); - let mut indent = prefix.len(); - let where_indent = if parent == ItemType::Trait { - indent += 4; - 8 - } else if parent == ItemType::Impl { - 2 + let mut head_len = format!("{}{}{:#}fn {}{:#}", + ConstnessSpace(vis_constness), + UnsafetySpace(unsafety), + AbiSpace(abi), + name, + *g).len(); + let (indent, end_newline) = if parent == ItemType::Trait { + head_len += 4; + (4, false) } else { - let prefix = prefix + &format!("{:#}", Method(d, indent)); - prefix.lines().last().unwrap().len() + 1 + (0, true) }; write!(w, "{}{}{}fn <a href='{href}' class='fnname'>{name}</a>\ {generics}{decl}{where_clause}", @@ -2366,8 +2377,16 @@ fn render_assoc_item(w: &mut fmt::Formatter, href = href, name = name, generics = *g, - decl = Method(d, indent), - where_clause = WhereClause(g, where_indent)) + decl = Method { + decl: d, + name_len: head_len, + indent: indent, + }, + where_clause = WhereClause { + gens: g, + indent: indent, + end_newline: end_newline, + }) } match item.inner { clean::StrippedItem(..) => Ok(()), @@ -2480,15 +2499,11 @@ fn item_enum(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, e: &clean::Enum) -> fmt::Result { write!(w, "<pre class='rust enum'>")?; render_attributes(w, it)?; - let padding = format!("{}enum {}{:#} ", - VisSpace(&it.visibility), - it.name.as_ref().unwrap(), - e.generics).len(); write!(w, "{}enum {}{}{}", VisSpace(&it.visibility), it.name.as_ref().unwrap(), e.generics, - WhereClause(&e.generics, padding))?; + WhereClause { gens: &e.generics, indent: 0, end_newline: true })?; if e.variants.is_empty() && !e.variants_stripped { write!(w, " {{}}")?; } else { @@ -2662,23 +2677,17 @@ fn render_struct(w: &mut fmt::Formatter, it: &clean::Item, fields: &[clean::Item], tab: &str, structhead: bool) -> fmt::Result { - let mut plain = String::new(); write!(w, "{}{}{}", VisSpace(&it.visibility), if structhead {"struct "} else {""}, it.name.as_ref().unwrap())?; - plain.push_str(&format!("{}{}{}", - VisSpace(&it.visibility), - if structhead {"struct "} else {""}, - it.name.as_ref().unwrap())); if let Some(g) = g { - plain.push_str(&format!("{:#}", g)); write!(w, "{}", g)? } match ty { doctree::Plain => { if let Some(g) = g { - write!(w, "{}", WhereClause(g, plain.len() + 1))? + write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: true })? } let mut has_visible_fields = false; write!(w, " {{")?; @@ -2707,35 +2716,30 @@ fn render_struct(w: &mut fmt::Formatter, it: &clean::Item, } doctree::Tuple => { write!(w, "(")?; - plain.push_str("("); for (i, field) in fields.iter().enumerate() { if i > 0 { write!(w, ", ")?; - plain.push_str(", "); } match field.inner { clean::StrippedItem(box clean::StructFieldItem(..)) => { - plain.push_str("_"); write!(w, "_")? } clean::StructFieldItem(ref ty) => { - plain.push_str(&format!("{}{:#}", VisSpace(&field.visibility), *ty)); write!(w, "{}{}", VisSpace(&field.visibility), *ty)? } _ => unreachable!() } } write!(w, ")")?; - plain.push_str(")"); if let Some(g) = g { - write!(w, "{}", WhereClause(g, plain.len() + 1))? + write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: false })? } write!(w, ";")?; } doctree::Unit => { // Needed for PhantomData. if let Some(g) = g { - write!(w, "{}", WhereClause(g, plain.len() + 1))? + write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: false })? } write!(w, ";")?; } @@ -2748,19 +2752,13 @@ fn render_union(w: &mut fmt::Formatter, it: &clean::Item, fields: &[clean::Item], tab: &str, structhead: bool) -> fmt::Result { - let mut plain = String::new(); write!(w, "{}{}{}", VisSpace(&it.visibility), if structhead {"union "} else {""}, it.name.as_ref().unwrap())?; - plain.push_str(&format!("{}{}{}", - VisSpace(&it.visibility), - if structhead {"union "} else {""}, - it.name.as_ref().unwrap())); if let Some(g) = g { write!(w, "{}", g)?; - plain.push_str(&format!("{:#}", g)); - write!(w, "{}", WhereClause(g, plain.len() + 1))?; + write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: true })?; } write!(w, " {{\n{}", tab)?; @@ -3059,13 +3057,12 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi fn item_typedef(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, t: &clean::Typedef) -> fmt::Result { - let indent = format!("type {}{:#} ", it.name.as_ref().unwrap(), t.generics).len(); write!(w, "<pre class='rust typedef'>")?; render_attributes(w, it)?; write!(w, "type {}{}{where_clause} = {type_};</pre>", it.name.as_ref().unwrap(), t.generics, - where_clause = WhereClause(&t.generics, indent), + where_clause = WhereClause { gens: &t.generics, indent: 0, end_newline: true }, type_ = t.type_)?; document(w, cx, it) |
