harn_parser/parser/
error.rs1use harn_lexer::Span;
2use std::fmt;
3
4#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum ParserError {
7 Unexpected {
8 got: String,
9 expected: String,
10 span: Span,
11 },
12 UnexpectedEof {
13 expected: String,
14 span: Span,
15 },
16}
17
18impl ParserError {
19 #[must_use]
21 pub fn span(&self) -> Span {
22 match self {
23 ParserError::Unexpected { span, .. } | ParserError::UnexpectedEof { span, .. } => *span,
24 }
25 }
26}
27
28impl fmt::Display for ParserError {
29 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30 match self {
31 ParserError::Unexpected {
32 got,
33 expected,
34 span,
35 } => write!(
36 f,
37 "Expected {expected}, got {got} at {}:{}",
38 span.line, span.column
39 ),
40 ParserError::UnexpectedEof { expected, .. } => {
41 write!(f, "Unexpected end of file, expected {expected}")
42 }
43 }
44 }
45}
46
47impl std::error::Error for ParserError {}