perl-module-name 0.12.0

Normalize Perl module separators and build legacy/canonical name variants
Documentation
use perl_module_name::{
    legacy_package_separator, module_variant_pairs, normalize_package_separator,
};

fn apply_variant_pairs(line: &str, old_module: &str, new_module: &str) -> String {
    let mut rewritten = line.to_string();

    for (from, to) in module_variant_pairs(old_module, new_module) {
        rewritten = rewritten.replace(&from, &to);
    }

    rewritten
}

#[test]
fn canonical_and_legacy_pairs_rewrite_corresponding_import_styles() {
    let canonical_line = "use My::App;";
    let legacy_line = "use My'App;";

    let canonical_rewritten = apply_variant_pairs(canonical_line, "My::App", "My::RenamedApp");
    let legacy_rewritten = apply_variant_pairs(legacy_line, "My::App", "My::RenamedApp");

    assert_eq!(canonical_rewritten, "use My::RenamedApp;");
    assert_eq!(legacy_rewritten, "use My'RenamedApp;");
}

#[test]
fn normalize_and_legacy_helpers_form_stable_bridge_for_variant_generation() {
    let old_module = "Legacy'Pkg";
    let new_module = "Next::Pkg";

    let normalized_old = normalize_package_separator(old_module).into_owned();
    let normalized_new = normalize_package_separator(new_module).into_owned();

    let pairs = module_variant_pairs(old_module, new_module);

    assert_eq!(pairs[0], (normalized_old.clone(), normalized_new.clone()));
    assert_eq!(
        pairs[1],
        (
            legacy_package_separator(&normalized_old).into_owned(),
            legacy_package_separator(&normalized_new).into_owned(),
        )
    );
}