tenda_scanner/
scanner_error.rs1use 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}