xshade_parser/ast/
span.rs

1use ::std::fmt;
2use nom::types::CompleteStr;
3use nom_locate::LocatedSpan;
4
5type NomSpan<'a> = LocatedSpan<CompleteStr<'a>>;
6
7#[derive(Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
8pub struct Span {
9    pub offset: usize,
10    pub length: usize,
11    pub line: usize,
12    pub column: usize,
13}
14
15impl Span {
16    pub fn new(offset: usize, length: usize, line: usize, column: usize) -> Span {
17        Span {
18            offset: offset,
19            length: length,
20            line: line,
21            column: column,
22        }
23    }
24
25    pub fn from_nom_span(span: &NomSpan) -> Span {
26        Span {
27            offset: span.offset,
28            length: span.fragment.len(),
29            line: span.line as usize,
30            column: span.get_column(),
31        }
32    }
33
34    pub fn from_to(from: Span, to: Span) -> Span {
35        Span {
36            offset: from.offset,
37            length: to.offset - from.offset + to.length,
38            line: from.line,
39            column: from.column,
40        }
41    }
42}
43
44impl fmt::Debug for Span {
45    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
46        write!(f, "Offset {} Lenght {} Line {} Column {}", self.offset, self.length, self.line, self.column)
47    }
48}
49
50impl fmt::Display for Span {
51    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
52        write!(f, "Offset {} Lenght {} Line {} Column {}", self.offset, self.length, self.line, self.column)
53    }
54}