Skip to main content

nova_parser/
error.rs

1//! Parse error types.
2
3use nova_diagnostics::Span;
4use thiserror::Error;
5
6/// A parse error with source location.
7#[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}