Skip to main content

java_lang/
error.rs

1use std::fmt;
2
3use crate::span::Span;
4
5/// The error type for Java parsing.
6#[derive(Debug, Clone)]
7pub struct Error {
8    message: String,
9    span: Span,
10}
11
12impl Error {
13    /// Create a new error with a message and span.
14    pub fn new<T: fmt::Display>(span: Span, message: T) -> Self {
15        Error {
16            message: message.to_string(),
17            span,
18        }
19    }
20
21    /// Create an "expected token" error.
22    pub(crate) fn expected_token(span: Span, expected: &str) -> Self {
23        Error {
24            message: format!("expected {}", expected),
25            span,
26        }
27    }
28
29    /// Get the span where the error occurred.
30    pub fn span(&self) -> Span {
31        self.span
32    }
33
34    /// Get the error message.
35    pub fn message(&self) -> &str {
36        &self.message
37    }
38}
39
40impl fmt::Display for Error {
41    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42        let loc = self.span.start();
43        write!(f, "error at byte offset {}: {}", loc, self.message)
44    }
45}
46
47impl std::error::Error for Error {}
48
49/// A specialized `Result` type for Java parsing.
50pub type Result<T> = std::result::Result<T, Error>;