From a88c8e9216a6b891714096ed90c3eb13d330a975 Mon Sep 17 00:00:00 2001 From: Araozu Date: Fri, 3 Mar 2023 09:23:08 -0500 Subject: [PATCH] Error messages --- examples/val_binding.misti | 1 + src/error_handling/lex_error.rs | 3 ++- src/lexic/mod.rs | 6 +++++- 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 examples/val_binding.misti diff --git a/examples/val_binding.misti b/examples/val_binding.misti new file mode 100644 index 0000000..f97cbed --- /dev/null +++ b/examples/val_binding.misti @@ -0,0 +1 @@ +val identifier = 322 \ No newline at end of file diff --git a/src/error_handling/lex_error.rs b/src/error_handling/lex_error.rs index 35e171c..5ad4c7d 100644 --- a/src/error_handling/lex_error.rs +++ b/src/error_handling/lex_error.rs @@ -14,11 +14,12 @@ impl PrintableError for LexError { let whitespace = whitespace.iter().collect::(); format!( - "\n{}\n{}^\n\n{}{}", + "\n{}\n{}^\n\n{}{}\n{}", erroneous_code, whitespace, "Invalid character at pos ", self.position + 1, + self.reason, ) } } diff --git a/src/lexic/mod.rs b/src/lexic/mod.rs index e6f2d4d..c8e1169 100755 --- a/src/lexic/mod.rs +++ b/src/lexic/mod.rs @@ -85,7 +85,11 @@ fn next_token(chars: &Chars, current_pos: usize) -> LexResult { .unwrap_or_else(|| { let error = LexError { position: current_pos, - reason: format!("Unrecognized character: {}", next_char), + reason: format!( + "Unrecognized character `{}` (escaped: `{}`)", + next_char, + next_char.escape_default().to_string(), + ), }; LexResult::Err(error) })