estilo
Version:
Create color schemes for Vim, NeoVim, Airline and Lightline
72 lines (71 loc) • 2.16 kB
JavaScript
export class EtaError extends Error {
constructor(message) {
super(message);
this.name = "Eta Error";
}
}
export class EtaParseError extends EtaError {
constructor(message) {
super(message);
this.name = "EtaParser Error";
}
}
export class EtaRuntimeError extends EtaError {
constructor(message) {
super(message);
this.name = "EtaRuntime Error";
}
}
export class EtaFileResolutionError extends EtaError {
constructor(message) {
super(message);
this.name = "EtaFileResolution Error";
}
}
export class EtaNameResolutionError extends EtaError {
constructor(message) {
super(message);
this.name = "EtaNameResolution Error";
}
}
/**
* Throws an EtaError with a nicely formatted error and message showing where in the template the error occurred.
*/
export function ParseErr(message, str, indx) {
const whitespace = str.slice(0, indx).split(/\n/);
const lineNo = whitespace.length;
const colNo = whitespace[lineNo - 1].length + 1;
message += " at line " +
lineNo +
" col " +
colNo +
":\n\n" +
" " +
str.split(/\n/)[lineNo - 1] +
"\n" +
" " +
Array(colNo).join(" ") +
"^";
throw new EtaParseError(message);
}
export function RuntimeErr(originalError, str, lineNo, path) {
// code gratefully taken from https://github.com/mde/ejs and adapted
const lines = str.split("\n");
const start = Math.max(lineNo - 3, 0);
const end = Math.min(lines.length, lineNo + 3);
const filename = path;
// Error context
const context = lines
.slice(start, end)
.map(function (line, i) {
const curr = i + start + 1;
return (curr == lineNo ? " >> " : " ") + curr + "| " + line;
})
.join("\n");
const header = filename
? filename + ":" + lineNo + "\n"
: "line " + lineNo + "\n";
const err = new EtaRuntimeError(header + context + "\n\n" + originalError.message);
err.name = originalError.name; // the original name (e.g. ReferenceError) may be useful
throw err;
}