mirror of
https://github.com/wavetermdev/inshellisense.git
synced 2026-08-05 13:43:30 -07:00
fix: bad codegens & add makefile for convenience
Signed-off-by: cpendery <cpendery@vt.edu>
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
.PHONY: codegen
|
||||
codegen:
|
||||
cd autocomplete/extract && npm test
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
cp autocomplete/specs/specs_.go autocomplete/
|
||||
rm -r autocomplete/specs
|
||||
mkdir autocomplete/specs
|
||||
mv autocomplete/specs_.go autocomplete/specs/
|
||||
@@ -6,11 +6,18 @@ import * as child_process from "child_process";
|
||||
import ProgressBar = require("progress");
|
||||
|
||||
const exclusions = new Set(["deno.ts", "rush.ts"]);
|
||||
const renamings = {
|
||||
"-": "underscore",
|
||||
};
|
||||
|
||||
const clearAllNewlines = (input: string): string => {
|
||||
return input.replaceAll(/[\r\n]+/g, "");
|
||||
};
|
||||
|
||||
const escapeSpecialCharacters = (input: string): string => {
|
||||
return input.replaceAll("`", '"').replaceAll("\0", "\\\\0");
|
||||
};
|
||||
|
||||
function chunk<T>(arr: T[], chuckSize: number): T[][] {
|
||||
const arrays: T[][] = [];
|
||||
for (let i = 0; i < arr.length; i += chuckSize)
|
||||
@@ -63,18 +70,18 @@ const main = async () => {
|
||||
}
|
||||
|
||||
const filenameWithoutExtension = path.parse(directoryItem.name).name;
|
||||
const golangFilename =
|
||||
renamings[filenameWithoutExtension] != null
|
||||
? renamings[filenameWithoutExtension]
|
||||
: filenameWithoutExtension;
|
||||
const subcommand = spec as unknown as Fig.Subcommand;
|
||||
const generatedCode = generateGolang(
|
||||
subcommand,
|
||||
filenameWithoutExtension
|
||||
);
|
||||
|
||||
await fsAsync.writeFile(
|
||||
path.join(
|
||||
process.cwd(),
|
||||
"..",
|
||||
"specs",
|
||||
`${filenameWithoutExtension}.go`
|
||||
),
|
||||
path.join(process.cwd(), "..", "specs", `${golangFilename}.go`),
|
||||
generatedCode
|
||||
);
|
||||
progressBar.tick();
|
||||
@@ -103,13 +110,16 @@ const generateTemplate = (template: Fig.Template): string => {
|
||||
const genName = (name: Fig.SingleOrArray<string> | undefined): string => {
|
||||
if (name == null) return "";
|
||||
return Array.isArray(name)
|
||||
? `Name: []string{${name.map((n) => `"${n}"`).join(",")}},`
|
||||
? `Name: []string{${name
|
||||
.filter((n) => n != null)
|
||||
.map((n) => `"${n}"`)
|
||||
.join(",")}},`
|
||||
: `Name: "${name}",`;
|
||||
};
|
||||
|
||||
const genDescription = (description: string | undefined): string => {
|
||||
return description != null
|
||||
? `Description: "${clearAllNewlines(description)}",`
|
||||
? `Description: \`${escapeSpecialCharacters(description)}\`,`
|
||||
: "";
|
||||
};
|
||||
|
||||
@@ -137,19 +147,21 @@ const genSubcommands = (
|
||||
if (subcommand == null) return "";
|
||||
const subcommands = Array.isArray(subcommand) ? subcommand : [subcommand];
|
||||
return `Subcommands: []model.Subcommand{${subcommands
|
||||
.map((s) => generateSubcommand(s))
|
||||
.map((s) => generateSubcommand(s, false))
|
||||
.join(",")}},`;
|
||||
};
|
||||
|
||||
const generateArgs = (args: Fig.SingleOrArray<Fig.Arg>): string => {
|
||||
const argList = Array.isArray(args) ? args : [args];
|
||||
const generatedArgs = argList.map((arg) => {
|
||||
return `{
|
||||
const generatedArgs = argList
|
||||
.map((arg) => {
|
||||
return `{
|
||||
${genTemplates(arg.template)}
|
||||
${genName(arg.name)}
|
||||
${genDescription(arg.description)}
|
||||
},`;
|
||||
});
|
||||
}`;
|
||||
})
|
||||
.join(",");
|
||||
return `Args: []model.Arg{${generatedArgs}},`;
|
||||
};
|
||||
|
||||
@@ -164,8 +176,12 @@ const generateOptions = (options: Fig.Option[]): string => {
|
||||
return `Options: []model.Option{${generatedOptions}},`;
|
||||
};
|
||||
|
||||
const generateSubcommand = (subcommand: Fig.Subcommand): string => {
|
||||
return `model.Subcommand{
|
||||
const generateSubcommand = (
|
||||
subcommand: Fig.Subcommand,
|
||||
usePrefix = true
|
||||
): string => {
|
||||
const prefix = usePrefix ? "model.Subcommand" : "";
|
||||
return `${prefix}{
|
||||
${genName(subcommand.name)}
|
||||
${genDescription(subcommand.description)}
|
||||
${genArgs(subcommand.args)}
|
||||
|
||||
Reference in New Issue
Block a user