1use thiserror::Error;
2
3#[derive(Debug, Error, Clone, PartialEq)]
4pub enum LexerError {
5 #[error("Unexpected character: {0}")]
6 UnexpectedCharacter(char),
7
8 #[error("Invalid number: {0}")]
9 InvalidNumber(String),
10
11 #[error("Unterminated string")]
12 UnterminatedString,
13
14 #[error("Unterminated template string")]
15 UnterminatedTemplateString,
16
17 #[error("Unterminated comment")]
18 UnterminatedComment,
19
20 #[error("Invalid escape sequence: {0}")]
21 InvalidEscapeSequence(String),
22
23 #[error("Invalid Unicode escape: {0}")]
24 InvalidUnicodeEscape(String),
25
26 #[error("Invalid hex escape: {0}")]
27 InvalidHexEscape(String),
28
29 #[error("Invalid octal escape: {0}")]
30 InvalidOctalEscape(String),
31
32 #[error("Invalid binary literal: {0}")]
33 InvalidBinaryLiteral(String),
34
35 #[error("Invalid octal literal: {0}")]
36 InvalidOctalLiteral(String),
37
38 #[error("Invalid hex literal: {0}")]
39 InvalidHexLiteral(String),
40
41 #[error("Invalid BigInt literal: {0}")]
42 InvalidBigIntLiteral(String),
43
44 #[error("Invalid regex literal: {0}")]
45 InvalidRegexLiteral(String),
46
47 #[error("Invalid regex flags: {0}")]
48 InvalidRegexFlags(String),
49
50 #[error("Invalid identifier: {0}")]
51 InvalidIdentifier(String),
52
53 #[error("Invalid keyword: {0}")]
54 InvalidKeyword(String),
55
56 #[error("Invalid operator: {0}")]
57 InvalidOperator(String),
58
59 #[error("Invalid symbol: {0}")]
60 InvalidSymbol(String),
61
62 #[error("Invalid comment: {0}")]
63 InvalidComment(String),
64
65 #[error("Invalid whitespace: {0}")]
66 InvalidWhitespace(String),
67
68 #[error("Invalid token: {0}")]
69 InvalidToken(String),
70
71 #[error("End of input reached unexpectedly")]
72 UnexpectedEndOfInput,
73
74 #[error("Internal lexer error: {0}")]
75 InternalError(String),
76}