@@ -1983,33 +1983,43 @@ fn item_function(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
1983
1983
abi = AbiSpace ( f. abi) ,
1984
1984
name = it. name. as_ref( ) . unwrap( ) ,
1985
1985
generics = f. generics,
1986
- where_clause = WhereClause ( & f. generics) ,
1986
+ where_clause = WhereClause ( & f. generics, " " . to_string ( ) ) ,
1987
1987
decl = Method ( & f. decl, & indent) ) ?;
1988
1988
document ( w, cx, it)
1989
1989
}
1990
1990
1991
1991
fn item_trait ( w : & mut fmt:: Formatter , cx : & Context , it : & clean:: Item ,
1992
1992
t : & clean:: Trait ) -> fmt:: Result {
1993
1993
let mut bounds = String :: new ( ) ;
1994
+ let mut bounds_plain = String :: new ( ) ;
1994
1995
if !t. bounds . is_empty ( ) {
1995
1996
if !bounds. is_empty ( ) {
1996
1997
bounds. push ( ' ' ) ;
1998
+ bounds_plain. push ( ' ' ) ;
1997
1999
}
1998
2000
bounds. push_str ( ": " ) ;
2001
+ bounds_plain. push_str ( ": " ) ;
1999
2002
for ( i, p) in t. bounds . iter ( ) . enumerate ( ) {
2000
- if i > 0 { bounds. push_str ( " + " ) ; }
2003
+ if i > 0 {
2004
+ bounds. push_str ( " + " ) ;
2005
+ bounds_plain. push_str ( " + " ) ;
2006
+ }
2001
2007
bounds. push_str ( & format ! ( "{}" , * p) ) ;
2008
+ bounds_plain. push_str ( & format ! ( "{:#}" , * p) ) ;
2002
2009
}
2003
2010
}
2004
2011
2012
+ // Where clauses in traits are indented nine spaces, per rustdoc.css
2013
+ let indent = " " . to_string ( ) ;
2014
+
2005
2015
// Output the trait definition
2006
2016
write ! ( w, "<pre class='rust trait'>{}{}trait {}{}{}{} " ,
2007
2017
VisSpace ( & it. visibility) ,
2008
2018
UnsafetySpace ( t. unsafety) ,
2009
2019
it. name. as_ref( ) . unwrap( ) ,
2010
2020
t. generics,
2011
2021
bounds,
2012
- WhereClause ( & t. generics) ) ?;
2022
+ WhereClause ( & t. generics, indent ) ) ?;
2013
2023
2014
2024
let types = t. items . iter ( ) . filter ( |m| m. is_associated_type ( ) ) . collect :: < Vec < _ > > ( ) ;
2015
2025
let consts = t. items . iter ( ) . filter ( |m| m. is_associated_const ( ) ) . collect :: < Vec < _ > > ( ) ;
@@ -2023,31 +2033,31 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
2023
2033
write ! ( w, "{{\n " ) ?;
2024
2034
for t in & types {
2025
2035
write ! ( w, " " ) ?;
2026
- render_assoc_item ( w, t, AssocItemLink :: Anchor ( None ) ) ?;
2036
+ render_assoc_item ( w, t, AssocItemLink :: Anchor ( None ) , ItemType :: Trait ) ?;
2027
2037
write ! ( w, ";\n " ) ?;
2028
2038
}
2029
2039
if !types. is_empty ( ) && !consts. is_empty ( ) {
2030
2040
w. write_str ( "\n " ) ?;
2031
2041
}
2032
2042
for t in & consts {
2033
2043
write ! ( w, " " ) ?;
2034
- render_assoc_item ( w, t, AssocItemLink :: Anchor ( None ) ) ?;
2044
+ render_assoc_item ( w, t, AssocItemLink :: Anchor ( None ) , ItemType :: Trait ) ?;
2035
2045
write ! ( w, ";\n " ) ?;
2036
2046
}
2037
2047
if !consts. is_empty ( ) && !required. is_empty ( ) {
2038
2048
w. write_str ( "\n " ) ?;
2039
2049
}
2040
2050
for m in & required {
2041
2051
write ! ( w, " " ) ?;
2042
- render_assoc_item ( w, m, AssocItemLink :: Anchor ( None ) ) ?;
2052
+ render_assoc_item ( w, m, AssocItemLink :: Anchor ( None ) , ItemType :: Trait ) ?;
2043
2053
write ! ( w, ";\n " ) ?;
2044
2054
}
2045
2055
if !required. is_empty ( ) && !provided. is_empty ( ) {
2046
2056
w. write_str ( "\n " ) ?;
2047
2057
}
2048
2058
for m in & provided {
2049
2059
write ! ( w, " " ) ?;
2050
- render_assoc_item ( w, m, AssocItemLink :: Anchor ( None ) ) ?;
2060
+ render_assoc_item ( w, m, AssocItemLink :: Anchor ( None ) , ItemType :: Trait ) ?;
2051
2061
write ! ( w, " {{ ... }}\n " ) ?;
2052
2062
}
2053
2063
write ! ( w, "}}" ) ?;
@@ -2068,7 +2078,7 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
2068
2078
id = id,
2069
2079
stab = m. stability_class( ) ,
2070
2080
ns_id = ns_id) ?;
2071
- render_assoc_item ( w, m, AssocItemLink :: Anchor ( Some ( & id) ) ) ?;
2081
+ render_assoc_item ( w, m, AssocItemLink :: Anchor ( Some ( & id) ) , ItemType :: Impl ) ?;
2072
2082
write ! ( w, "</code>" ) ?;
2073
2083
render_stability_since ( w, m, t) ?;
2074
2084
write ! ( w, "</span></h3>" ) ?;
@@ -2222,15 +2232,17 @@ fn render_stability_since(w: &mut fmt::Formatter,
2222
2232
2223
2233
fn render_assoc_item ( w : & mut fmt:: Formatter ,
2224
2234
item : & clean:: Item ,
2225
- link : AssocItemLink ) -> fmt:: Result {
2235
+ link : AssocItemLink ,
2236
+ parent : ItemType ) -> fmt:: Result {
2226
2237
fn method ( w : & mut fmt:: Formatter ,
2227
2238
meth : & clean:: Item ,
2228
2239
unsafety : hir:: Unsafety ,
2229
2240
constness : hir:: Constness ,
2230
2241
abi : abi:: Abi ,
2231
2242
g : & clean:: Generics ,
2232
2243
d : & clean:: FnDecl ,
2233
- link : AssocItemLink )
2244
+ link : AssocItemLink ,
2245
+ parent : ItemType )
2234
2246
-> fmt:: Result {
2235
2247
let name = meth. name . as_ref ( ) . unwrap ( ) ;
2236
2248
let anchor = format ! ( "#{}.{}" , meth. type_( ) , name) ;
@@ -2260,7 +2272,17 @@ fn render_assoc_item(w: &mut fmt::Formatter,
2260
2272
AbiSpace ( abi) ,
2261
2273
name,
2262
2274
* g) ;
2263
- let indent = repeat ( " " ) . take ( prefix. len ( ) ) . collect :: < String > ( ) ;
2275
+ let mut indent = repeat ( " " ) . take ( prefix. len ( ) ) . collect :: < String > ( ) ;
2276
+ let where_indent = if parent == ItemType :: Trait {
2277
+ indent += " " ;
2278
+ " " . to_string ( )
2279
+ } else if parent == ItemType :: Impl {
2280
+ " " . to_string ( )
2281
+ } else {
2282
+ let prefix = prefix + & format ! ( "{:#}" , Method ( d, & indent) ) ;
2283
+ let prefix = prefix. lines ( ) . last ( ) . unwrap ( ) ;
2284
+ repeat ( " " ) . take ( prefix. len ( ) + 1 ) . collect :: < String > ( )
2285
+ } ;
2264
2286
write ! ( w, "{}{}{}fn <a href='{href}' class='fnname'>{name}</a>\
2265
2287
{generics}{decl}{where_clause}",
2266
2288
ConstnessSpace ( vis_constness) ,
@@ -2270,18 +2292,17 @@ fn render_assoc_item(w: &mut fmt::Formatter,
2270
2292
name = name,
2271
2293
generics = * g,
2272
2294
decl = Method ( d, & indent) ,
2273
- where_clause = WhereClause ( g) )
2295
+ where_clause = WhereClause ( g, where_indent ) )
2274
2296
}
2275
2297
match item. inner {
2276
2298
clean:: StrippedItem ( ..) => Ok ( ( ) ) ,
2277
2299
clean:: TyMethodItem ( ref m) => {
2278
2300
method ( w, item, m. unsafety , hir:: Constness :: NotConst ,
2279
- m. abi , & m. generics , & m. decl , link)
2301
+ m. abi , & m. generics , & m. decl , link, parent )
2280
2302
}
2281
2303
clean:: MethodItem ( ref m) => {
2282
2304
method ( w, item, m. unsafety , m. constness ,
2283
- m. abi , & m. generics , & m. decl ,
2284
- link)
2305
+ m. abi , & m. generics , & m. decl , link, parent)
2285
2306
}
2286
2307
clean:: AssociatedConstItem ( ref ty, ref default) => {
2287
2308
assoc_const ( w, item, ty, default. as_ref ( ) , link)
@@ -2378,11 +2399,15 @@ fn item_enum(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
2378
2399
e : & clean:: Enum ) -> fmt:: Result {
2379
2400
write ! ( w, "<pre class='rust enum'>" ) ?;
2380
2401
render_attributes ( w, it) ?;
2402
+ let padding = format ! ( "{}enum {}{:#} " ,
2403
+ VisSpace ( & it. visibility) ,
2404
+ it. name. as_ref( ) . unwrap( ) ,
2405
+ e. generics) ;
2381
2406
write ! ( w, "{}enum {}{}{}" ,
2382
2407
VisSpace ( & it. visibility) ,
2383
2408
it. name. as_ref( ) . unwrap( ) ,
2384
2409
e. generics,
2385
- WhereClause ( & e. generics) ) ?;
2410
+ WhereClause ( & e. generics, padding ) ) ?;
2386
2411
if e. variants . is_empty ( ) && !e. variants_stripped {
2387
2412
write ! ( w, " {{}}" ) ?;
2388
2413
} else {
@@ -2517,17 +2542,24 @@ fn render_struct(w: &mut fmt::Formatter, it: &clean::Item,
2517
2542
fields : & [ clean:: Item ] ,
2518
2543
tab : & str ,
2519
2544
structhead : bool ) -> fmt:: Result {
2545
+ let mut plain = String :: new ( ) ;
2520
2546
write ! ( w, "{}{}{}" ,
2521
2547
VisSpace ( & it. visibility) ,
2522
2548
if structhead { "struct " } else { "" } ,
2523
2549
it. name. as_ref( ) . unwrap( ) ) ?;
2550
+ plain. push_str ( & format ! ( "{}{}{}" ,
2551
+ VisSpace ( & it. visibility) ,
2552
+ if structhead { "struct " } else { "" } ,
2553
+ it. name. as_ref( ) . unwrap( ) ) ) ;
2524
2554
if let Some ( g) = g {
2555
+ plain. push_str ( & format ! ( "{:#}" , g) ) ;
2525
2556
write ! ( w, "{}" , g) ?
2526
2557
}
2527
2558
match ty {
2528
2559
doctree:: Plain => {
2529
2560
if let Some ( g) = g {
2530
- write ! ( w, "{}" , WhereClause ( g) ) ?
2561
+ let pad = repeat ( " " ) . take ( plain. len ( ) + 1 ) . collect :: < String > ( ) ;
2562
+ write ! ( w, "{}" , WhereClause ( g, pad) ) ?
2531
2563
}
2532
2564
let mut has_visible_fields = false ;
2533
2565
write ! ( w, " {{" ) ?;
@@ -2556,30 +2588,37 @@ fn render_struct(w: &mut fmt::Formatter, it: &clean::Item,
2556
2588
}
2557
2589
doctree:: Tuple => {
2558
2590
write ! ( w, "(" ) ?;
2591
+ plain. push_str ( "(" ) ;
2559
2592
for ( i, field) in fields. iter ( ) . enumerate ( ) {
2560
2593
if i > 0 {
2561
2594
write ! ( w, ", " ) ?;
2595
+ plain. push_str ( ", " ) ;
2562
2596
}
2563
2597
match field. inner {
2564
2598
clean:: StrippedItem ( box clean:: StructFieldItem ( ..) ) => {
2599
+ plain. push_str ( "_" ) ;
2565
2600
write ! ( w, "_" ) ?
2566
2601
}
2567
2602
clean:: StructFieldItem ( ref ty) => {
2603
+ plain. push_str ( & format ! ( "{}{:#}" , VisSpace ( & field. visibility) , * ty) ) ;
2568
2604
write ! ( w, "{}{}" , VisSpace ( & field. visibility) , * ty) ?
2569
2605
}
2570
2606
_ => unreachable ! ( )
2571
2607
}
2572
2608
}
2573
2609
write ! ( w, ")" ) ?;
2610
+ plain. push_str ( ")" ) ;
2574
2611
if let Some ( g) = g {
2575
- write ! ( w, "{}" , WhereClause ( g) ) ?
2612
+ let pad = repeat ( " " ) . take ( plain. len ( ) + 1 ) . collect :: < String > ( ) ;
2613
+ write ! ( w, "{}" , WhereClause ( g, pad) ) ?
2576
2614
}
2577
2615
write ! ( w, ";" ) ?;
2578
2616
}
2579
2617
doctree:: Unit => {
2580
2618
// Needed for PhantomData.
2581
2619
if let Some ( g) = g {
2582
- write ! ( w, "{}" , WhereClause ( g) ) ?
2620
+ let pad = repeat ( " " ) . take ( plain. len ( ) + 1 ) . collect :: < String > ( ) ;
2621
+ write ! ( w, "{}" , WhereClause ( g, pad) ) ?
2583
2622
}
2584
2623
write ! ( w, ";" ) ?;
2585
2624
}
@@ -2592,13 +2631,20 @@ fn render_union(w: &mut fmt::Formatter, it: &clean::Item,
2592
2631
fields : & [ clean:: Item ] ,
2593
2632
tab : & str ,
2594
2633
structhead : bool ) -> fmt:: Result {
2634
+ let mut plain = String :: new ( ) ;
2595
2635
write ! ( w, "{}{}{}" ,
2596
2636
VisSpace ( & it. visibility) ,
2597
2637
if structhead { "union " } else { "" } ,
2598
2638
it. name. as_ref( ) . unwrap( ) ) ?;
2639
+ plain. push_str ( & format ! ( "{}{}{}" ,
2640
+ VisSpace ( & it. visibility) ,
2641
+ if structhead { "union " } else { "" } ,
2642
+ it. name. as_ref( ) . unwrap( ) ) ) ;
2599
2643
if let Some ( g) = g {
2600
2644
write ! ( w, "{}" , g) ?;
2601
- write ! ( w, "{}" , WhereClause ( g) ) ?;
2645
+ plain. push_str ( & format ! ( "{:#}" , g) ) ;
2646
+ let pad = repeat ( " " ) . take ( plain. len ( ) + 1 ) . collect :: < String > ( ) ;
2647
+ write ! ( w, "{}" , WhereClause ( g, pad) ) ?;
2602
2648
}
2603
2649
2604
2650
write ! ( w, " {{\n {}" , tab) ?;
@@ -2789,7 +2835,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
2789
2835
write ! ( w, "<h4 id='{}' class='{}'>" , id, item_type) ?;
2790
2836
write ! ( w, "<span id='{}' class='invisible'>" , ns_id) ?;
2791
2837
write ! ( w, "<code>" ) ?;
2792
- render_assoc_item ( w, item, link. anchor ( & id) ) ?;
2838
+ render_assoc_item ( w, item, link. anchor ( & id) , ItemType :: Impl ) ?;
2793
2839
write ! ( w, "</code>" ) ?;
2794
2840
render_stability_since_raw ( w, item. stable_since ( ) , outer_version) ?;
2795
2841
write ! ( w, "</span></h4>\n " ) ?;
@@ -2899,10 +2945,12 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
2899
2945
2900
2946
fn item_typedef ( w : & mut fmt:: Formatter , cx : & Context , it : & clean:: Item ,
2901
2947
t : & clean:: Typedef ) -> fmt:: Result {
2948
+ let indent = format ! ( "type {}{:#} " , it. name. as_ref( ) . unwrap( ) , t. generics) ;
2949
+ let indent = repeat ( " " ) . take ( indent. len ( ) ) . collect :: < String > ( ) ;
2902
2950
write ! ( w, "<pre class='rust typedef'>type {}{}{where_clause} = {type_};</pre>" ,
2903
2951
it. name. as_ref( ) . unwrap( ) ,
2904
2952
t. generics,
2905
- where_clause = WhereClause ( & t. generics) ,
2953
+ where_clause = WhereClause ( & t. generics, indent ) ,
2906
2954
type_ = t. type_) ?;
2907
2955
2908
2956
document ( w, cx, it)
0 commit comments