aiscript_lexer/
error_reporter.rs1use 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 } else {
37 eprint!(" at '{}'", token.lexeme);
38 }
39 eprintln!(": {message}");
40 self.had_error = true;
41 }
42}