antlr-ng
Version:
Next generation ANTLR Tool
61 lines (60 loc) • 3.53 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
import { dirname, resolve } from "node:path";
import { fileURLToPath, pathToFileURL } from "node:url";
import { Command, Option } from "commander";
import { readFileSync } from "node:fs";
const getPackageVersion = /* @__PURE__ */ __name(() => {
const findPackageJson = /* @__PURE__ */ __name((path) => {
const packageFile2 = resolve(path, "package.json");
try {
readFileSync(pathToFileURL(packageFile2));
return packageFile2;
} catch {
const parent = dirname(path);
if (parent.endsWith("node_modules")) {
throw new Error("No package.json found.");
}
return findPackageJson(parent);
}
}, "findPackageJson");
const dirName = fileURLToPath(dirname(import.meta.url));
const packageFile = findPackageJson(dirName);
const packageJson = JSON.parse(readFileSync(pathToFileURL(packageFile), "utf-8"));
return packageJson.version;
}, "getPackageVersion");
const antlrVersion = getPackageVersion();
const parseToolParameters = /* @__PURE__ */ __name((args) => {
const parseBoolean = /* @__PURE__ */ __name((value, previous) => {
if (value == null) {
return previous;
}
const lower = value.trim().toLowerCase();
return lower === "true" || lower === "1" || lower === "on" || lower === "yes";
}, "parseBoolean");
const defines = {};
const parseKeyValuePair = /* @__PURE__ */ __name((input) => {
const [key, value] = input.split("=");
defines[key] = value;
return defines;
}, "parseKeyValuePair");
const prepared = new Command().option("-o, --output-directory <path>", "specify output directory where all output is generated").option("--lib <path>", "specify location of grammars, tokens files").option("--atn [boolean]", "Generate rule augmented transition network diagrams.", parseBoolean, false).option("-e, --encoding <string>", "Specify grammar file encoding; e.g., ucs-2.", "utf-8").addOption(new Option("--message-format[string]", "Specify output style for messages in antlr, gnu, vs2005.").choices(["antlr", "gnu", "vs2005"]).default("antlr")).option(
"--long-messages [boolean]",
"Show exception details when available for errors and warnings.",
parseBoolean,
false
).option("-l, --generate-listener [boolean]", "Generate parse tree listener.", parseBoolean, true).option("-v, --generate-visitor [boolean]", "Generate parse tree visitor.", parseBoolean, false).option("-p, --package <name>", "Specify a package/namespace for the generated code.").option("-d, --generate-dependencies [boolean]", "Generate file dependencies.", parseBoolean, false).option("-D, --define <key=value...>", "Set/override a grammar-level option.", parseKeyValuePair).option("-w, --warnings-are-errors [boolean]", "Treat warnings as errors.", parseBoolean, false).option("-f, --force-atn [boolean]", "Use the ATN simulator for all predictions.", parseBoolean, false).option("--log [boolean]", "Dump lots of logging info to antlrng-timestamp.log.", parseBoolean, false).option(
"--exact-output-dir [boolean]",
"All output goes into -o dir regardless of paths/package",
parseBoolean,
true
).argument("<grammar...>", "A list of grammar files.").version(`antlr-ng ${antlrVersion}`);
prepared.parse(args, { from: "user" });
const result = prepared.opts();
result.args = prepared.args;
return result;
}, "parseToolParameters");
export {
antlrVersion,
parseToolParameters
};