Compare commits

...

1 Commits

Author SHA1 Message Date
cad1cfc925 bash completion: Add support for aliases
Change-type: minor
2024-10-17 11:40:20 -04:00
3 changed files with 41 additions and 26 deletions

View File

@ -8,7 +8,7 @@ _balena() {
local context state line curcontext="$curcontext"
# Valid top-level completions
main_commands=( api-key app block build config deploy device devices env envs fleet internal join key leave local login logout logs notes orgs os preload push release scan settings ssh support tag tags tunnel util version whoami )
main_commands=( api-key api-keys app block build config deploy device devices env envs fleet fleets internal join key keys leave local login logout logs notes orgs os preload push release releases scan settings ssh support tag tags tunnel util version whoami )
# Sub-completions
api_key_cmds=( generate list revoke )
app_cmds=( create )

View File

@ -7,7 +7,7 @@ _balena_complete()
local cur prev
# Valid top-level completions
main_commands="api-key app block build config deploy device devices env envs fleet internal join key leave local login logout logs notes orgs os preload push release scan settings ssh support tag tags tunnel util version whoami"
main_commands="api-key api-keys app block build config deploy device devices env envs fleet fleets internal join key keys leave local login logout logs notes orgs os preload push release releases scan settings ssh support tag tags tunnel util version whoami"
# Sub-completions
api_key_cmds="generate list revoke"
app_cmds="create"

View File

@ -33,7 +33,7 @@ const commandsJson = JSON.parse(fs.readFileSync(commandsFilePath, 'utf8'));
const mainCommands = [];
const additionalCommands = [];
for (const key of Object.keys(commandsJson.commands).sort()) {
for (const [key, { aliases }] of Object.entries(commandsJson.commands).sort()) {
const cmd = key.split(':');
if (cmd.length > 1) {
additionalCommands.push(cmd);
@ -43,6 +43,17 @@ for (const key of Object.keys(commandsJson.commands).sort()) {
} else {
mainCommands.push(cmd[0]);
}
for (const alias of aliases) {
const splitAlias = alias.split(' ');
if (splitAlias.length > 1) {
additionalCommands.push(splitAlias);
if (!mainCommands.includes(splitAlias[0])) {
mainCommands.push(splitAlias[0]);
}
} else {
mainCommands.push(splitAlias[0]);
}
}
}
const mainCommandsStr = mainCommands.join(' ');
@ -73,8 +84,12 @@ fs.readFile(bashFilePathIn, 'utf8', function (err, data) {
'main_commands="' + mainCommandsStr + '"',
);
let subCommands = [];
let prevElement = additionalCommands[0][0];
additionalCommands.forEach(function (element) {
let prevElement = additionalCommands.sort((cmd1, cmd2) =>
cmd1[0].localeCompare(cmd2[0]),
)[0][0];
additionalCommands
.sort((cmd1, cmd2) => cmd1[0].localeCompare(cmd2[0]))
.forEach(function (element) {
if (element[0] === prevElement) {
subCommands.push(element[1]);
} else {