aiscript_lexer/
error_reporter.rs

1use crate::{Token, TokenType};
2
3#[derive(Default)]
4pub struct ErrorReporter {
5    pub panic_mode: bool,
6    pub had_error: bool,
7}
8
9impl ErrorReporter {
10    pub fn new() -> Self {
11        Self {
12            panic_mode: false,
13            had_error: false,
14        }
15    }
16
17    pub fn error_with_line(&mut self, line: u32, message: &str) {
18        if self.panic_mode {
19            return;
20        }
21        self.panic_mode = true;
22        self.had_error = true;
23        eprintln!("[line {}] Error: {}", line, message);
24    }
25
26    pub fn error_at(&mut self, token: Token<'_>, message: &str) {
27        if self.panic_mode {
28            return;
29        }
30        self.panic_mode = true;
31        eprint!("[line {}] Error", token.line);
32        if token.kind == TokenType::Eof {
33            eprint!(" at end");
34        } else if token.kind == TokenType::Invalid {
35            // Do nothing.
36        } else {
37            eprint!(" at '{}'", token.lexeme);
38        }
39        eprintln!(": {message}");
40        self.had_error = true;
41    }
42}