1use lsp_types::Position;
4
5use crate::token::Trivia;
6
7#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
9#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
10pub struct State {
11 pub(crate) position: usize,
13
14 pub(crate) lexer_position: Position,
16
17 pub(crate) last_trivia: Vec<Trivia>,
19}
20
21impl State {
22 pub const fn increment_position_by_char(&mut self, character: char) {
24 self.position += 1;
25
26 match character {
27 '\n' => {
28 self.lexer_position.character = 0;
29 self.lexer_position.line += 1;
30 }
31 _ => self.lexer_position.character += 1,
32 }
33 }
34
35 pub const fn increment_position(&mut self, amount: u32) {
37 self.position += amount as usize;
38 self.lexer_position.character += amount;
39 }
40
41 #[inline]
43 pub const fn lexer_position(&self) -> Position {
44 self.lexer_position
45 }
46}