UNPKG

parjs

Version:

Library for building parsers using combinators.

48 lines (47 loc) 1.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.visualizeTrace = void 0; const utils_1 = require("../utils"); const functions_1 = require("./functions"); const defaultArgs = { lineNumbers: true, linesBefore: 1 }; function newTraceVisualizer(pAgs) { const args = (0, utils_1.defaults)(pAgs, defaultArgs); const visualizer = (trace) => { const rows = trace.input.split(/\r\n|\n|\r/g); const locRow = trace.location.line; const around = args.linesBefore; const firstRow = Math.max(0, locRow - around); let linesAround = rows.slice(firstRow, locRow + 1); let prefixLength = 0; if (args.lineNumbers) { const numLength = Math.floor(1 + Math.log(locRow + 1) / Math.log(10)); const rowNumberPrefixer = (n) => `${(0, functions_1.padInt)(firstRow + n, numLength, " ")} | `; prefixLength = numLength + 3; linesAround = linesAround.map((row, i) => `${rowNumberPrefixer(i + 1)}${row}`); } const errorMarked = `${" ".repeat(prefixLength + trace.location.column)}^${trace.reason}`; linesAround.push(errorMarked); const linesVisualization = linesAround.join("\n"); const stack = trace.stackTrace .map(x => { const base = x; return `${base.expecting} (${x.type})`; }) .filter(x => x) .join("\n"); const fullVisualization = `${trace.kind} failure at Ln ${trace.location.line + 1} Col ${trace.location.column + 1} ${linesVisualization} Stack: ${stack} `; return fullVisualization; }; visualizer.configure = newTraceVisualizer; return visualizer; } /** Visualizes a Parjs failure. */ exports.visualizeTrace = newTraceVisualizer(defaultArgs); //# sourceMappingURL=trace-visualizer.js.map