@fink/prattler
Version:
A generic Pratt/top down operator precedence parser.
42 lines (36 loc) • 755 B
JavaScript
const {
highlight_code_loc
} = require("@fink/snippet/highlight.js");
const {
stack_trace
} = require("@fink/std-lib/stack-trace.js");
const get_error = (ctx, msg, token, stack_func) => {
const {
code,
filename
} = ctx;
const {
start: {
line,
column
}
} = token.loc;
// TODO: use error from std-lib?
const error = {
error: `${filename}:${line}:${column}
${highlight_code_loc(code, token.loc)}
${msg}
`,
token,
stack: stack_trace(stack_func)
};
return error;
};
exports.get_error = get_error;
const add_error = (ctx, msg, token) => {
const error = get_error(ctx, msg, token, add_error);
return [error, { ...ctx,
errors: [...ctx.errors, error]
}];
};
exports.add_error = add_error;