use praxis_source::{BytePos, Span};
use rowan::{TextRange, TextSize};
#[inline]
#[must_use]
pub fn span_to_range(span: Span) -> TextRange {
TextRange::new(
TextSize::from(span.start().to_u32()),
TextSize::from(span.end().to_u32()),
)
}
#[inline]
#[must_use]
pub fn range_to_span(range: TextRange) -> Span {
Span::new(
BytePos::from(u32::from(range.start())),
BytePos::from(u32::from(range.end())),
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn span_round_trips_through_textrange() {
for (start, end) in [(0, 0), (0, 3), (5, 5), (10, 42)] {
let span = Span::new(BytePos::from(start), BytePos::from(end));
let range = span_to_range(span);
let back = range_to_span(range);
assert_eq!(back, span);
}
}
#[test]
fn empty_span_maps_to_empty_range() {
let span = Span::new(BytePos::from(7), BytePos::from(7));
let range = span_to_range(span);
assert!(range.is_empty());
}
}