@@ -171,37 +171,69 @@ impl fmt::Show for clean::TyParamBound {
171
171
}
172
172
}
173
173
174
- impl fmt:: Show for clean:: Path {
174
+ impl fmt:: Show for clean:: PathParameters {
175
175
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
176
- if self . global {
177
- try!( f. write ( "::" . as_bytes ( ) ) )
178
- }
179
-
180
- for ( i, seg) in self . segments . iter ( ) . enumerate ( ) {
181
- if i > 0 {
182
- try!( f. write ( "::" . as_bytes ( ) ) )
183
- }
184
- try!( f. write ( seg. name . as_bytes ( ) ) ) ;
185
-
186
- if seg. lifetimes . len ( ) > 0 || seg. types . len ( ) > 0 {
187
- try!( f. write ( "<" . as_bytes ( ) ) ) ;
188
- let mut comma = false ;
189
- for lifetime in seg. lifetimes . iter ( ) {
190
- if comma {
191
- try!( f. write ( ", " . as_bytes ( ) ) ) ;
176
+ match * self {
177
+ clean:: PathParameters :: AngleBracketed { ref lifetimes, ref types } => {
178
+ if lifetimes. len ( ) > 0 || types. len ( ) > 0 {
179
+ try!( f. write ( "<" . as_bytes ( ) ) ) ;
180
+ let mut comma = false ;
181
+ for lifetime in lifetimes. iter ( ) {
182
+ if comma {
183
+ try!( f. write ( ", " . as_bytes ( ) ) ) ;
184
+ }
185
+ comma = true ;
186
+ try!( write ! ( f, "{}" , * lifetime) ) ;
192
187
}
193
- comma = true ;
194
- try!( write ! ( f, "{}" , * lifetime) ) ;
188
+ for ty in types. iter ( ) {
189
+ if comma {
190
+ try!( f. write ( ", " . as_bytes ( ) ) ) ;
191
+ }
192
+ comma = true ;
193
+ try!( write ! ( f, "{}" , * ty) ) ;
194
+ }
195
+ try!( f. write ( ">" . as_bytes ( ) ) ) ;
195
196
}
196
- for ty in seg. types . iter ( ) {
197
+ }
198
+ clean:: PathParameters :: Parenthesized { ref inputs, ref output } => {
199
+ try!( f. write ( "(" . as_bytes ( ) ) ) ;
200
+ let mut comma = false ;
201
+ for ty in inputs. iter ( ) {
197
202
if comma {
198
203
try!( f. write ( ", " . as_bytes ( ) ) ) ;
199
204
}
200
205
comma = true ;
201
206
try!( write ! ( f, "{}" , * ty) ) ;
202
207
}
203
- try!( f. write ( ">" . as_bytes ( ) ) ) ;
208
+ try!( f. write ( ")" . as_bytes ( ) ) ) ;
209
+ if let Some ( ref ty) = * output {
210
+ try!( f. write ( " -> " . as_bytes ( ) ) ) ;
211
+ try!( write ! ( f, "{}" , ty) ) ;
212
+ }
213
+ }
214
+ }
215
+ Ok ( ( ) )
216
+ }
217
+ }
218
+
219
+ impl fmt:: Show for clean:: PathSegment {
220
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
221
+ try!( f. write ( self . name . as_bytes ( ) ) ) ;
222
+ write ! ( f, "{}" , self . params)
223
+ }
224
+ }
225
+
226
+ impl fmt:: Show for clean:: Path {
227
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
228
+ if self . global {
229
+ try!( f. write ( "::" . as_bytes ( ) ) )
230
+ }
231
+
232
+ for ( i, seg) in self . segments . iter ( ) . enumerate ( ) {
233
+ if i > 0 {
234
+ try!( f. write ( "::" . as_bytes ( ) ) )
204
235
}
236
+ try!( write ! ( f, "{}" , seg) ) ;
205
237
}
206
238
Ok ( ( ) )
207
239
}
@@ -243,23 +275,8 @@ fn path<F, G>(w: &mut fmt::Formatter,
243
275
G : FnOnce ( & render:: Cache ) -> Option < ( Vec < String > , ItemType ) > ,
244
276
{
245
277
// The generics will get written to both the title and link
246
- let mut generics = String :: new ( ) ;
247
278
let last = path. segments . last ( ) . unwrap ( ) ;
248
- if last. lifetimes . len ( ) > 0 || last. types . len ( ) > 0 {
249
- let mut counter = 0 u;
250
- generics. push_str ( "<" ) ;
251
- for lifetime in last. lifetimes . iter ( ) {
252
- if counter > 0 { generics. push_str ( ", " ) ; }
253
- counter += 1 ;
254
- generics. push_str ( format ! ( "{}" , * lifetime) . as_slice ( ) ) ;
255
- }
256
- for ty in last. types . iter ( ) {
257
- if counter > 0 { generics. push_str ( ", " ) ; }
258
- counter += 1 ;
259
- generics. push_str ( format ! ( "{}" , * ty) . as_slice ( ) ) ;
260
- }
261
- generics. push_str ( ">" ) ;
262
- }
279
+ let generics = format ! ( "{}" , last. params) ;
263
280
264
281
let loc = CURRENT_LOCATION_KEY . with ( |l| l. borrow ( ) . clone ( ) ) ;
265
282
let cache = cache ( ) ;
@@ -660,8 +677,10 @@ impl fmt::Show for clean::ViewListIdent {
660
677
global : false ,
661
678
segments : vec ! ( clean:: PathSegment {
662
679
name: self . name. clone( ) ,
663
- lifetimes: Vec :: new( ) ,
664
- types: Vec :: new( ) ,
680
+ params: clean:: PathParameters :: AngleBracketed {
681
+ lifetimes: Vec :: new( ) ,
682
+ types: Vec :: new( ) ,
683
+ }
665
684
} )
666
685
} ;
667
686
resolved_path ( f, did, & path, false )
0 commit comments