@@ -336,23 +336,31 @@ impl IsWithin for Range {
336
336
mod diagnostic_message_test {
337
337
use super :: * ;
338
338
339
- pub ( super ) fn parse_compiler_message ( compiler_message : & str ) -> ParsedDiagnostics {
339
+ pub ( super ) fn parse_compiler_message (
340
+ compiler_message : & str ,
341
+ with_related_information : bool ,
342
+ ) -> ParsedDiagnostics {
340
343
let _ = :: env_logger:: try_init ( ) ;
341
344
let cwd = :: std:: env:: current_dir ( ) . unwrap ( ) ;
342
- parse_diagnostics ( compiler_message, & cwd) . expect ( "failed to parse compiler message" )
345
+ parse_diagnostics ( compiler_message, & cwd, with_related_information)
346
+ . expect ( "failed to parse compiler message" )
343
347
}
344
348
345
349
pub ( super ) trait FileDiagnosticTestExt {
350
+ fn single_file_results ( & self ) -> & Vec < ( Diagnostic , Vec < Suggestion > ) > ;
346
351
/// Returns (primary message, secondary messages)
347
352
fn to_messages ( & self ) -> Vec < ( String , Vec < String > ) > ;
353
+ fn to_primary_messages ( & self ) -> Vec < String > ;
354
+ fn to_secondary_messages ( & self ) -> Vec < String > ;
348
355
}
349
356
350
357
impl FileDiagnosticTestExt for ParsedDiagnostics {
358
+ fn single_file_results ( & self ) -> & Vec < ( Diagnostic , Vec < Suggestion > ) > {
359
+ self . diagnostics . values ( ) . nth ( 0 ) . unwrap ( )
360
+ }
361
+
351
362
fn to_messages ( & self ) -> Vec < ( String , Vec < String > ) > {
352
- ( self . diagnostics
353
- . values ( )
354
- . nth ( 0 ) // single file results
355
- . unwrap ( )
363
+ ( self . single_file_results ( )
356
364
. iter ( )
357
365
. map ( |( diagnostic, _) | {
358
366
(
@@ -368,6 +376,17 @@ mod diagnostic_message_test {
368
376
} )
369
377
. collect ( ) )
370
378
}
379
+
380
+ fn to_primary_messages ( & self ) -> Vec < String > {
381
+ self . to_messages ( ) . iter ( ) . map ( |( p, _) | p. clone ( ) ) . collect ( )
382
+ }
383
+
384
+ fn to_secondary_messages ( & self ) -> Vec < String > {
385
+ self . to_messages ( )
386
+ . iter ( )
387
+ . flat_map ( |( _, s) | s. clone ( ) )
388
+ . collect ( )
389
+ }
371
390
}
372
391
373
392
/// ```
@@ -379,9 +398,10 @@ mod diagnostic_message_test {
379
398
/// ```
380
399
#[ test]
381
400
fn message_use_after_move ( ) {
382
- let diag = parse_compiler_message ( include_str ! (
383
- "../../test_data/compiler_message/use-after-move.json"
384
- ) ) ;
401
+ let diag = parse_compiler_message (
402
+ include_str ! ( "../../test_data/compiler_message/use-after-move.json" ) ,
403
+ true ,
404
+ ) ;
385
405
386
406
let diagnostic = & diag. diagnostics . values ( ) . nth ( 0 ) . unwrap ( ) [ 0 ] ;
387
407
@@ -408,9 +428,10 @@ mod diagnostic_message_test {
408
428
/// ```
409
429
#[ test]
410
430
fn message_type_annotations_needed ( ) {
411
- let messages = parse_compiler_message ( include_str ! (
412
- "../../test_data/compiler_message/type-annotations-needed.json"
413
- ) ) . to_messages ( ) ;
431
+ let messages = parse_compiler_message (
432
+ include_str ! ( "../../test_data/compiler_message/type-annotations-needed.json" ) ,
433
+ true ,
434
+ ) . to_messages ( ) ;
414
435
assert_eq ! (
415
436
messages[ 0 ] . 0 ,
416
437
"type annotations needed\n \n \
@@ -421,6 +442,26 @@ mod diagnostic_message_test {
421
442
messages[ 0 ] . 1 ,
422
443
vec![ "consider giving `v` a type" , "cannot infer type for `T`" ]
423
444
) ;
445
+
446
+ // Check if we don't emit related information if it's not supported and
447
+ // if secondary spans are emitted as separate diagnostics
448
+ let messages = parse_compiler_message (
449
+ include_str ! ( "../../test_data/compiler_message/type-annotations-needed.json" ) ,
450
+ false ,
451
+ ) ;
452
+
453
+ assert_eq ! (
454
+ messages. to_primary_messages( ) ,
455
+ vec![
456
+ "type annotations needed\n \n \
457
+ cannot infer type for `T`",
458
+ "type annotations needed\n \n \
459
+ consider giving `v` a type",
460
+ ]
461
+ ) ;
462
+
463
+ let secondaries = messages. to_secondary_messages ( ) ;
464
+ assert ! ( secondaries. is_empty( ) , "{:?}" , secondaries) ;
424
465
}
425
466
426
467
/// ```
@@ -430,9 +471,10 @@ mod diagnostic_message_test {
430
471
/// ```
431
472
#[ test]
432
473
fn message_mismatched_types ( ) {
433
- let messages = parse_compiler_message ( include_str ! (
434
- "../../test_data/compiler_message/mismatched-types.json"
435
- ) ) . to_messages ( ) ;
474
+ let messages = parse_compiler_message (
475
+ include_str ! ( "../../test_data/compiler_message/mismatched-types.json" ) ,
476
+ true ,
477
+ ) . to_messages ( ) ;
436
478
assert_eq ! (
437
479
messages[ 0 ] . 0 ,
438
480
"mismatched types\n \n \
@@ -456,9 +498,10 @@ mod diagnostic_message_test {
456
498
/// ```
457
499
#[ test]
458
500
fn message_not_mutable ( ) {
459
- let messages = parse_compiler_message ( include_str ! (
460
- "../../test_data/compiler_message/not-mut.json"
461
- ) ) . to_messages ( ) ;
501
+ let messages = parse_compiler_message (
502
+ include_str ! ( "../../test_data/compiler_message/not-mut.json" ) ,
503
+ true ,
504
+ ) . to_messages ( ) ;
462
505
assert_eq ! (
463
506
messages[ 0 ] . 0 ,
464
507
"cannot borrow immutable local variable `string` as mutable\n \n \
@@ -484,9 +527,10 @@ mod diagnostic_message_test {
484
527
/// ```
485
528
#[ test]
486
529
fn message_consider_borrowing ( ) {
487
- let messages = parse_compiler_message ( include_str ! (
488
- "../../test_data/compiler_message/consider-borrowing.json"
489
- ) ) . to_messages ( ) ;
530
+ let messages = parse_compiler_message (
531
+ include_str ! ( "../../test_data/compiler_message/consider-borrowing.json" ) ,
532
+ true ,
533
+ ) . to_messages ( ) ;
490
534
assert_eq ! (
491
535
messages[ 0 ] . 0 ,
492
536
r#"mismatched types
@@ -514,9 +558,10 @@ help: consider borrowing here: `&string`"#,
514
558
/// ```
515
559
#[ test]
516
560
fn message_move_out_of_borrow ( ) {
517
- let messages = parse_compiler_message ( include_str ! (
518
- "../../test_data/compiler_message/move-out-of-borrow.json"
519
- ) ) . to_messages ( ) ;
561
+ let messages = parse_compiler_message (
562
+ include_str ! ( "../../test_data/compiler_message/move-out-of-borrow.json" ) ,
563
+ true ,
564
+ ) . to_messages ( ) ;
520
565
assert_eq ! (
521
566
messages[ 0 ] . 0 ,
522
567
"cannot move out of borrowed content\n \n cannot move out of borrowed content"
@@ -536,9 +581,10 @@ help: consider borrowing here: `&string`"#,
536
581
/// ```
537
582
#[ test]
538
583
fn message_unused_use ( ) {
539
- let messages = parse_compiler_message ( include_str ! (
540
- "../../test_data/compiler_message/unused-use.json"
541
- ) ) . to_messages ( ) ;
584
+ let messages = parse_compiler_message (
585
+ include_str ! ( "../../test_data/compiler_message/unused-use.json" ) ,
586
+ true ,
587
+ ) . to_messages ( ) ;
542
588
543
589
// Single compiler message with 3 primary spans should emit 3 separate
544
590
// diagnostics.
@@ -555,9 +601,10 @@ help: consider borrowing here: `&string`"#,
555
601
556
602
#[ test]
557
603
fn message_cannot_find_type ( ) {
558
- let messages = parse_compiler_message ( include_str ! (
559
- "../../test_data/compiler_message/cannot-find-type.json"
560
- ) ) . to_messages ( ) ;
604
+ let messages = parse_compiler_message (
605
+ include_str ! ( "../../test_data/compiler_message/cannot-find-type.json" ) ,
606
+ true ,
607
+ ) . to_messages ( ) ;
561
608
assert_eq ! (
562
609
messages[ 0 ] . 0 ,
563
610
"cannot find type `HashSet` in this scope\n \n \
@@ -572,9 +619,10 @@ help: consider borrowing here: `&string`"#,
572
619
/// ```
573
620
#[ test]
574
621
fn message_clippy_identity_op ( ) {
575
- let diag = parse_compiler_message ( include_str ! (
576
- "../../test_data/compiler_message/clippy-identity-op.json"
577
- ) ) ;
622
+ let diag = parse_compiler_message (
623
+ include_str ! ( "../../test_data/compiler_message/clippy-identity-op.json" ) ,
624
+ true ,
625
+ ) ;
578
626
579
627
let diagnostic = & diag. diagnostics . values ( ) . nth ( 0 ) . unwrap ( ) [ 0 ] ;
580
628
@@ -612,9 +660,10 @@ mod diagnostic_suggestion_test {
612
660
613
661
#[ test]
614
662
fn suggest_use_when_cannot_find_type ( ) {
615
- let diag = parse_compiler_message ( include_str ! (
616
- "../../test_data/compiler_message/cannot-find-type.json"
617
- ) ) ;
663
+ let diag = parse_compiler_message (
664
+ include_str ! ( "../../test_data/compiler_message/cannot-find-type.json" ) ,
665
+ true ,
666
+ ) ;
618
667
619
668
let diagnostics = diag. diagnostics . values ( ) . nth ( 0 ) . unwrap ( ) ;
620
669
@@ -646,9 +695,10 @@ mod diagnostic_suggestion_test {
646
695
647
696
#[ test]
648
697
fn suggest_mut_when_not_mut ( ) {
649
- let diag = parse_compiler_message ( include_str ! (
650
- "../../test_data/compiler_message/not-mut.json"
651
- ) ) ;
698
+ let diag = parse_compiler_message (
699
+ include_str ! ( "../../test_data/compiler_message/not-mut.json" ) ,
700
+ true ,
701
+ ) ;
652
702
653
703
let diagnostics = diag. diagnostics . values ( ) . nth ( 0 ) . unwrap ( ) ;
654
704
@@ -682,9 +732,10 @@ mod diagnostic_suggestion_test {
682
732
/// ```
683
733
#[ test]
684
734
fn suggest_clippy_const_static ( ) {
685
- let diag = parse_compiler_message ( include_str ! (
686
- "../../test_data/compiler_message/clippy-const-static-lifetime.json"
687
- ) ) ;
735
+ let diag = parse_compiler_message (
736
+ include_str ! ( "../../test_data/compiler_message/clippy-const-static-lifetime.json" ) ,
737
+ true ,
738
+ ) ;
688
739
689
740
let diagnostics = diag. diagnostics . values ( ) . nth ( 0 ) . unwrap ( ) ;
690
741
0 commit comments