ling-ast
↓ 0 downloadsAbstract Syntax Tree types for the Ling language
lingfu install ling-astCode / Files (7)
src/span.rs
//! Source span — byte-offset range within a source file.
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
pub struct Span {
pub start: u32,
pub end: u32,
}
impl Span {
pub const DUMMY: Self = Self { start: 0, end: 0 };
pub fn new(start: u32, end: u32) -> Self {
Self { start, end }
}
pub fn len(self) -> u32 {
self.end.saturating_sub(self.start)
}
pub fn is_empty(self) -> bool {
self.len() == 0
}
pub fn union(self, other: Self) -> Self {
Self {
start: self.start.min(other.start),
end: self.end.max(other.end),
}
}
}
impl std::fmt::Display for Span {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}..{}", self.start, self.end)
}
}