@@ -274,7 +274,7 @@ impl<'new> CloneIn<'new> for Message<'_> {
274
274
275
275
impl < ' a > Message < ' a > {
276
276
#[ expect( clippy:: cast_possible_truncation) ] // for `as u32`
277
- pub fn new ( error : OxcDiagnostic , fix : Option < Fix < ' a > > ) -> Self {
277
+ pub fn new ( error : OxcDiagnostic , fixes : PossibleFixes < ' a > ) -> Self {
278
278
let ( start, end) = if let Some ( labels) = & error. labels {
279
279
let start = labels
280
280
. iter ( )
@@ -288,8 +288,6 @@ impl<'a> Message<'a> {
288
288
} else {
289
289
( 0 , 0 )
290
290
} ;
291
- // ToDo support multiple fixes
292
- let fixes = fix. map_or ( PossibleFixes :: None , PossibleFixes :: Single ) ;
293
291
Self { error, span : Span :: new ( start, end) , fixes, fixed : false }
294
292
}
295
293
}
@@ -387,7 +385,7 @@ mod test {
387
385
use oxc_diagnostics:: OxcDiagnostic ;
388
386
use oxc_span:: Span ;
389
387
390
- use super :: { CompositeFix , Fix , FixResult , Fixer , Message } ;
388
+ use super :: { CompositeFix , Fix , FixResult , Fixer , Message , PossibleFixes } ;
391
389
392
390
fn insert_at_end ( ) -> OxcDiagnostic {
393
391
OxcDiagnostic :: warn ( "End" )
@@ -464,28 +462,36 @@ mod test {
464
462
Fixer :: new ( TEST_CODE , messages) . fix ( )
465
463
}
466
464
467
- fn create_message ( error : OxcDiagnostic , fix : Option < Fix > ) -> Message {
465
+ fn create_message ( error : OxcDiagnostic , fix : PossibleFixes ) -> Message {
468
466
Message :: new ( error, fix)
469
467
}
470
468
471
469
#[ test]
472
470
fn insert_at_the_end ( ) {
473
- let result = get_fix_result ( vec ! [ create_message( insert_at_end( ) , Some ( INSERT_AT_END ) ) ] ) ;
471
+ let result = get_fix_result ( vec ! [ create_message(
472
+ insert_at_end( ) ,
473
+ PossibleFixes :: Single ( INSERT_AT_END ) ,
474
+ ) ] ) ;
474
475
assert_eq ! ( result. fixed_code, TEST_CODE . to_string( ) + INSERT_AT_END . content. as_ref( ) ) ;
475
476
assert_eq ! ( result. messages. len( ) , 0 ) ;
476
477
}
477
478
478
479
#[ test]
479
480
fn insert_at_the_start ( ) {
480
- let result = get_fix_result ( vec ! [ create_message( insert_at_start( ) , Some ( INSERT_AT_START ) ) ] ) ;
481
+ let result = get_fix_result ( vec ! [ create_message(
482
+ insert_at_start( ) ,
483
+ PossibleFixes :: Single ( INSERT_AT_START ) ,
484
+ ) ] ) ;
481
485
assert_eq ! ( result. fixed_code, INSERT_AT_START . content. to_string( ) + TEST_CODE ) ;
482
486
assert_eq ! ( result. messages. len( ) , 0 ) ;
483
487
}
484
488
485
489
#[ test]
486
490
fn insert_at_the_middle ( ) {
487
- let result =
488
- get_fix_result ( vec ! [ create_message( insert_at_middle( ) , Some ( INSERT_AT_MIDDLE ) ) ] ) ;
491
+ let result = get_fix_result ( vec ! [ create_message(
492
+ insert_at_middle( ) ,
493
+ PossibleFixes :: Single ( INSERT_AT_MIDDLE ) ,
494
+ ) ] ) ;
489
495
assert_eq ! (
490
496
result. fixed_code,
491
497
TEST_CODE . cow_replace( "6 *" , & format!( "{}{}" , INSERT_AT_MIDDLE . content, "6 *" ) )
@@ -496,9 +502,9 @@ mod test {
496
502
#[ test]
497
503
fn insert_at_the_start_middle_end ( ) {
498
504
let messages = vec ! [
499
- create_message( insert_at_middle( ) , Some ( INSERT_AT_MIDDLE ) ) ,
500
- create_message( insert_at_start( ) , Some ( INSERT_AT_START ) ) ,
501
- create_message( insert_at_end( ) , Some ( INSERT_AT_END ) ) ,
505
+ create_message( insert_at_middle( ) , PossibleFixes :: Single ( INSERT_AT_MIDDLE ) ) ,
506
+ create_message( insert_at_start( ) , PossibleFixes :: Single ( INSERT_AT_START ) ) ,
507
+ create_message( insert_at_end( ) , PossibleFixes :: Single ( INSERT_AT_END ) ) ,
502
508
] ;
503
509
let result = get_fix_result ( messages) ;
504
510
assert_eq ! (
@@ -516,29 +522,35 @@ mod test {
516
522
#[ test]
517
523
#[ should_panic = "Negative range is invalid" ]
518
524
fn ignore_reverse_range ( ) {
519
- let result = get_fix_result ( vec ! [ create_message( reverse_range( ) , Some ( REVERSE_RANGE ) ) ] ) ;
525
+ let result = get_fix_result ( vec ! [ create_message(
526
+ reverse_range( ) ,
527
+ PossibleFixes :: Single ( REVERSE_RANGE ) ,
528
+ ) ] ) ;
520
529
assert_eq ! ( result. fixed_code, TEST_CODE ) ;
521
530
}
522
531
523
532
#[ test]
524
533
fn replace_at_the_start ( ) {
525
- let result = get_fix_result ( vec ! [ create_message( replace_var( ) , Some ( REPLACE_VAR ) ) ] ) ;
534
+ let result =
535
+ get_fix_result ( vec ! [ create_message( replace_var( ) , PossibleFixes :: Single ( REPLACE_VAR ) ) ] ) ;
526
536
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "var" , "let" ) ) ;
527
537
assert_eq ! ( result. messages. len( ) , 0 ) ;
528
538
assert ! ( result. fixed) ;
529
539
}
530
540
531
541
#[ test]
532
542
fn replace_at_the_middle ( ) {
533
- let result = get_fix_result ( vec ! [ create_message( replace_id( ) , Some ( REPLACE_ID ) ) ] ) ;
543
+ let result =
544
+ get_fix_result ( vec ! [ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ] ) ;
534
545
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "answer" , "foo" ) ) ;
535
546
assert_eq ! ( result. messages. len( ) , 0 ) ;
536
547
assert ! ( result. fixed) ;
537
548
}
538
549
539
550
#[ test]
540
551
fn replace_at_the_end ( ) {
541
- let result = get_fix_result ( vec ! [ create_message( replace_num( ) , Some ( REPLACE_NUM ) ) ] ) ;
552
+ let result =
553
+ get_fix_result ( vec ! [ create_message( replace_num( ) , PossibleFixes :: Single ( REPLACE_NUM ) ) ] ) ;
542
554
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( '6' , "5" ) ) ;
543
555
assert_eq ! ( result. messages. len( ) , 0 ) ;
544
556
assert ! ( result. fixed) ;
@@ -547,9 +559,9 @@ mod test {
547
559
#[ test]
548
560
fn replace_at_the_start_middle_end ( ) {
549
561
let messages = vec ! [
550
- create_message( replace_id( ) , Some ( REPLACE_ID ) ) ,
551
- create_message( replace_var( ) , Some ( REPLACE_VAR ) ) ,
552
- create_message( replace_num( ) , Some ( REPLACE_NUM ) ) ,
562
+ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ,
563
+ create_message( replace_var( ) , PossibleFixes :: Single ( REPLACE_VAR ) ) ,
564
+ create_message( replace_num( ) , PossibleFixes :: Single ( REPLACE_NUM ) ) ,
553
565
] ;
554
566
let result = get_fix_result ( messages) ;
555
567
assert_eq ! ( result. fixed_code, "let foo = 5 * 7;" ) ;
@@ -559,7 +571,10 @@ mod test {
559
571
560
572
#[ test]
561
573
fn remove_at_the_start ( ) {
562
- let result = get_fix_result ( vec ! [ create_message( remove_start( ) , Some ( REMOVE_START ) ) ] ) ;
574
+ let result = get_fix_result ( vec ! [ create_message(
575
+ remove_start( ) ,
576
+ PossibleFixes :: Single ( REMOVE_START ) ,
577
+ ) ] ) ;
563
578
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "var " , "" ) ) ;
564
579
assert_eq ! ( result. messages. len( ) , 0 ) ;
565
580
assert ! ( result. fixed) ;
@@ -569,7 +584,7 @@ mod test {
569
584
fn remove_at_the_middle ( ) {
570
585
let result = get_fix_result ( vec ! [ create_message(
571
586
remove_middle( Span :: default ( ) ) ,
572
- Some ( REMOVE_MIDDLE ) ,
587
+ PossibleFixes :: Single ( REMOVE_MIDDLE ) ,
573
588
) ] ) ;
574
589
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "answer" , "a" ) ) ;
575
590
assert_eq ! ( result. messages. len( ) , 0 ) ;
@@ -578,7 +593,8 @@ mod test {
578
593
579
594
#[ test]
580
595
fn remove_at_the_end ( ) {
581
- let result = get_fix_result ( vec ! [ create_message( remove_end( ) , Some ( REMOVE_END ) ) ] ) ;
596
+ let result =
597
+ get_fix_result ( vec ! [ create_message( remove_end( ) , PossibleFixes :: Single ( REMOVE_END ) ) ] ) ;
582
598
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( " * 7" , "" ) ) ;
583
599
assert_eq ! ( result. messages. len( ) , 0 ) ;
584
600
assert ! ( result. fixed) ;
@@ -587,9 +603,9 @@ mod test {
587
603
#[ test]
588
604
fn replace_at_start_remove_at_middle_insert_at_end ( ) {
589
605
let result = get_fix_result ( vec ! [
590
- create_message( insert_at_end( ) , Some ( INSERT_AT_END ) ) ,
591
- create_message( remove_end( ) , Some ( REMOVE_END ) ) ,
592
- create_message( replace_var( ) , Some ( REPLACE_VAR ) ) ,
606
+ create_message( insert_at_end( ) , PossibleFixes :: Single ( INSERT_AT_END ) ) ,
607
+ create_message( remove_end( ) , PossibleFixes :: Single ( REMOVE_END ) ) ,
608
+ create_message( replace_var( ) , PossibleFixes :: Single ( REPLACE_VAR ) ) ,
593
609
] ) ;
594
610
assert_eq ! ( result. fixed_code, "let answer = 6;// end" ) ;
595
611
assert_eq ! ( result. messages. len( ) , 0 ) ;
@@ -599,8 +615,8 @@ mod test {
599
615
#[ test]
600
616
fn apply_one_fix_when_spans_overlap ( ) {
601
617
let result = get_fix_result ( vec ! [
602
- create_message( remove_middle( Span :: default ( ) ) , Some ( REMOVE_MIDDLE ) ) ,
603
- create_message( replace_id( ) , Some ( REPLACE_ID ) ) ,
618
+ create_message( remove_middle( Span :: default ( ) ) , PossibleFixes :: Single ( REMOVE_MIDDLE ) ) ,
619
+ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ,
604
620
] ) ;
605
621
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "answer" , "foo" ) ) ;
606
622
assert_eq ! ( result. messages. len( ) , 1 ) ;
@@ -611,8 +627,8 @@ mod test {
611
627
#[ test]
612
628
fn apply_two_fix_when_the_start_the_same_as_the_previous_end ( ) {
613
629
let result = get_fix_result ( vec ! [
614
- create_message( remove_start( ) , Some ( REMOVE_START ) ) ,
615
- create_message( replace_id( ) , Some ( REPLACE_ID ) ) ,
630
+ create_message( remove_start( ) , PossibleFixes :: Single ( REMOVE_START ) ) ,
631
+ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ,
616
632
] ) ;
617
633
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "var answer" , "foo" ) ) ;
618
634
assert_eq ! ( result. messages. len( ) , 0 ) ;
@@ -622,9 +638,9 @@ mod test {
622
638
#[ test]
623
639
fn apply_one_fix_when_range_overlap_and_one_message_has_no_fix ( ) {
624
640
let result = get_fix_result ( vec ! [
625
- create_message( remove_middle( Span :: default ( ) ) , Some ( REMOVE_MIDDLE ) ) ,
626
- create_message( replace_id( ) , Some ( REPLACE_ID ) ) ,
627
- create_message( no_fix( Span :: default ( ) ) , None ) ,
641
+ create_message( remove_middle( Span :: default ( ) ) , PossibleFixes :: Single ( REMOVE_MIDDLE ) ) ,
642
+ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ,
643
+ create_message( no_fix( Span :: default ( ) ) , PossibleFixes :: None ) ,
628
644
] ) ;
629
645
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "answer" , "foo" ) ) ;
630
646
assert_eq ! ( result. messages. len( ) , 2 ) ;
@@ -636,19 +652,20 @@ mod test {
636
652
#[ test]
637
653
fn apply_same_fix_when_span_overlap_regardless_of_order ( ) {
638
654
let result1 = get_fix_result ( vec ! [
639
- create_message( remove_middle( Span :: default ( ) ) , Some ( REMOVE_MIDDLE ) ) ,
640
- create_message( replace_id( ) , Some ( REPLACE_ID ) ) ,
655
+ create_message( remove_middle( Span :: default ( ) ) , PossibleFixes :: Single ( REMOVE_MIDDLE ) ) ,
656
+ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ,
641
657
] ) ;
642
658
let result2 = get_fix_result ( vec ! [
643
- create_message( replace_id( ) , Some ( REPLACE_ID ) ) ,
644
- create_message( remove_middle( Span :: default ( ) ) , Some ( REMOVE_MIDDLE ) ) ,
659
+ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ,
660
+ create_message( remove_middle( Span :: default ( ) ) , PossibleFixes :: Single ( REMOVE_MIDDLE ) ) ,
645
661
] ) ;
646
662
assert_eq ! ( result1. fixed_code, result2. fixed_code) ;
647
663
}
648
664
649
665
#[ test]
650
666
fn should_not_apply_fix_with_one_no_fix ( ) {
651
- let result = get_fix_result ( vec ! [ create_message( no_fix( Span :: default ( ) ) , None ) ] ) ;
667
+ let result =
668
+ get_fix_result ( vec ! [ create_message( no_fix( Span :: default ( ) ) , PossibleFixes :: None ) ] ) ;
652
669
assert_eq ! ( result. fixed_code, TEST_CODE ) ;
653
670
assert_eq ! ( result. messages. len( ) , 1 ) ;
654
671
assert_eq ! ( result. messages[ 0 ] . error. to_string( ) , "nofix" ) ;
@@ -658,9 +675,9 @@ mod test {
658
675
#[ test]
659
676
fn sort_no_fix_messages_correctly ( ) {
660
677
let result = get_fix_result ( vec ! [
661
- create_message( replace_id( ) , Some ( REPLACE_ID ) ) ,
662
- Message :: new( no_fix_2( Span :: new( 1 , 7 ) ) , None ) ,
663
- Message :: new( no_fix_1( Span :: new( 1 , 3 ) ) , None ) ,
678
+ create_message( replace_id( ) , PossibleFixes :: Single ( REPLACE_ID ) ) ,
679
+ Message :: new( no_fix_2( Span :: new( 1 , 7 ) ) , PossibleFixes :: None ) ,
680
+ Message :: new( no_fix_1( Span :: new( 1 , 3 ) ) , PossibleFixes :: None ) ,
664
681
] ) ;
665
682
assert_eq ! ( result. fixed_code, TEST_CODE . cow_replace( "answer" , "foo" ) ) ;
666
683
assert_eq ! ( result. messages. len( ) , 2 ) ;
0 commit comments