@@ -61,7 +61,7 @@ struct Cache {
61
61
// typaram id => name of that typaram
62
62
typarams : HashMap < ast:: NodeId , ~str > ,
63
63
// type id => all implementations for that type
64
- impls : HashMap < ast:: NodeId , ~[ clean:: Impl ] > ,
64
+ impls : HashMap < ast:: NodeId , ~[ ( clean:: Impl , Option < ~ str > ) ] > ,
65
65
// path id => (full qualified path, shortty) -- used to generate urls
66
66
paths : HashMap < ast:: NodeId , ( ~[ ~str ] , & ' static str ) > ,
67
67
// trait id => method name => dox
@@ -454,21 +454,34 @@ impl DocFolder for Cache {
454
454
// implementations elsewhere
455
455
let ret = match self . fold_item_recur ( item) {
456
456
Some ( item) => {
457
- match item. inner {
458
- clean:: ImplItem ( i) => {
457
+ match item {
458
+ clean:: Item { attrs , inner : clean :: ImplItem ( i) , _ } => {
459
459
match i. for_ {
460
460
clean:: ResolvedPath { did, _ } if is_local ( did) => {
461
461
let id = did. node ;
462
462
let v = do self . impls . find_or_insert_with ( id) |_| {
463
463
~[ ]
464
464
} ;
465
- v. push ( i) ;
465
+ // extract relevant documentation for this impl
466
+ match attrs. move_iter ( ) . find ( |a| {
467
+ match * a {
468
+ clean:: NameValue ( ~"doc", _) => true ,
469
+ _ => false
470
+ }
471
+ } ) {
472
+ Some ( clean:: NameValue ( _, dox) ) => {
473
+ v. push ( ( i, Some ( dox) ) ) ;
474
+ }
475
+ Some ( * ) | None => {
476
+ v. push ( ( i, None ) ) ;
477
+ }
478
+ }
466
479
}
467
480
_ => { }
468
481
}
469
482
None
470
483
}
471
- _ => Some ( item ) ,
484
+ i => Some ( i ) ,
472
485
}
473
486
}
474
487
i => i,
@@ -1205,22 +1218,26 @@ fn render_methods(w: &mut io::Writer, it: &clean::Item) {
1205
1218
do cache. read |c| {
1206
1219
match c. impls . find ( & it. id ) {
1207
1220
Some ( v) => {
1208
- let mut non_trait = v. iter ( ) . filter ( |i| i. trait_ . is_none ( ) ) ;
1221
+ let mut non_trait = v. iter ( ) . filter ( |p| {
1222
+ p. n0_ref ( ) . trait_ . is_none ( )
1223
+ } ) ;
1209
1224
let non_trait = non_trait. to_owned_vec ( ) ;
1210
- let mut traits = v. iter ( ) . filter ( |i| i. trait_ . is_some ( ) ) ;
1225
+ let mut traits = v. iter ( ) . filter ( |p| {
1226
+ p. n0_ref ( ) . trait_ . is_some ( )
1227
+ } ) ;
1211
1228
let traits = traits. to_owned_vec ( ) ;
1212
1229
1213
1230
if non_trait. len ( ) > 0 {
1214
1231
write ! ( w, "<h2 id='methods'>Methods</h2>" ) ;
1215
- for & i in non_trait. iter ( ) {
1216
- render_impl ( w, i) ;
1232
+ for & ( ref i , ref dox ) in non_trait. move_iter ( ) {
1233
+ render_impl ( w, i, dox ) ;
1217
1234
}
1218
1235
}
1219
1236
if traits. len ( ) > 0 {
1220
1237
write ! ( w, "<h2 id='implementations'>Trait \
1221
1238
Implementations</h2>") ;
1222
- for & i in traits. iter ( ) {
1223
- render_impl ( w, i) ;
1239
+ for & ( ref i , ref dox ) in traits. move_iter ( ) {
1240
+ render_impl ( w, i, dox ) ;
1224
1241
}
1225
1242
}
1226
1243
}
@@ -1230,7 +1247,7 @@ fn render_methods(w: &mut io::Writer, it: &clean::Item) {
1230
1247
}
1231
1248
}
1232
1249
1233
- fn render_impl( w : & mut io:: Writer , i : & clean:: Impl ) {
1250
+ fn render_impl( w : & mut io:: Writer , i : & clean:: Impl , dox : & Option < ~ str > ) {
1234
1251
write ! ( w, "<h3 class='impl'><code>impl{} " , i. generics) ;
1235
1252
let trait_id = match i. trait_ {
1236
1253
Some ( ref ty) => {
@@ -1243,6 +1260,13 @@ fn render_impl(w: &mut io::Writer, i: &clean::Impl) {
1243
1260
None => None
1244
1261
} ;
1245
1262
write ! ( w, "{}</code></h3>" , i. for_) ;
1263
+ match * dox {
1264
+ Some ( ref dox) => {
1265
+ write ! ( w, "<div class='docblock'>{}</div>" ,
1266
+ Markdown ( dox. as_slice( ) ) ) ;
1267
+ }
1268
+ None => { }
1269
+ }
1246
1270
write ! ( w, "<div class='methods'>" ) ;
1247
1271
for meth in i. methods . iter ( ) {
1248
1272
write ! ( w, "<h4 id='method.{}' class='method'><code>" ,
0 commit comments