mirror of
https://git.sfja.dk/Mikkel/slige.git
synced 2025-01-30 22:00:52 +00:00
55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
import { Ctx, File } from "./ctx.ts";
|
|
|
|
export type Span = {
|
|
begin: Pos;
|
|
end: Pos;
|
|
};
|
|
|
|
export type Pos = {
|
|
idx: number;
|
|
line: number;
|
|
col: number;
|
|
};
|
|
|
|
export type Report = {
|
|
severity: "fatal" | "error" | "warning" | "info";
|
|
origin?: string;
|
|
msg: string;
|
|
file?: File;
|
|
span?: Span;
|
|
pos?: Pos;
|
|
};
|
|
|
|
export function prettyPrintReport(ctx: Ctx, rep: Report) {
|
|
const { severity, msg } = rep;
|
|
const origin = rep.origin ? `${rep.origin}: ` : "";
|
|
console.error(`${origin}${severity}: ${msg}`);
|
|
if (rep.file && (rep.span || rep.pos)) {
|
|
const { absPath: path } = ctx.fileInfo(rep.file);
|
|
const { line, col } = rep.span?.begin ?? rep.pos!;
|
|
console.error(` at ./${path}:${line}:${col}`);
|
|
}
|
|
}
|
|
|
|
export function printStackTrace() {
|
|
class StackTracer extends Error {
|
|
constructor() {
|
|
super("StackTracer");
|
|
}
|
|
}
|
|
try {
|
|
throw new StackTracer();
|
|
} catch (error) {
|
|
if (!(error instanceof StackTracer)) {
|
|
throw error;
|
|
}
|
|
console.log(
|
|
error.stack?.replace(
|
|
"Error: StackTracer",
|
|
"Stack trace:",
|
|
) ??
|
|
error,
|
|
);
|
|
}
|
|
}
|