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}