aion-ics
Version:
Aion DSL language for managing ICalendar data
40 lines (36 loc) • 1.11 kB
text/typescript
/**
* A python-like method which uses pointer to point to a syntax/runtime error with its position in source code.
* <br>
* Example:
*
* <pre>
* input.aion:1:5
* let a = 5
* ^
* Error: unexpected a
* </pre>
* @param lineNumber line number
* @param columnNumber column number
* @param sourceCode a full <code>.aion</code> source code snippet
* @param message message to be displayed
* @param fileName <code>.aion</code> filename where the error is met
*/
export function errorWithCodePositionReference(
lineNumber: number,
columnNumber: number,
sourceCode: string,
message: string,
fileName: string = "input.aion"
): string {
const lines = sourceCode.split(/\r?\n/);
// console.log(lineNumber);
const line = lines[lineNumber - 2] ?? "";
const pointer = " ".repeat(columnNumber - 1) + "^";
// console.log(lines, line, pointer);
return [
`\n${fileName}:${lineNumber}:${columnNumber}`,
` ${line}`,
` ${pointer}`,
`\x1b[31mError:\x1b[0m ${message}`
].join("\n");
}