antlr-ng
Version:
Next generation ANTLR Tool
62 lines (61 loc) • 1.68 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
import { ST } from "stringtemplate4ts";
import { IssueCode, issueTypes } from "./Issues.js";
class ANTLRMessage {
static {
__name(this, "ANTLRMessage");
}
fileName;
line = -1;
column = -1;
args = [];
issueCode;
issue;
e = null;
constructor(...args) {
this.issueCode = args.shift();
this.issue = issueTypes.get(this.issueCode);
this.fileName = args.shift();
let next = args.shift();
if (typeof next !== "number") {
this.e = next;
next = args.shift();
}
this.line = next;
this.column = args.shift();
if (args.length > 0) {
this.args = args;
}
}
getMessageTemplate(verbose) {
const messageST = new ST(this.issue.message);
messageST.impl.name = IssueCode[this.issueCode];
messageST.add("verbose", verbose);
for (let i = 0; i < this.args.length; i++) {
let attr = "arg";
if (i > 0) {
attr += String(i + 1);
}
messageST.add(attr, this.args[i]);
}
if (this.args.length < 2) {
messageST.add("arg2", null);
}
if (this.e !== null) {
messageST.add("exception", this.e);
messageST.add("stackTrace", this.e.stack);
} else {
messageST.add("exception", null);
messageST.add("stackTrace", null);
}
return messageST;
}
toString() {
const name = IssueCode[this.issueCode];
return `Message{errorType=${name}, args=${this.args.join(", ")}, e=${this.e}, fileName='${this.fileName}', line=${this.line}, charPosition=${this.column}}`;
}
}
export {
ANTLRMessage
};