diff options
| author | kennytm <kennytm@gmail.com> | 2019-02-20 01:13:21 +0800 |
|---|---|---|
| committer | kennytm <kennytm@gmail.com> | 2019-02-20 11:58:31 +0800 |
| commit | 8d1e4323b33ca438643b7aeaba330b19829231c2 (patch) | |
| tree | f46c6c01be5f97473664c68072f3af58633f752b /src | |
| parent | 98a6e720d082b6c936758689c08c3c7dd2e9860e (diff) | |
| parent | e827c9ab3c3af14f336ef4ab527fd4a22d0cda80 (diff) | |
| download | rust-8d1e4323b33ca438643b7aeaba330b19829231c2.tar.gz rust-8d1e4323b33ca438643b7aeaba330b19829231c2.zip | |
Rollup merge of #58409 - euclio:impl-trait-wrapping, r=QuietMisdreavus
rustdoc: respect alternate flag when formatting impl trait Fixes #58226. Before: <img width="963" alt="screen shot 2019-02-12 at 3 23 30 pm" src="https://user-images.githubusercontent.com/1372438/52665732-4496ea00-2eda-11e9-9e29-efffe43b2abf.png"> After: <img width="964" alt="screen shot 2019-02-12 at 3 23 51 pm" src="https://user-images.githubusercontent.com/1372438/52665733-452f8080-2eda-11e9-999a-dd1fb28dee16.png">
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/html/format.rs | 26 | ||||
| -rw-r--r-- | src/librustdoc/html/render.rs | 42 | ||||
| -rw-r--r-- | src/test/rustdoc/wrapping.rs | 5 |
3 files changed, 43 insertions, 30 deletions
diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 4fbbaf0f2e1..df7835214eb 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -49,8 +49,11 @@ pub struct AbiSpace(pub Abi); pub struct Function<'a> { /// The declaration to emit. pub decl: &'a clean::FnDecl, - /// The length of the function's "name", used to determine line-wrapping. - pub name_len: usize, + /// The length of the function header and name. In other words, the number of characters in the + /// function declaration up to but not including the parentheses. + /// + /// Used to determine line-wrapping. + pub header_len: usize, /// The number of spaces to indent each successive line with, if line-wrapping is necessary. pub indent: usize, /// Whether the function is async or not. @@ -675,7 +678,11 @@ fn fmt_type(t: &clean::Type, f: &mut fmt::Formatter, use_absolute: bool) -> fmt: } } clean::ImplTrait(ref bounds) => { - write!(f, "impl {}", GenericBounds(bounds)) + if f.alternate() { + write!(f, "impl {:#}", GenericBounds(bounds)) + } else { + write!(f, "impl {}", GenericBounds(bounds)) + } } clean::QPath { ref name, ref self_type, ref trait_ } => { let should_show_cast = match *trait_ { @@ -844,7 +851,7 @@ impl fmt::Display for clean::FnDecl { impl<'a> fmt::Display for Function<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let &Function { decl, name_len, indent, asyncness } = self; + let &Function { decl, header_len, indent, asyncness } = self; let amp = if f.alternate() { "&" } else { "&" }; let mut args = String::new(); let mut args_plain = String::new(); @@ -899,6 +906,8 @@ impl<'a> fmt::Display for Function<'a> { } } + let mut args_plain = format!("({})", args_plain); + if decl.variadic { args.push_str(",<br> ..."); args_plain.push_str(", ..."); @@ -917,13 +926,8 @@ impl<'a> fmt::Display for Function<'a> { output.to_string() }; - let pad = " ".repeat(name_len); - let plain = format!("{pad}({args}){arrow}", - pad = pad, - args = args_plain, - arrow = arrow_plain); - - let output = if plain.len() > 80 { + let declaration_len = header_len + args_plain.len() + arrow_plain.len(); + let output = if declaration_len > 80 { let full_pad = format!("<br>{}", " ".repeat(indent + 4)); let close_pad = format!("<br>{}", " ".repeat(indent)); format!("({args}{close}){arrow}", diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 744c4ae65c6..d037154272d 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -2984,14 +2984,16 @@ fn item_static(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, fn item_function(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, f: &clean::Function) -> fmt::Result { - let name_len = format!("{}{}{}{}{:#}fn {}{:#}", - VisSpace(&it.visibility), - ConstnessSpace(f.header.constness), - UnsafetySpace(f.header.unsafety), - AsyncSpace(f.header.asyncness), - AbiSpace(f.header.abi), - it.name.as_ref().unwrap(), - f.generics).len(); + let header_len = format!( + "{}{}{}{}{:#}fn {}{:#}", + VisSpace(&it.visibility), + ConstnessSpace(f.header.constness), + UnsafetySpace(f.header.unsafety), + AsyncSpace(f.header.asyncness), + AbiSpace(f.header.abi), + it.name.as_ref().unwrap(), + f.generics + ).len(); write!(w, "{}<pre class='rust fn'>", render_spotlight_traits(it)?)?; render_attributes(w, it)?; write!(w, @@ -3007,7 +3009,7 @@ fn item_function(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, where_clause = WhereClause { gens: &f.generics, indent: 0, end_newline: true }, decl = Function { decl: &f.decl, - name_len, + header_len, indent: 0, asyncness: f.header.asyncness, })?; @@ -3422,16 +3424,18 @@ fn render_assoc_item(w: &mut fmt::Formatter, href(did).map(|p| format!("{}#{}.{}", p.0, ty, name)).unwrap_or(anchor) } }; - let mut head_len = format!("{}{}{}{}{:#}fn {}{:#}", - VisSpace(&meth.visibility), - ConstnessSpace(header.constness), - UnsafetySpace(header.unsafety), - AsyncSpace(header.asyncness), - AbiSpace(header.abi), - name, - *g).len(); + let mut header_len = format!( + "{}{}{}{}{:#}fn {}{:#}", + VisSpace(&meth.visibility), + ConstnessSpace(header.constness), + UnsafetySpace(header.unsafety), + AsyncSpace(header.asyncness), + AbiSpace(header.abi), + name, + *g + ).len(); let (indent, end_newline) = if parent == ItemType::Trait { - head_len += 4; + header_len += 4; (4, false) } else { (0, true) @@ -3449,7 +3453,7 @@ fn render_assoc_item(w: &mut fmt::Formatter, generics = *g, decl = Function { decl: d, - name_len: head_len, + header_len, indent, asyncness: header.asyncness, }, diff --git a/src/test/rustdoc/wrapping.rs b/src/test/rustdoc/wrapping.rs new file mode 100644 index 00000000000..8d8221bcdf2 --- /dev/null +++ b/src/test/rustdoc/wrapping.rs @@ -0,0 +1,5 @@ +use std::fmt::Debug; + +// @has 'wrapping/fn.foo.html' '//pre[@class="rust fn"]' 'pub fn foo() -> impl Debug' +// @count - '//pre[@class="rust fn"]/br' 0 +pub fn foo() -> impl Debug {} |
