Skip to main content

marco_core/parser/inlines/
shared.rs

1//! Shared utilities for inline parsers
2//!
3//! This module provides helper functions used by all inline parser modules,
4//! primarily for converting between grammar spans and parser spans.
5
6pub use crate::parser::shared::{
7    opt_span, opt_span_range, to_parser_span, to_parser_span_range, GrammarSpan,
8};
9
10// Re-export the canonical helpers from `crate::parser::shared` so inline parsers
11// can call `super::shared::to_parser_span(...)` as before.
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use nom::Input;
17
18    #[test]
19    fn smoke_test_to_parser_span() {
20        let input = "Hello, World!";
21        let span = GrammarSpan::new(input);
22
23        let parser_span = to_parser_span(span);
24
25        assert_eq!(parser_span.start.line, 1);
26        assert_eq!(parser_span.start.column, 1);
27        assert_eq!(parser_span.start.offset, 0);
28        assert_eq!(parser_span.end.offset, 13); // Length of input
29    }
30
31    #[test]
32    fn smoke_test_to_parser_span_range() {
33        let input = "Hello, World!";
34        let full_span = GrammarSpan::new(input);
35
36        // Simulate taking a slice from offset 0 to 5 ("Hello")
37        let start_span = full_span;
38        let end_span = full_span.take_from(5);
39
40        let parser_span = to_parser_span_range(start_span, end_span);
41
42        assert_eq!(parser_span.start.line, 1);
43        assert_eq!(parser_span.start.offset, 0);
44        assert_eq!(parser_span.end.offset, 5);
45    }
46}