php_rs_parser/
diagnostics.rs1use php_ast::Span;
2use php_lexer::TokenKind;
3use std::borrow::Cow;
4use thiserror::Error;
5
6#[derive(Debug, Clone, Error)]
7pub enum ParseError {
8 #[error("expected {expected}, found {found}")]
9 Expected {
10 expected: Cow<'static, str>,
11 found: TokenKind,
12 span: Span,
13 },
14
15 #[error("unexpected token {found}")]
16 Unexpected { found: TokenKind, span: Span },
17
18 #[error("expected expression")]
19 ExpectedExpression { span: Span },
20
21 #[error("expected statement")]
22 ExpectedStatement { span: Span },
23
24 #[error("expected opening PHP tag")]
25 ExpectedOpenTag { span: Span },
26
27 #[error("unterminated string literal")]
28 UnterminatedString { span: Span },
29
30 #[error("expected {expected} after {after}")]
31 ExpectedAfter {
32 expected: Cow<'static, str>,
33 after: Cow<'static, str>,
34 span: Span,
35 },
36
37 #[error("unclosed {delimiter} opened at {opened_at:?}")]
38 UnclosedDelimiter {
39 delimiter: Cow<'static, str>,
40 opened_at: Span,
41 span: Span,
42 },
43
44 #[error("{message}")]
45 Forbidden {
46 message: Cow<'static, str>,
47 span: Span,
48 },
49}
50
51impl ParseError {
52 pub fn span(&self) -> Span {
53 match self {
54 ParseError::Expected { span, .. }
55 | ParseError::Unexpected { span, .. }
56 | ParseError::ExpectedExpression { span }
57 | ParseError::ExpectedStatement { span }
58 | ParseError::ExpectedOpenTag { span }
59 | ParseError::UnterminatedString { span }
60 | ParseError::ExpectedAfter { span, .. }
61 | ParseError::UnclosedDelimiter { span, .. }
62 | ParseError::Forbidden { span, .. } => *span,
63 }
64 }
65}