parjs
Version:
A parser-combinator library for JavaScript.
45 lines (44 loc) • 1.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const helpers_1 = require("./functions/helpers");
const repeat_1 = __importDefault(require("lodash/repeat"));
const defaults_1 = __importDefault(require("lodash/defaults"));
const defaultArgs = {
lineNumbers: true,
linesBefore: 1
};
function newTraceVisualizer(pAgs) {
let args = defaults_1.default(pAgs, defaultArgs);
let visualizer = (trace) => {
let rows = trace.input.split(/\r\n|\n|\r/g);
let locRow = trace.location.line;
let around = args.linesBefore;
let firstRow = Math.max(0, locRow - around);
let linesAround = rows.slice(firstRow, locRow + 1);
let prefixLength = 0;
if (args.lineNumbers) {
let numLength = Math.floor(1 + Math.log(locRow + 1) / Math.log(10));
let rowNumberPrefixer = (n) => `${helpers_1.NumHelpers.padInt(firstRow + n, numLength, " ")} | `;
prefixLength = numLength + 3;
linesAround = linesAround.map((row, i) => `${rowNumberPrefixer(i + 1)}${row}`);
}
let errorMarked = `${repeat_1.default(" ", prefixLength + trace.location.column)}^${trace.reason}`;
linesAround.push(errorMarked);
let linesVisualization = linesAround.join("\n");
let fullVisualization = `${trace.kind} failure at Ln ${trace.location.line + 1} Col ${trace.location.column + 1}
${linesVisualization}
Stack: ${trace.stackTrace.map(x => x.type).filter(x => x).join(" < ")}
`;
return fullVisualization;
};
visualizer.configure = newTraceVisualizer;
return visualizer;
}
/**
* Visualizes a Parjs failure.
*/
exports.visualizeTrace = newTraceVisualizer(defaultArgs);
//# sourceMappingURL=trace-visualizer.js.map