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)]
12pub enum ParseError {
13 #[error("expected {expected}, found {found}")]
15 Expected {
16 expected: Cow<'static, str>,
17 found: TokenKind,
18 span: Span,
19 },
20
21 #[error("unexpected token {found}")]
23 Unexpected { found: TokenKind, span: Span },
24
25 #[error("expected expression")]
27 ExpectedExpression { span: Span },
28
29 #[error("expected statement")]
31 ExpectedStatement { span: Span },
32
33 #[error("expected opening PHP tag")]
35 ExpectedOpenTag { span: Span },
36
37 #[error("unterminated string literal")]
39 UnterminatedString { span: Span },
40
41 #[error("expected {expected} after {after}")]
43 ExpectedAfter {
44 expected: Cow<'static, str>,
45 after: Cow<'static, str>,
46 span: Span,
47 },
48
49 #[error("unclosed {delimiter} opened at {opened_at:?}")]
51 UnclosedDelimiter {
52 delimiter: Cow<'static, str>,
53 opened_at: Span,
54 span: Span,
55 },
56
57 #[error("{message}")]
60 Forbidden {
61 message: Cow<'static, str>,
62 span: Span,
63 },
64
65 #[error("'{feature}' requires PHP {required} or higher (targeting PHP {used})")]
69 VersionTooLow {
70 feature: Cow<'static, str>,
71 required: Cow<'static, str>,
72 used: Cow<'static, str>,
73 span: Span,
74 },
75}
76
77impl ParseError {
78 pub fn span(&self) -> Span {
79 match self {
80 ParseError::Expected { span, .. }
81 | ParseError::Unexpected { span, .. }
82 | ParseError::ExpectedExpression { span }
83 | ParseError::ExpectedStatement { span }
84 | ParseError::ExpectedOpenTag { span }
85 | ParseError::UnterminatedString { span }
86 | ParseError::ExpectedAfter { span, .. }
87 | ParseError::UnclosedDelimiter { span, .. }
88 | ParseError::Forbidden { span, .. }
89 | ParseError::VersionTooLow { span, .. } => *span,
90 }
91 }
92}