diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-07-22 13:47:27 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-07-22 13:47:42 -0700 |
| commit | e408891abf96cf1a89feeef2e91ffbefd6cc5937 (patch) | |
| tree | a0f847da8caea7657b4be5339c582fe46ffe54e7 | |
| parent | fead66ab9b39b24e1059b3a55dd09dd1491fee60 (diff) | |
Better error highlighting beyond the first character of the error.
| -rw-r--r-- | parser.moon | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/parser.moon b/parser.moon index 749c09a..1ffa2d4 100644 --- a/parser.moon +++ b/parser.moon @@ -50,10 +50,11 @@ NOMSU_DEFS = with {} err_line = files.get_line(src, line_no) next_line = files.get_line(src, line_no+1) i = err_pos-files.get_line_starts(src)[line_no] + j = i + (end_pos-start_pos) pointer = ("-")\rep(i) .. "^" err_msg = colored.bright colored.yellow colored.onred (err_msg or "Parse error").." at #{userdata.source.filename}:#{line_no}:" if #prev_line > 0 then err_msg ..= "\n"..colored.dim(prev_line) - err_line = colored.white(err_line\sub(1, i))..colored.bright(colored.red(err_line\sub(i+1,i+1)))..colored.dim(err_line\sub(i+2,-1)) + err_line = colored.white(err_line\sub(1, i))..colored.bright(colored.red(err_line\sub(i+1,j+1)))..colored.dim(err_line\sub(j+2,-1)) err_msg ..= "\n#{err_line}\n#{colored.red pointer}" if #next_line > 0 then err_msg ..= "\n"..colored.dim(next_line) seen_errors[start_pos] = err_msg @@ -102,6 +103,7 @@ do Parser.parse = (nomsu_code, source=nil, version=nil)-> source or= nomsu_code.source nomsu_code = tostring(nomsu_code) + source or= Source("string: "..nomsu_code, 1, #nomsu_code) version or= nomsu_code\match("^#![^\n]*nomsu[ ]+-V[ ]*([0-9.]+)") syntax_version = version and tonumber(version\match("^[0-9]+")) or Parser.version userdata = { |
