xshade_parser/ast/
span.rs1use ::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}