tenda_scanner/
scanner_error.rs

1use tenda_common::span::SourceSpan;
2use tenda_reporting_derive::Diagnostic;
3use thiserror::Error;
4
5#[derive(Error, Debug, PartialEq, Clone, Diagnostic)]
6#[report("erro léxico")]
7pub enum LexicalError {
8    #[error("zeros à esquerda em literais numéricos não são permitidos")]
9    LeadingZeroNumberLiterals {
10        #[span]
11        span: SourceSpan,
12    },
13
14    #[error("fim de linha inesperado em texto")]
15    UnexpectedStringEol {
16        #[span]
17        span: SourceSpan,
18    },
19
20    #[error("caractere inesperado: {}", .character)]
21    UnexpectedChar {
22        character: char,
23        #[span]
24        span: SourceSpan,
25    },
26
27    #[error("fim inesperado de entrada")]
28    UnexpectedEoi {
29        #[span]
30        span: SourceSpan,
31    },
32
33    #[error("escape hexadecimal inválido")]
34    InvalidHexEscape {
35        #[span]
36        span: SourceSpan,
37    },
38
39    #[error("escape octal inválido")]
40    InvalidOctalEscape {
41        #[span]
42        span: SourceSpan,
43    },
44
45    #[error("escape unicode inválido")]
46    InvalidUnicodeEscape {
47        #[span]
48        span: SourceSpan,
49    },
50
51    #[error("escape não reconhecido: {}", .found)]
52    UnknownEscape {
53        #[span]
54        span: SourceSpan,
55        found: char,
56    },
57}