@@ -8,6 +8,7 @@ use std::{
8
8
9
9
use anyhow:: Context ;
10
10
use core:: hash:: Hash ;
11
+ use regex:: Regex ;
11
12
use serde:: { Deserialize , Deserializer , Serialize , Serializer } ;
12
13
use serde_yaml:: Value ;
13
14
@@ -395,17 +396,24 @@ fn is_default_public_folder(value: &Option<PathBuf>) -> bool {
395
396
}
396
397
}
397
398
398
- pub fn serialize_pack ( pack : & Pack ) -> String {
399
+ pub fn serialize_pack ( pack : & Pack ) -> anyhow :: Result < String > {
399
400
let serialized_pack = serde_yaml:: to_string ( & pack) . unwrap ( ) ;
400
401
if serialized_pack == "{}\n " {
401
- "" . to_owned ( )
402
+ Ok ( "" . to_owned ( ) )
402
403
} else {
403
- serialized_pack
404
+ add_back_necessary_quotes ( serialized_pack)
404
405
}
405
406
}
406
407
408
+ fn add_back_necessary_quotes (
409
+ serialized_pack : String ,
410
+ ) -> anyhow:: Result < String > {
411
+ let re = Regex :: new ( "- (::.+)" ) ?;
412
+ Ok ( re. replace_all ( & serialized_pack, "- \" $1\" " ) . to_string ( ) )
413
+ }
414
+
407
415
pub fn write_pack_to_disk ( pack : & Pack ) -> anyhow:: Result < ( ) > {
408
- let serialized_pack = serialize_pack ( pack) ;
416
+ let serialized_pack = serialize_pack ( pack) ? ;
409
417
let pack_dir = pack. yml . parent ( ) . ok_or_else ( || {
410
418
anyhow:: Error :: new ( std:: io:: Error :: new (
411
419
std:: io:: ErrorKind :: NotFound ,
@@ -469,13 +477,13 @@ mod tests {
469
477
use super :: * ;
470
478
use pretty_assertions:: assert_eq;
471
479
472
- fn reserialize_pack ( pack_yml : & str ) -> String {
480
+ fn reserialize_pack ( pack_yml : & str ) -> anyhow :: Result < String > {
473
481
let deserialized_pack = serde_yaml:: from_str :: < Pack > ( pack_yml) . unwrap ( ) ;
474
482
serialize_pack ( & deserialized_pack)
475
483
}
476
484
477
485
#[ test]
478
- fn test_serde_sorted_dependencies ( ) {
486
+ fn test_serde_sorted_dependencies ( ) -> anyhow :: Result < ( ) > {
479
487
let pack_yml = r#"
480
488
# some comment
481
489
dependencies:
@@ -484,7 +492,7 @@ dependencies:
484
492
- packs/b
485
493
"# ;
486
494
487
- let actual = reserialize_pack ( pack_yml) ;
495
+ let actual = reserialize_pack ( pack_yml) ? ;
488
496
489
497
let expected = r#"
490
498
dependencies:
@@ -494,11 +502,12 @@ dependencies:
494
502
"#
495
503
. trim_start ( ) ;
496
504
497
- assert_eq ! ( expected, actual)
505
+ assert_eq ! ( expected, actual) ;
506
+ Ok ( ( ) )
498
507
}
499
508
500
509
#[ test]
501
- fn test_serde_with_enforcements ( ) {
510
+ fn test_serde_with_enforcements ( ) -> anyhow :: Result < ( ) > {
502
511
let pack_yml = r#"
503
512
# some comment
504
513
enforce_privacy: true
@@ -510,7 +519,7 @@ dependencies:
510
519
foobar: true
511
520
"# ;
512
521
513
- let actual = reserialize_pack ( pack_yml) ;
522
+ let actual = reserialize_pack ( pack_yml) ? ;
514
523
515
524
let expected = r#"
516
525
enforce_privacy: true
@@ -523,11 +532,12 @@ foobar: true
523
532
"#
524
533
. trim_start ( ) ;
525
534
526
- assert_eq ! ( expected, actual)
535
+ assert_eq ! ( expected, actual) ;
536
+ Ok ( ( ) )
527
537
}
528
538
529
539
#[ test]
530
- fn test_serde_with_arbitrary_client_keys ( ) {
540
+ fn test_serde_with_arbitrary_client_keys ( ) -> anyhow :: Result < ( ) > {
531
541
let pack_yml = r#"
532
542
# some comment
533
543
dependencies:
@@ -537,7 +547,7 @@ dependencies:
537
547
foobar: true
538
548
"# ;
539
549
540
- let actual = reserialize_pack ( pack_yml) ;
550
+ let actual = reserialize_pack ( pack_yml) ? ;
541
551
542
552
let expected = r#"
543
553
dependencies:
@@ -548,11 +558,12 @@ foobar: true
548
558
"#
549
559
. trim_start ( ) ;
550
560
551
- assert_eq ! ( expected, actual)
561
+ assert_eq ! ( expected, actual) ;
562
+ Ok ( ( ) )
552
563
}
553
564
554
565
#[ test]
555
- fn test_serde_with_duplicate_dependencies ( ) {
566
+ fn test_serde_with_duplicate_dependencies ( ) -> anyhow :: Result < ( ) > {
556
567
let pack_yml = r#"
557
568
dependencies:
558
569
- packs/a
@@ -562,7 +573,7 @@ dependencies:
562
573
- packs/a
563
574
"# ;
564
575
565
- let actual = reserialize_pack ( pack_yml) ;
576
+ let actual = reserialize_pack ( pack_yml) ? ;
566
577
567
578
let expected = r#"
568
579
dependencies:
@@ -571,19 +582,20 @@ dependencies:
571
582
"#
572
583
. trim_start ( ) ;
573
584
574
- assert_eq ! ( expected, actual)
585
+ assert_eq ! ( expected, actual) ;
586
+ Ok ( ( ) )
575
587
}
576
588
577
589
#[ test]
578
- fn test_serde_with_explicitly_empty_visible ( ) {
590
+ fn test_serde_with_explicitly_empty_visible ( ) -> anyhow :: Result < ( ) > {
579
591
let pack_yml = r#"
580
592
visible_to:
581
593
- packs/c
582
594
- packs/a
583
595
- packs/b
584
596
"# ;
585
597
586
- let actual = reserialize_pack ( pack_yml) ;
598
+ let actual = reserialize_pack ( pack_yml) ? ;
587
599
588
600
let expected = r#"
589
601
visible_to:
@@ -593,18 +605,19 @@ visible_to:
593
605
"#
594
606
. trim_start ( ) ;
595
607
596
- assert_eq ! ( expected, actual)
608
+ assert_eq ! ( expected, actual) ;
609
+ Ok ( ( ) )
597
610
}
598
611
599
612
#[ test]
600
- fn test_serde_with_metadata ( ) {
613
+ fn test_serde_with_metadata ( ) -> anyhow :: Result < ( ) > {
601
614
let pack_yml = r#"
602
615
enforce_dependencies: false
603
616
metadata:
604
617
foobar: true
605
618
"# ;
606
619
607
- let actual = reserialize_pack ( pack_yml) ;
620
+ let actual = reserialize_pack ( pack_yml) ? ;
608
621
609
622
let expected = r#"
610
623
enforce_dependencies: false
@@ -613,29 +626,31 @@ metadata:
613
626
"#
614
627
. trim_start ( ) ;
615
628
616
- assert_eq ! ( expected, actual)
629
+ assert_eq ! ( expected, actual) ;
630
+ Ok ( ( ) )
617
631
}
618
632
619
633
#[ test]
620
- fn test_serde_with_owner ( ) {
634
+ fn test_serde_with_owner ( ) -> anyhow :: Result < ( ) > {
621
635
let pack_yml = r#"
622
636
owner: Foobar
623
637
enforce_dependencies: true
624
638
"# ;
625
639
626
- let actual = reserialize_pack ( pack_yml) ;
640
+ let actual = reserialize_pack ( pack_yml) ? ;
627
641
628
642
let expected = r#"
629
643
owner: Foobar
630
644
enforce_dependencies: true
631
645
"#
632
646
. trim_start ( ) ;
633
647
634
- assert_eq ! ( expected, actual)
648
+ assert_eq ! ( expected, actual) ;
649
+ Ok ( ( ) )
635
650
}
636
651
637
652
#[ test]
638
- fn test_serde_with_enforcement_globs ( ) {
653
+ fn test_serde_with_enforcement_globs ( ) -> anyhow :: Result < ( ) > {
639
654
let pack_yml = r#"
640
655
enforcement_globs_ignore:
641
656
- enforcements:
@@ -682,7 +697,7 @@ enforcement_globs_ignore:
682
697
]
683
698
) ;
684
699
685
- let reserialized = reserialize_pack ( pack_yml) ;
700
+ let reserialized = reserialize_pack ( pack_yml) ? ;
686
701
let re_pack: Result < Pack , _ > = serde_yaml:: from_str ( & reserialized) ;
687
702
let re_pack = re_pack. unwrap ( ) ;
688
703
assert_eq ! ( pack, re_pack) ;
@@ -697,17 +712,19 @@ enforcement_globs_ignore:
697
712
} )
698
713
) ;
699
714
assert_eq ! ( pack. ignores_for_enforcement( "nope" ) , None ) ;
715
+ Ok ( ( ) )
700
716
}
701
717
702
718
#[ test]
703
- fn test_serde_with_empty_pack ( ) {
719
+ fn test_serde_with_empty_pack ( ) -> anyhow :: Result < ( ) > {
704
720
let pack_yml = r#""# ;
705
721
706
- let actual = reserialize_pack ( pack_yml) ;
722
+ let actual = reserialize_pack ( pack_yml) ? ;
707
723
708
724
let expected = r#""# . trim_start ( ) ;
709
725
710
- assert_eq ! ( expected, actual)
726
+ assert_eq ! ( expected, actual) ;
727
+ Ok ( ( ) )
711
728
}
712
729
713
730
#[ test]
@@ -723,6 +740,31 @@ enforcement_globs_ignore:
723
740
assert_eq ! ( expected, actual)
724
741
}
725
742
743
+ #[ test]
744
+ fn test_serde_with_necessary_quotes_in_ignored_private_constants (
745
+ ) -> anyhow:: Result < ( ) > {
746
+ let pack_yml = r#"
747
+ ignored_private_constants:
748
+ - "::Necessary::Quotes::Constant"
749
+ - "Unnecessary::Quotes::Constant"
750
+ - "::Another::Necessary::Last::Necessary::Constant"
751
+ - "::Necessary"
752
+ "# ;
753
+
754
+ let actual = reserialize_pack ( pack_yml) ?;
755
+ let expected = r#"
756
+ ignored_private_constants:
757
+ - "::Another::Necessary::Last::Necessary::Constant"
758
+ - "::Necessary"
759
+ - "::Necessary::Quotes::Constant"
760
+ - Unnecessary::Quotes::Constant
761
+ "#
762
+ . trim_start ( ) ;
763
+
764
+ assert_eq ! ( expected, actual) ;
765
+ Ok ( ( ) )
766
+ }
767
+
726
768
#[ test]
727
769
fn test_all_recorded_violations ( ) -> anyhow:: Result < ( ) > {
728
770
let root = test_util:: get_absolute_root (
0 commit comments