perl-module-token-core 0.12.2

Parse Perl module tokens and enforce standalone boundary checks
Documentation
use perl_module_token_core::{
    ModuleTokenSpan, has_standalone_module_token_boundaries, parse_module_token,
};

#[test]
fn given_canonical_form_when_token_starts_at_offset_it_is_parsed() {
    let line = "use App::Config;";
    let span = parse_module_token(line, 4);

    assert_eq!(span, Some(ModuleTokenSpan { start: 4, end: 15 }));
}

#[test]
fn given_legacy_form_when_token_starts_at_offset_it_is_parsed() {
    let line = "use App'Config;";
    let span = parse_module_token(line, 4);

    assert_eq!(span, Some(ModuleTokenSpan { start: 4, end: 14 }));
}

#[test]
fn given_partial_standalone_prefix_when_matching_boundaries_then_false() {
    let line = "use App::Config::Loader;";
    let span = parse_module_token(line, 4);

    assert!(span.is_some(), "token should be parsed");
    let span = span.unwrap_or(ModuleTokenSpan { start: 0, end: 0 });
    let partial_end = span.start + "App::Config".len();

    assert!(!has_standalone_module_token_boundaries(line, span.start, partial_end));
}

#[test]
fn given_plain_text_when_token_absent_then_no_span() {
    assert!(parse_module_token("use App::", 4).is_none());
    assert!(parse_module_token("  42App", 0).is_none());
}