pub type TokenText = compact_str::CompactString;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct Span {
start: u32, end: u32, start_line: u32, end_line: u32, }
impl Span {
#[allow(clippy::cast_possible_truncation)] pub const fn new(start: usize, end: usize) -> Self {
Self {
start: start as u32,
end: end as u32,
start_line: 1,
end_line: 1,
}
}
#[allow(clippy::cast_possible_truncation)]
pub const fn with_lines(start: usize, end: usize, start_line: usize, end_line: usize) -> Self {
Self {
start: start as u32,
end: end as u32,
start_line: start_line as u32,
end_line: end_line as u32,
}
}
#[allow(clippy::cast_possible_truncation)]
pub const fn point(offset: usize) -> Self {
Self {
start: offset as u32,
end: offset as u32,
start_line: 1,
end_line: 1,
}
}
#[inline]
pub const fn start(self) -> usize {
self.start as usize
}
#[inline]
pub const fn end(self) -> usize {
self.end as usize
}
#[inline]
pub const fn start_line(self) -> usize {
self.start_line as usize
}
#[inline]
pub const fn end_line(self) -> usize {
self.end_line as usize
}
#[inline]
pub const fn len(self) -> usize {
(self.end - self.start) as usize
}
#[inline]
pub const fn is_empty(self) -> bool {
self.start == self.end
}
#[inline]
pub const fn range(self) -> std::ops::Range<usize> {
self.start as usize..self.end as usize
}
}