aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUndecidable Robot <undecidabot@gmail.com>2016-05-16 19:01:24 +0800
committerUndecidable Robot <undecidabot@gmail.com>2016-05-16 19:01:24 +0800
commitf3dcbf4b2ea2848a5fc0748141e53da984863e05 (patch)
treed98535b6dd29950c11fe46442ab96db6bcdc6427
parent726d4220db38e8990dd6a87d31f509c2533ca5c8 (diff)
downloadlpeglabel-f3dcbf4b2ea2848a5fc0748141e53da984863e05.tar.gz
lpeglabel-f3dcbf4b2ea2848a5fc0748141e53da984863e05.tar.bz2
lpeglabel-f3dcbf4b2ea2848a5fc0748141e53da984863e05.zip
Adding line preview to error messages
-rw-r--r--relabel.lua5
1 files changed, 5 insertions, 0 deletions
diff --git a/relabel.lua b/relabel.lua
index 77718b6..f6bf080 100644
--- a/relabel.lua
+++ b/relabel.lua
@@ -4,6 +4,7 @@
4local tonumber, type, print, error, ipairs = tonumber, type, print, error, ipairs 4local tonumber, type, print, error, ipairs = tonumber, type, print, error, ipairs
5local setmetatable = setmetatable 5local setmetatable = setmetatable
6local unpack, tinsert, concat = table.unpack or unpack, table.insert, table.concat 6local unpack, tinsert, concat = table.unpack or unpack, table.insert, table.concat
7local rep = string.rep
7local m = require"lpeglabel" 8local m = require"lpeglabel"
8 9
9-- 'm' will be used to parse expressions, and 'mm' will be used to 10-- 'm' will be used to parse expressions, and 'mm' will be used to
@@ -285,6 +286,8 @@ local function compile (p, defs)
285 errors = {} 286 errors = {}
286 local cp, label, suffix = pattern:match(p, 1, defs) 287 local cp, label, suffix = pattern:match(p, 1, defs)
287 if #errors > 0 then 288 if #errors > 0 then
289 local lines = {}
290 for line in p:gmatch("[^\r\n]+") do tinsert(lines, line) end
288 local errmsgs = {} 291 local errmsgs = {}
289 for i, err in ipairs(errors) do 292 for i, err in ipairs(errors) do
290 if #err == 1 then 293 if #err == 1 then
@@ -292,6 +295,8 @@ local function compile (p, defs)
292 else 295 else
293 local line, col = lineno(p, err[2]) 296 local line, col = lineno(p, err[2])
294 tinsert(errmsgs, "Line" .. line .. ", Col " .. col .. ": " .. errorMessages[err[1]]) 297 tinsert(errmsgs, "Line" .. line .. ", Col " .. col .. ": " .. errorMessages[err[1]])
298 tinsert(errmsgs, lines[line])
299 tinsert(errmsgs, rep(" ", col-1) .. "^")
295 end 300 end
296 end 301 end
297 error(concat(errmsgs, "\n")) 302 error(concat(errmsgs, "\n"))