conclusão do compositor e da linha de comando

À medida que adiciono meus scripts cada vez mais aos arquivos composer.json , seria útil ter o preenchimento automático para o comando composer no bash . Minha pergunta no Twitter não deu uma solução imediata e, como eu já estava fazendo algo semelhante para Phing , arregacei as mangas e escrevi minha solução.


Começamos criando um novo arquivo de conclusão do bash chamado composer no diretório bash_completion.d (o arquivo precisa executar direitos). Esse diretório geralmente está localizado em /etc/bash_completion.d/ , mas no OS X usando o Homebrew, ele está localizado em /usr/local/etc/bash_completion.d/ (assumindo que você já instalou o brew install bash-complete ).


Aqui está o arquivo:


 # Store this file in /etc/bash_completion.d/composer _composer_scripts() { local cur prev _get_comp_words_by_ref -n : cur COMPREPLY=() prev="${COMP_WORDS[COMP_CWORD-1]}" # # Complete the arguments to some of the commands. # if [ "$prev" != "composer" ] ; then local opts=$(composer $prev -h --no-ansi | tr -cs '[=-=][:alpha:]_' '[\n*]' | grep '^-') COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 fi if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '-h -q -v -V -n -d \ --help --quiet --verbose --version --ansi --no-ansi \ --no-interaction --profile --working-dir' -- "$cur" ) ) else local scripts=$(composer --no-ansi 2> /dev/null | awk '/^ +[az]+/ { print $1 }') COMPREPLY=( $(compgen -W "${scripts}" -- ${cur}) ) fi __ltrim_colon_completions "$cur" return 0 } complete -F _composer_scripts composer 

(Observe que __ltrim_colon_completions é suportado apenas nas versões recentes do bash-complete , portanto, pode ser necessário remover esta linha.)


Para obter uma lista de comandos para o compositor, criamos uma lista de palavras para a opção -W para compgen executando o composer --no-ansi e, em seguida, usamos o AWK para excluir tudo que não é um comando. Também criamos uma lista de argumentos de sinalização separada quando o usuário pressiona a tecla Tab depois que o hífen é inserido.


Ao executar o composer {cmd} -h --no-ansi , preenchemos automaticamente os sinalizadores para qualquer subcomando e, usando tr e grep , restringimos a lista a apenas palavras que começam com um hífen.


Agora, pressionando Tab após o compositor, o bash concluirá automaticamente os comandos do compositor e os scripts do usuário!



Como você pode ver neste exemplo, além dos comandos internos, como dump-autoload e show , meus próprios scripts são exibidos, incluindo apiary-fetch e outros.


Isso é muito útil quando a memória me falha!

Source: https://habr.com/ru/post/pt444284/


All Articles