use crate::token::TokenType;
#[non_exhaustive]
#[derive(Clone, Debug, miette::Diagnostic, thiserror::Error)]
#[diagnostic()]
pub enum Error {
#[error("unrecognized token '{token_text}' at offset {offset}")]
UnrecognizedToken {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("non-terminated literal '{token_text}' at offset {offset}")]
UnterminatedLiteral {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("non-terminated bracket '{token_text}' at offset {offset}")]
UnterminatedBracket {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("non-terminated block comment '{token_text}' at offset {offset}")]
UnterminatedBlockComment {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("bad variable name '{token_text}' at offset {offset}")]
BadVariableName {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("bad number '{token_text}' at offset {offset}")]
BadNumber {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("bad fractional part '{token_text}' at offset {offset}")]
BadFractionalPart {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("bad exponent part '{token_text}' at offset {offset}")]
BadExponentPart {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("expected = sign '{token_text}' at offset {offset}")]
ExpectedEqualsSign {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("malformed hex integer '{token_text}' at offset {offset}")]
MalformedHexInteger {
#[label("here")]
span: miette::SourceSpan,
token_text: String,
offset: usize,
},
#[error("unexpected end of file")]
ParseUnexpectedEOF,
#[error("unexpected token '{token_text}' at offset {offset}")]
#[diagnostic(help("expected {expected_display} but found '{token_text}'"))]
ParseUnexpectedToken {
#[label("here")]
parsed_offset: miette::SourceSpan,
got: TokenType,
expected: &'static [TokenType],
token_text: String,
offset: usize,
expected_display: String,
},
#[error("{0}")]
Custom(String),
#[error("Parse error: {0}")]
ParseError(String),
}