13
13
clippy:: missing_errors_doc,
14
14
clippy:: return_self_not_must_use
15
15
) ]
16
-
17
16
/// Different types that can extracted from the result of `get_function_history`.
18
17
pub mod types;
19
18
use ra_ap_syntax:: {
20
- ast:: { self , HasGenericParams , HasName } ,
19
+ ast:: { self , HasDocComments , HasGenericParams , HasName } ,
21
20
AstNode , SourceFile , SyntaxKind ,
22
21
} ;
23
22
@@ -288,6 +287,7 @@ fn find_function_in_commit(
288
287
ast:: Fn :: cast ( p. clone ( ) ) . map_or_else (
289
288
|| {
290
289
if let Some ( block) = ast:: Impl :: cast ( p. clone ( ) ) {
290
+ let attr = get_doc_comments_and_attrs ( & block) ;
291
291
let stuff = get_stuff ( & block, & file_contents, & map) ;
292
292
let generics = get_genrerics_and_lifetime ( & block) ;
293
293
parent_block = Some ( Block {
@@ -298,8 +298,11 @@ fn find_function_in_commit(
298
298
bottom : stuff. 1 . 1 ,
299
299
block_type : BlockType :: Impl ,
300
300
lines : ( stuff. 0 . 0 , stuff. 0 . 1 ) ,
301
+ attributes : attr. 1 ,
302
+ doc_comments : attr. 0 ,
301
303
} ) ;
302
304
} else if let Some ( block) = ast:: Trait :: cast ( p. clone ( ) ) {
305
+ let attr = get_doc_comments_and_attrs ( & block) ;
303
306
let stuff = get_stuff ( & block, & file_contents, & map) ;
304
307
let generics = get_genrerics_and_lifetime ( & block) ;
305
308
parent_block = Some ( Block {
@@ -310,24 +313,29 @@ fn find_function_in_commit(
310
313
bottom : stuff. 1 . 1 ,
311
314
block_type : BlockType :: Trait ,
312
315
lines : ( stuff. 0 . 0 , stuff. 0 . 1 ) ,
316
+ attributes : attr. 1 ,
317
+ doc_comments : attr. 0 ,
313
318
} ) ;
314
319
} else if let Some ( block) = ast:: ExternBlock :: cast ( p. clone ( ) ) {
320
+ let attr = get_doc_comments_and_attrs ( & block) ;
315
321
let stuff = get_stuff ( & block, & file_contents, & map) ;
316
322
parent_block = Some ( Block {
317
323
name : block. abi ( ) . map ( |ty| ty. to_string ( ) ) ,
318
- lifetime : None ,
319
- generics : None ,
324
+ lifetime : Vec :: new ( ) ,
325
+ generics : Vec :: new ( ) ,
320
326
top : stuff. 1 . 0 ,
321
327
bottom : stuff. 1 . 1 ,
322
328
block_type : BlockType :: Extern ,
323
329
lines : ( stuff. 0 . 0 , stuff. 0 . 1 ) ,
330
+ attributes : attr. 1 ,
331
+ doc_comments : attr. 0 ,
324
332
} ) ;
325
333
}
326
334
} ,
327
335
|function| {
328
336
let stuff = get_stuff ( & function, & file_contents, & map) ;
329
337
let generics = get_genrerics_and_lifetime ( & function) ;
330
- // TODO: get the functionblock and add it to the parent_fn
338
+ let attr = get_doc_comments_and_attrs ( & function ) ;
331
339
parent_fn. push ( FunctionBlock {
332
340
name : function. name ( ) . unwrap ( ) . to_string ( ) ,
333
341
lifetime : generics. 1 ,
@@ -336,22 +344,34 @@ fn find_function_in_commit(
336
344
bottom : stuff. 1 . 1 ,
337
345
lines : ( stuff. 0 . 0 , stuff. 0 . 1 ) ,
338
346
return_type : function. ret_type ( ) . map ( |ty| ty. to_string ( ) ) ,
339
- arguments : function. param_list ( ) . map ( |args| {
340
- args. params ( )
347
+ arguments : match function. param_list ( ) {
348
+ Some ( args) => args
349
+ . params ( )
341
350
. map ( |arg| arg. to_string ( ) )
342
- . collect :: < Vec < String > > ( )
343
- } ) ,
351
+ . collect :: < Vec < String > > ( ) ,
352
+ None => Vec :: new ( ) ,
353
+ } ,
354
+ attributes : attr. 1 ,
355
+ doc_comments : attr. 0 ,
344
356
} ) ;
345
357
} ,
346
358
) ;
347
359
parent = p. parent ( ) ;
348
360
}
349
-
361
+ let attr = get_doc_comments_and_attrs ( & f ) ;
350
362
let mut start = stuff. 0 . 0 ;
351
363
let bb = match map[ & start] {
352
364
0 => 0 ,
353
365
x => x + 1 ,
354
366
} ;
367
+ let ttt = f
368
+ . doc_comments_and_attrs ( )
369
+ . into_iter ( )
370
+ . map ( |c| c. to_string ( ) )
371
+ . collect :: < String > ( ) ;
372
+ if !ttt. is_empty ( ) {
373
+ println ! ( "{}" , ttt) ;
374
+ }
355
375
let contents: String = file_contents[ bb..f. syntax ( ) . text_range ( ) . end ( ) . into ( ) ]
356
376
. to_string ( )
357
377
. lines ( )
@@ -365,19 +385,20 @@ fn find_function_in_commit(
365
385
name : f. name ( ) . unwrap ( ) . to_string ( ) ,
366
386
contents,
367
387
block : parent_block,
368
- function : match parent_fn {
369
- x if x. is_empty ( ) => None ,
370
- x => Some ( x) ,
371
- } ,
388
+ function : parent_fn,
372
389
return_type : f. ret_type ( ) . map ( |ty| ty. to_string ( ) ) ,
373
- arguments : f. param_list ( ) . map ( |args| {
374
- args. params ( )
390
+ arguments : match f. param_list ( ) {
391
+ Some ( args) => args
392
+ . params ( )
375
393
. map ( |arg| arg. to_string ( ) )
376
- . collect :: < Vec < String > > ( )
377
- } ) ,
394
+ . collect :: < Vec < String > > ( ) ,
395
+ None => Vec :: new ( ) ,
396
+ } ,
378
397
lifetime : generics. 1 ,
379
398
generics : generics. 0 ,
380
399
lines : ( stuff. 0 . 0 , stuff. 0 . 1 ) ,
400
+ attributes : attr. 1 ,
401
+ doc_comments : attr. 0 ,
381
402
} ;
382
403
hist. push ( function) ;
383
404
}
@@ -436,10 +457,11 @@ fn get_stuff<T: AstNode>(
436
457
}
437
458
let start = map[ & start_line] ;
438
459
let mut start_lines = start_line;
439
- let mut content: String = file[ * start.. found_start_brace] . to_string ( ) ;
460
+ let mut content: String = file[ ( * start) ..= found_start_brace] . to_string ( ) ;
440
461
if & content[ ..1 ] == "\n " {
441
462
content = content[ 1 ..] . to_string ( ) ;
442
- } (
463
+ }
464
+ (
443
465
( start_line, end_line) ,
444
466
(
445
467
content
@@ -454,33 +476,46 @@ fn get_stuff<T: AstNode>(
454
476
format ! (
455
477
"\n {}: {}" ,
456
478
end_line,
457
- file. lines( ) . nth( if end_line == file. lines( ) . count( ) -1 { end_line} else { end_line - 1 } ) . unwrap_or( "" )
479
+ file. lines( )
480
+ . nth( if end_line == file. lines( ) . count( ) - 1 {
481
+ end_line
482
+ } else {
483
+ end_line - 1
484
+ } )
485
+ . unwrap_or( "" )
458
486
) ,
459
487
) ,
460
488
( starts, end_line) ,
461
489
)
462
490
}
463
491
464
- fn get_genrerics_and_lifetime < T : HasGenericParams > (
465
- block : & T ,
466
- ) -> ( Option < Vec < String > > , Option < Vec < String > > ) {
492
+ fn get_genrerics_and_lifetime < T : HasGenericParams > ( block : & T ) -> ( Vec < String > , Vec < String > ) {
467
493
match block. generic_param_list ( ) {
468
- None => ( None , None ) ,
494
+ None => ( vec ! [ ] , vec ! [ ] ) ,
469
495
Some ( gt) => (
470
- Some (
471
- gt. generic_params ( )
472
- . map ( |gt| gt. to_string ( ) )
473
- . collect :: < Vec < String > > ( ) ,
474
- ) ,
475
- Some (
476
- gt. lifetime_params ( )
477
- . map ( |lt| lt. to_string ( ) )
478
- . collect :: < Vec < String > > ( ) ,
479
- ) ,
496
+ gt. generic_params ( )
497
+ . map ( |gt| gt. to_string ( ) )
498
+ . collect :: < Vec < String > > ( ) ,
499
+ gt. lifetime_params ( )
500
+ . map ( |lt| lt. to_string ( ) )
501
+ . collect :: < Vec < String > > ( ) ,
480
502
) ,
481
503
}
482
504
}
483
505
506
+ fn get_doc_comments_and_attrs < T : HasDocComments > ( block : & T ) -> ( Vec < String > , Vec < String > ) {
507
+ (
508
+ block
509
+ . doc_comments ( )
510
+ . map ( |c| c. to_string ( ) )
511
+ . collect :: < Vec < String > > ( ) ,
512
+ block
513
+ . attrs ( )
514
+ . map ( |c| c. to_string ( ) )
515
+ . collect :: < Vec < String > > ( ) ,
516
+ )
517
+ }
518
+
484
519
fn find_function_in_commit_with_filetype (
485
520
commit : & str ,
486
521
name : & str ,
@@ -616,7 +651,7 @@ mod tests {
616
651
println ! ( "time taken: {}" , after. num_seconds( ) ) ;
617
652
match & output {
618
653
Ok ( functions) => {
619
- println ! ( "{:? }" , functions) ;
654
+ println ! ( "{}" , functions) ;
620
655
}
621
656
Err ( e) => println ! ( "-{}-" , e) ,
622
657
}
0 commit comments