From f746ba34d799e6560df1aad1cad15a70b34914d1 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 22 Jan 2019 16:15:25 -0800 Subject: 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. --- pretty_errors.moon | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'pretty_errors.moon') 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 -- cgit v1.2.3