Files
openclaw/src/cli/completion-fish.ts
2026-02-22 07:44:56 +00:00

42 lines
1.2 KiB
TypeScript

export function escapeFishDescription(value: string): string {
return value.replace(/'/g, "'\\''");
}
function parseOptionFlags(flags: string): { long?: string; short?: string } {
const parts = flags.split(/[ ,|]+/);
const long = parts.find((flag) => flag.startsWith("--"))?.replace(/^--/, "");
const short = parts
.find((flag) => flag.startsWith("-") && !flag.startsWith("--"))
?.replace(/^-/, "");
return { long, short };
}
export function buildFishSubcommandCompletionLine(params: {
rootCmd: string;
condition: string;
name: string;
description: string;
}): string {
const desc = escapeFishDescription(params.description);
return `complete -c ${params.rootCmd} -n "${params.condition}" -a "${params.name}" -d '${desc}'\n`;
}
export function buildFishOptionCompletionLine(params: {
rootCmd: string;
condition: string;
flags: string;
description: string;
}): string {
const { short, long } = parseOptionFlags(params.flags);
const desc = escapeFishDescription(params.description);
let line = `complete -c ${params.rootCmd} -n "${params.condition}"`;
if (short) {
line += ` -s ${short}`;
}
if (long) {
line += ` -l ${long}`;
}
line += ` -d '${desc}'\n`;
return line;
}