aboutsummaryrefslogtreecommitdiff
path: root/pretty_errors.moon
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2019-01-22 16:15:25 -0800
committerBruce Hill <bruce@bruce-hill.com>2019-01-22 16:16:53 -0800
commitf746ba34d799e6560df1aad1cad15a70b34914d1 (patch)
tree3829ce9bd8469e59d1a51470823d510dc808e1c7 /pretty_errors.moon
parenta596195f6cfb6731f1e778e4bc304028ecd9bf08 (diff)
Moved all the text method stuff into text.moon instead of splitting
across string2/containers. Modified the type stuff to output better type names and use (a Dict) and (a List) instead of (Dict) and (List). (Text) now also has a proper constructor. (assume) now also handles a bunch of different assumptions with smart error messages.
Diffstat (limited to 'pretty_errors.moon')
-rw-r--r--pretty_errors.moon17
1 files changed, 9 insertions, 8 deletions
diff --git a/pretty_errors.moon b/pretty_errors.moon
index e83f0fb..6b0d561 100644
--- a/pretty_errors.moon
+++ b/pretty_errors.moon
@@ -1,7 +1,7 @@
-- This file has code for converting errors to user-friendly format, with colors,
-- line numbers, code excerpts, and so on.
require "containers"
-string2 = require 'string2'
+Text = require 'text'
box = (text)->
max_line = 0
@@ -14,7 +14,7 @@ box = (text)->
format_error = (err)->
context = err.context or 2
- err_line, err_linenum, err_linepos = string2.line_at(err.source, err.start)
+ err_line, err_linenum, err_linepos = err.source\line_info_at(err.start)
-- TODO: better handle multi-line errors
err_size = math.min((err.stop - err.start), (#err_line-err_linepos) + 1)
nl_indicator = (err_linepos > #err_line) and " " or ""
@@ -24,8 +24,9 @@ format_error = (err)->
else
(" ")\rep(err_linepos+#fmt_str\format(0)-1).."⬆"
err_msg = "\027[33;41;1m#{err.title or "Error"} at #{err.filename or '???'}:#{err_linenum},#{err_linepos}\027[0m"
+ lines = err.source\lines!
for i=err_linenum-context,err_linenum-1
- if line = string2.line(err.source, i)
+ if line = lines[i]
err_msg ..= "\n\027[2m#{fmt_str\format(i)}\027[0m#{line}\027[0m"
if err_line
before = err_line\sub(1, err_linepos-1)
@@ -33,13 +34,13 @@ format_error = (err)->
after = err_line\sub(err_linepos+err_size, -1)
err_line = "\027[0m#{before}\027[41;30m#{during}#{nl_indicator}\027[0m#{after}"
err_msg ..= "\n\027[2m#{fmt_str\format(err_linenum)}#{err_line}\027[0m"
- _, err_linenum_end, err_linepos_end = string2.line_at(err.source, err.stop)
+ _, err_linenum_end, err_linepos_end = err.source\line_info_at(err.stop)
err_linenum_end or= err_linenum
if err_linenum_end == err_linenum
err_msg ..= "\n#{pointer}"
else
for i=err_linenum+1,err_linenum_end
- if line = string2.line(err.source, i)
+ if line = lines[i]
if i == err_linenum_end
during, after = line\sub(1,err_linepos_end-1), line\sub(err_linepos_end,-1)
err_msg ..= "\n\027[2m#{fmt_str\format(i)}\027[0;41;30m#{during}\027[0m#{after}"
@@ -50,13 +51,13 @@ format_error = (err)->
break
box_width = 70
- err_text = "\027[47;31;1m#{string2.wrap(" "..err.error, box_width, 16)\gsub("\n", "\n\027[47;31;1m ")}"
+ err_text = "\027[47;31;1m#{" "..err.error\wrapped_to(box_width, 16)\gsub("\n", "\n\027[47;31;1m ")}"
if err.hint
- err_text ..= "\n\027[47;30m#{string2.wrap(" Suggestion: #{err.hint}", box_width, 16)\gsub("\n", "\n\027[47;30m ")}"
+ err_text ..= "\n\027[47;30m#{(" Suggestion: #{err.hint}")\wrapped_to(box_width, 16)\gsub("\n", "\n\027[47;30m ")}"
err_msg ..= "\n\027[33;1m "..box(err_text)\gsub("\n", "\n ")
for i=err_linenum_end+1,err_linenum_end+context
- if line = string2.line(err.source, i)
+ if line = lines[i]
err_msg ..= "\n\027[2m#{fmt_str\format(i)}\027[0m#{line}\027[0m"
return err_msg