Skip to main content

perl_module_token_parser/
lib.rs

1//! Single-line Perl module token parsing.
2//!
3//! This microcrate has one responsibility: parse Perl package-style tokens from
4//! byte offsets in a source line. It supports canonical (`::`) and legacy (`'`)
5//! package separators.
6
7#![deny(unsafe_code)]
8#![warn(rust_2018_idioms)]
9#![warn(missing_docs)]
10#![warn(clippy::all)]
11
12pub use perl_module_token_core::{ModuleTokenSpan, parse_module_token};
13
14#[cfg(test)]
15mod tests {
16    use super::{ModuleTokenSpan, parse_module_token};
17
18    #[test]
19    fn parses_canonical_and_legacy_tokens() {
20        assert_eq!(
21            parse_module_token("use Foo::Bar;", 4),
22            Some(ModuleTokenSpan { start: 4, end: 12 })
23        );
24        assert_eq!(
25            parse_module_token("use Foo'Bar;", 4),
26            Some(ModuleTokenSpan { start: 4, end: 11 })
27        );
28    }
29
30    #[test]
31    fn rejects_invalid_token_starts() {
32        assert!(parse_module_token("5Foo", 0).is_none());
33        assert!(parse_module_token("Foo::", 0).is_none());
34        assert!(parse_module_token("Foo'", 0).is_none());
35    }
36}