Skip to content

Commit 7702a98

Browse files
committed
add back quotes when package.yml line begins with - ::
1 parent 0d58471 commit 7702a98

File tree

1 file changed

+73
-31
lines changed

1 file changed

+73
-31
lines changed

src/packs/pack.rs

Lines changed: 73 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::{
88

99
use anyhow::Context;
1010
use core::hash::Hash;
11+
use regex::Regex;
1112
use serde::{Deserialize, Deserializer, Serialize, Serializer};
1213
use serde_yaml::Value;
1314

@@ -395,17 +396,24 @@ fn is_default_public_folder(value: &Option<PathBuf>) -> bool {
395396
}
396397
}
397398

398-
pub fn serialize_pack(pack: &Pack) -> String {
399+
pub fn serialize_pack(pack: &Pack) -> anyhow::Result<String> {
399400
let serialized_pack = serde_yaml::to_string(&pack).unwrap();
400401
if serialized_pack == "{}\n" {
401-
"".to_owned()
402+
Ok("".to_owned())
402403
} else {
403-
serialized_pack
404+
add_back_necessary_quotes(serialized_pack)
404405
}
405406
}
406407

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+
407415
pub fn write_pack_to_disk(pack: &Pack) -> anyhow::Result<()> {
408-
let serialized_pack = serialize_pack(pack);
416+
let serialized_pack = serialize_pack(pack)?;
409417
let pack_dir = pack.yml.parent().ok_or_else(|| {
410418
anyhow::Error::new(std::io::Error::new(
411419
std::io::ErrorKind::NotFound,
@@ -469,13 +477,13 @@ mod tests {
469477
use super::*;
470478
use pretty_assertions::assert_eq;
471479

472-
fn reserialize_pack(pack_yml: &str) -> String {
480+
fn reserialize_pack(pack_yml: &str) -> anyhow::Result<String> {
473481
let deserialized_pack = serde_yaml::from_str::<Pack>(pack_yml).unwrap();
474482
serialize_pack(&deserialized_pack)
475483
}
476484

477485
#[test]
478-
fn test_serde_sorted_dependencies() {
486+
fn test_serde_sorted_dependencies() -> anyhow::Result<()> {
479487
let pack_yml = r#"
480488
# some comment
481489
dependencies:
@@ -484,7 +492,7 @@ dependencies:
484492
- packs/b
485493
"#;
486494

487-
let actual = reserialize_pack(pack_yml);
495+
let actual = reserialize_pack(pack_yml)?;
488496

489497
let expected = r#"
490498
dependencies:
@@ -494,11 +502,12 @@ dependencies:
494502
"#
495503
.trim_start();
496504

497-
assert_eq!(expected, actual)
505+
assert_eq!(expected, actual);
506+
Ok(())
498507
}
499508

500509
#[test]
501-
fn test_serde_with_enforcements() {
510+
fn test_serde_with_enforcements() -> anyhow::Result<()> {
502511
let pack_yml = r#"
503512
# some comment
504513
enforce_privacy: true
@@ -510,7 +519,7 @@ dependencies:
510519
foobar: true
511520
"#;
512521

513-
let actual = reserialize_pack(pack_yml);
522+
let actual = reserialize_pack(pack_yml)?;
514523

515524
let expected = r#"
516525
enforce_privacy: true
@@ -523,11 +532,12 @@ foobar: true
523532
"#
524533
.trim_start();
525534

526-
assert_eq!(expected, actual)
535+
assert_eq!(expected, actual);
536+
Ok(())
527537
}
528538

529539
#[test]
530-
fn test_serde_with_arbitrary_client_keys() {
540+
fn test_serde_with_arbitrary_client_keys() -> anyhow::Result<()> {
531541
let pack_yml = r#"
532542
# some comment
533543
dependencies:
@@ -537,7 +547,7 @@ dependencies:
537547
foobar: true
538548
"#;
539549

540-
let actual = reserialize_pack(pack_yml);
550+
let actual = reserialize_pack(pack_yml)?;
541551

542552
let expected = r#"
543553
dependencies:
@@ -548,11 +558,12 @@ foobar: true
548558
"#
549559
.trim_start();
550560

551-
assert_eq!(expected, actual)
561+
assert_eq!(expected, actual);
562+
Ok(())
552563
}
553564

554565
#[test]
555-
fn test_serde_with_duplicate_dependencies() {
566+
fn test_serde_with_duplicate_dependencies() -> anyhow::Result<()> {
556567
let pack_yml = r#"
557568
dependencies:
558569
- packs/a
@@ -562,7 +573,7 @@ dependencies:
562573
- packs/a
563574
"#;
564575

565-
let actual = reserialize_pack(pack_yml);
576+
let actual = reserialize_pack(pack_yml)?;
566577

567578
let expected = r#"
568579
dependencies:
@@ -571,19 +582,20 @@ dependencies:
571582
"#
572583
.trim_start();
573584

574-
assert_eq!(expected, actual)
585+
assert_eq!(expected, actual);
586+
Ok(())
575587
}
576588

577589
#[test]
578-
fn test_serde_with_explicitly_empty_visible() {
590+
fn test_serde_with_explicitly_empty_visible() -> anyhow::Result<()> {
579591
let pack_yml = r#"
580592
visible_to:
581593
- packs/c
582594
- packs/a
583595
- packs/b
584596
"#;
585597

586-
let actual = reserialize_pack(pack_yml);
598+
let actual = reserialize_pack(pack_yml)?;
587599

588600
let expected = r#"
589601
visible_to:
@@ -593,18 +605,19 @@ visible_to:
593605
"#
594606
.trim_start();
595607

596-
assert_eq!(expected, actual)
608+
assert_eq!(expected, actual);
609+
Ok(())
597610
}
598611

599612
#[test]
600-
fn test_serde_with_metadata() {
613+
fn test_serde_with_metadata() -> anyhow::Result<()> {
601614
let pack_yml = r#"
602615
enforce_dependencies: false
603616
metadata:
604617
foobar: true
605618
"#;
606619

607-
let actual = reserialize_pack(pack_yml);
620+
let actual = reserialize_pack(pack_yml)?;
608621

609622
let expected = r#"
610623
enforce_dependencies: false
@@ -613,29 +626,31 @@ metadata:
613626
"#
614627
.trim_start();
615628

616-
assert_eq!(expected, actual)
629+
assert_eq!(expected, actual);
630+
Ok(())
617631
}
618632

619633
#[test]
620-
fn test_serde_with_owner() {
634+
fn test_serde_with_owner() -> anyhow::Result<()> {
621635
let pack_yml = r#"
622636
owner: Foobar
623637
enforce_dependencies: true
624638
"#;
625639

626-
let actual = reserialize_pack(pack_yml);
640+
let actual = reserialize_pack(pack_yml)?;
627641

628642
let expected = r#"
629643
owner: Foobar
630644
enforce_dependencies: true
631645
"#
632646
.trim_start();
633647

634-
assert_eq!(expected, actual)
648+
assert_eq!(expected, actual);
649+
Ok(())
635650
}
636651

637652
#[test]
638-
fn test_serde_with_enforcement_globs() {
653+
fn test_serde_with_enforcement_globs() -> anyhow::Result<()> {
639654
let pack_yml = r#"
640655
enforcement_globs_ignore:
641656
- enforcements:
@@ -682,7 +697,7 @@ enforcement_globs_ignore:
682697
]
683698
);
684699

685-
let reserialized = reserialize_pack(pack_yml);
700+
let reserialized = reserialize_pack(pack_yml)?;
686701
let re_pack: Result<Pack, _> = serde_yaml::from_str(&reserialized);
687702
let re_pack = re_pack.unwrap();
688703
assert_eq!(pack, re_pack);
@@ -697,17 +712,19 @@ enforcement_globs_ignore:
697712
})
698713
);
699714
assert_eq!(pack.ignores_for_enforcement("nope"), None);
715+
Ok(())
700716
}
701717

702718
#[test]
703-
fn test_serde_with_empty_pack() {
719+
fn test_serde_with_empty_pack() -> anyhow::Result<()> {
704720
let pack_yml = r#""#;
705721

706-
let actual = reserialize_pack(pack_yml);
722+
let actual = reserialize_pack(pack_yml)?;
707723

708724
let expected = r#""#.trim_start();
709725

710-
assert_eq!(expected, actual)
726+
assert_eq!(expected, actual);
727+
Ok(())
711728
}
712729

713730
#[test]
@@ -723,6 +740,31 @@ enforcement_globs_ignore:
723740
assert_eq!(expected, actual)
724741
}
725742

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+
726768
#[test]
727769
fn test_all_recorded_violations() -> anyhow::Result<()> {
728770
let root = test_util::get_absolute_root(

0 commit comments

Comments
 (0)