Skip to main content

hiko_syntax/
span.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
2pub struct Span {
3    pub file_id: u32,
4    pub start: u32,
5    pub end: u32,
6}
7
8impl Span {
9    pub fn new(file_id: u32, start: u32, end: u32) -> Self {
10        Self {
11            file_id,
12            start,
13            end,
14        }
15    }
16
17    pub fn dummy() -> Self {
18        Self {
19            file_id: 0,
20            start: 0,
21            end: 0,
22        }
23    }
24
25    pub fn merge(self, other: Span) -> Span {
26        debug_assert_eq!(
27            self.file_id, other.file_id,
28            "cannot merge spans from different files"
29        );
30        Span {
31            file_id: self.file_id,
32            start: self.start.min(other.start),
33            end: self.end.max(other.end),
34        }
35    }
36}