Completar com Tab
bash, zsh e fish — gerados do catálogo, e não escritos à mão.
Completar com Tab é a diferença entre uma ferramenta que se usa de cabeça e uma que exige --ajuda a cada vez. O script de completação é gerado do catálogo de comandos — escrito à mão, ele envelheceria na primeira flag nova.
bash
$ dataforge completar bash > ~/.dataforge-completar.bash
$ echo 'source ~/.dataforge-completar.bash' >> ~/.bashrc
$ dataforge completar zsh > ~/.zsh/completions/_dataforge
$ dataforge completar fish > ~/.config/fish/completions/dataforge.fishPara a sua ferramenta#
O mesmo princípio: a declaração do comando já sabe quais são as opções e os subcomandos, então o script sai dela.
dataforge
adopt Arcane.Cli as Cli
app := Cli.comando("tarefa", "")
app.subcomando("criar", "cria")
app.subcomando("listar", "lista")
action script_bash(nome, verbos):
palavras := join(" ", verbos)
corpo := $" COMPREPLY=($(compgen -W \"{palavras}\" -- \"$" + "{COMP_WORDS[1]}\"))"
linhas := [$"_{nome}() {{", corpo, "}", $"complete -F _{nome} {nome}"]
yield join("\n", linhas)
texto := script_bash("tarefa", ["criar", "listar"])
assert "complete -F _tarefa tarefa" in texto
out textoO que completar, em ordem de utilidade#
- Os subcomandos — é o primeiro Tab de toda sessão.
- As flags do subcomando atual, e não as do programa inteiro.
- As escolhas de uma opção (
--formato=→tabela json csv). - Caminhos, quando o posicional é um arquivo — o shell já faz isso, desde que o script não o atrapalhe.