![[MAC0470#07] - Nu scripts pt. 2](/nuscripts.jpg)
[MAC0470#07] - Nu scripts pt. 2
Mais algumas completions
mac0470
Ainda na saga da criação de completions para Nushell criei um novo script para gradlew
e dei uma leve melhorada no script para git
Gradle Wrapper
Gradle é um build system muito usado para projetos em linguagens que executam na JVM gerados a partir de templates. O Gradle Wrapper é um script que costuma vir junto com os projetos para garantir que a versão correta do Gradle seja usada no projeto ainda que Gradle sequer esteja instalado na máquina. O script normalmente fica no arquivo gradlew
na raíz do projeto e é geralmente invocado com ./gradlew
.
Para gerar completions, além das flags padrão ddo script, existem as tasks. Tasks são similares aos targets de um Makefile
e indicam tarefas a serem executadas, por exemplo: compilar o projeto em um .jar
, executar o projeto, debuggar, limpar artefatos produzidos pelo build, etc.
A lista de tasks disponível depende do projeto e pra isso existe a task tasks
que lista todas as tasks disponíveis (embora possa ser lenta). Um pequeno exemplo de saída produzido pelo ./gradlew tasks
Application tasks
-----------------
run - Runs this project as a JVM application
runShadow - Runs this project as a JVM application using the shadow jar
startShadowScripts - Creates OS specific scripts to run the project as a JVM application using the shadow jar
O script de completion para ./gradlew
inclui uma função que produz uma lista de completions para cada task com a descrição fornecida por ./gradlew tasks
usando regexes com capturas para gerar uma tabela de colunas value
e description
.
def "nu-complete gradlew" [] {
./gradlew tasks
| lines
| parse --regex '(?P<value>[a-zA-Z]+) - (?P<description>.+)'
}
Isso produz tabelas como:
╭────┬────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────╮
│ # │ task │ description │
├────┼────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ 0 │ run │ Runs this project as a JVM application │
│ 1 │ runShadow │ Runs this project as a JVM application using the shadow jar │
│ 2 │ startShadowScripts │ Creates OS specific scripts to run the project as a JVM │
│ │ │ application using the shadow jar │
╰────┴────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────╯
Note que o comando parse
vai ignorar linhas que não sigam o padrão da regex especificada.
Git Clone
O script para completions do git
não possuía completions para o subcomando clone
. Criar completions para comandos do git é tão simples quanto observar git clone --help
e então listar as flags.
A parte boa disso é que eu passo a conhecer uma centena de novos conceitos sobre git que eu não sabia, como por exemplo: git permite que o clone seja feito de um repositório local e pode usar ou não hardlinks usando ou não o protocolo do git.