perl-module 0.16.0

Perl module resolution, import analysis, and refactoring — unified facade
Documentation
use perl_module::path::file_path_to_module_name;
use perl_module::rename::{apply_module_rename_edits, plan_module_rename_edits};

#[test]
fn rewrites_imports_from_path_derived_module_names() {
    let old_module = file_path_to_module_name("/workspace/lib/My/App.pm");
    let new_module = file_path_to_module_name("/workspace/lib/My/RenamedApp.pm");

    let source = "use My::App;\nuse parent 'My::App';\nrequire My::App;\n";
    let edits = plan_module_rename_edits(source, &old_module, &new_module);
    let rewritten = apply_module_rename_edits(source, &edits);

    let expected = "use My::RenamedApp;\nuse parent 'My::RenamedApp';\nrequire My::RenamedApp;\n";
    assert_eq!(rewritten, expected);
}

#[test]
fn does_not_rewrite_non_matching_imports() {
    let old_module = file_path_to_module_name("/workspace/lib/Foo/Bar.pm");
    let new_module = file_path_to_module_name("/workspace/lib/Foo/Baz.pm");

    let source = "use Foo::Other;\nrequire Foo::Other;\n";
    let edits = plan_module_rename_edits(source, &old_module, &new_module);

    assert!(edits.is_empty());
    assert_eq!(apply_module_rename_edits(source, &edits), source);
}