diff --git a/src/syn/span.rs b/src/syn/span.rs index d87ee8d..96096ea 100644 --- a/src/syn/span.rs +++ b/src/syn/span.rs @@ -8,11 +8,12 @@ pub struct Pos { pub col: usize, pub byte: usize, pub len: usize, + pub is_newline: bool, } impl Display for Pos { fn fmt(&self, fmt: &mut Formatter) -> fmt::Result { - write!(fmt, "line {} at {}", self.line + 1, self.col + 1) + write!(fmt, "line {} at {}", self.line, self.col) } } @@ -20,10 +21,11 @@ impl Default for Pos { fn default() -> Self { Pos { source: 0, - line: 0, - col: 0, + line: 1, + col: 1, byte: 0, len: 1, + is_newline: false, } } } @@ -43,13 +45,14 @@ impl Pos { col, byte, len: c.len_utf8(), + is_newline: c == '\n', } } pub fn next_char(&self, c: char) -> Self { Pos { source: self.source + 1, - line: if c == '\n' { + line: if self.is_newline { self.line + 1 } else { self.line @@ -57,6 +60,7 @@ impl Pos { col: self.col + 1, byte: self.byte + self.len, len: c.len_utf8(), + is_newline: c == '\n', } }