datex_core/parser/
errors.rs

1use crate::ast::expressions::DatexExpression;
2use crate::compiler::error::ErrorCollector;
3use crate::global::operators::UnaryOperator;
4use crate::parser::lexer::Token;
5use crate::values::core_values::endpoint::InvalidEndpointError;
6use crate::values::core_values::error::NumberParseError;
7use core::ops::Range;
8
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub enum ParserError {
11    /// invalid token encountered during lexing
12    InvalidToken,
13    /// unexpected token encountered during parsing
14    UnexpectedToken {
15        expected: Vec<Token>,
16        found: Token,
17    },
18    ExpectedMoreTokens,
19    InvalidEndpointName {
20        name: String,
21        details: InvalidEndpointError,
22    },
23    InvalidAssignmentTarget,
24    NumberParseError(NumberParseError),
25    InvalidUnaryOperation {
26        operator: UnaryOperator,
27    },
28    InvalidTypeVariantAccess,
29    // used in internal parser logic to indicate a failed parse attempt that lead to a rollback
30    CouldNotMatchGenericParams,
31}
32
33#[derive(Debug)]
34pub struct DetailedParserErrorsWithAst {
35    pub ast: DatexExpression, // TODO #657: rename to DatexAstNode
36    pub errors: Vec<SpannedParserError>,
37}
38
39#[derive(Debug, Clone)]
40pub struct SpannedParserError {
41    pub error: ParserError,
42    pub span: Range<usize>,
43}
44
45impl ErrorCollector<SpannedParserError> for Vec<SpannedParserError> {
46    fn record_error(&mut self, error: SpannedParserError) {
47        self.push(error);
48    }
49}