nginx_lint_parser/
error.rs1use crate::ast::Position;
8use std::fmt;
9use thiserror::Error;
10
11#[derive(Debug, Clone, Error)]
13pub enum ParseError {
14 #[error("Expected '{expected}' but found '{found}' at line {}, column {}", .position.line, .position.column)]
16 UnexpectedToken {
17 expected: String,
18 found: String,
19 position: Position,
20 },
21
22 #[error("Unclosed block starting at line {}, column {}", .position.line, .position.column)]
24 UnclosedBlock { position: Position },
25
26 #[error("Failed to read file: {0}")]
28 IoError(String),
29}
30
31impl ParseError {
32 pub fn position(&self) -> Option<Position> {
37 match self {
38 ParseError::UnexpectedToken { position, .. } => Some(*position),
39 ParseError::UnclosedBlock { position } => Some(*position),
40 ParseError::IoError(_) => None,
41 }
42 }
43}
44
45pub type ParseResult<T> = Result<T, ParseError>;
47
48impl fmt::Display for Position {
50 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
51 write!(f, "{}:{}", self.line, self.column)
52 }
53}