refactor(cli): extract fish completion line builders
This commit is contained in:
41
src/cli/completion-fish.ts
Normal file
41
src/cli/completion-fish.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user