1use nova_diagnostics::Span;
4use thiserror::Error;
5
6#[derive(Debug, Clone, Error)]
8pub enum ParseError {
9 #[error("expected {expected}, found {found}")]
10 Expected {
11 expected: String,
12 found: String,
13 span: Span,
14 },
15
16 #[error("unexpected end of file")]
17 UnexpectedEof { span: Span },
18
19 #[error("chained comparison operators are not allowed (use parentheses)")]
20 ChainedComparison { span: Span },
21
22 #[error("{message}")]
23 Custom { message: String, span: Span },
24}
25
26impl ParseError {
27 pub fn span(&self) -> Span {
28 match self {
29 ParseError::Expected { span, .. } => *span,
30 ParseError::UnexpectedEof { span } => *span,
31 ParseError::ChainedComparison { span } => *span,
32 ParseError::Custom { span, .. } => *span,
33 }
34 }
35}