Pular para o conteúdo principal
Versão: 0.1.0

Comandos e Namespaces

Os comandos do Invowk são nomeados diretamente em invowkfile.cue. Namespaces vêm dos módulos: comandos em um módulo são prefixados pelo ID do módulo definido em invowkmod.cue.

Nomes de Comandos

Nomes de comandos podem incluir espaços para criar hierarquias estilo subcomandos:

cmds: [
{name: "test"},
{name: "test unit"},
{name: "test integration"},
{name: "db migrate"},
{name: "db seed"},
]

Regras de Nomenclatura de Comandos

RegraVálidoInválido
Deve começar com letrabuild, Test1build
Letras, números, espaços, hífens, underscorestest unit, build-allbuild@all

Espaços são apenas organizacionais - não há relação especial pai-filho entre comandos.

Namespaces de Módulos

Comandos de módulos são namespaced pelo campo module em invowkmod.cue:

// invowkmod.cue
module: "com.company.frontend"

// invowkfile.cue
cmds: [
{name: "build"},
{name: "test unit"},
]

Esses comandos se tornam:

  • invowk cmd com.company.frontend build
  • invowk cmd com.company.frontend test unit

Regras de Nomenclatura de IDs de Módulo

RegraVálidoInválido
Deve começar com letramyproject, Project11project, _project
Apenas letras e númerosmyproject, v2my-project, my_project
Pontos para aninhamentomy.project, a.b.cmy..project, .project, project.

Exemplos Válidos

module: "frontend"
module: "backend"
module: "my.project"
module: "com.company.tools"
module: "io.github.username.cli"

Exemplos Inválidos

module: "my-project"   // Hyphens not allowed
module: "my_project" // Underscores not allowed
module: ".project" // Can't start with dot
module: "project." // Can't end with dot
module: "my..project" // No consecutive dots
module: "123project" // Must start with letter

Para módulos compartilhados, use nomenclatura RDNS (Reverse Domain Name System), como com.company.tools, para evitar colisões.

Descoberta de Comandos

O Invowk descobre comandos de múltiplas fontes em ordem de prioridade:

  1. invowkfile do diretório atual (maior prioridade)
  2. Módulos locais (*.invowkmod no diretório atual)
  3. Includes configurados (caminhos de módulos do arquivo de configuração)
  4. Diretório de comandos do usuário (~/.invowk/cmds/ — apenas *.invowkmod, não recursivo)

Ao listar comandos, você verá sua origem:

Available Commands
(* = default runtime)

From current directory:
build - Build the project [native*] (linux, macos, windows)

From user modules (~/.invowk/cmds):
com.example.tools hello - A greeting [native*] (linux, macos)

Dependências de Comandos

Comandos podem depender de outros comandos. Use o nome completo como aparece no invowk cmd (prefixo do módulo quando aplicável):

cmds: [
{
name: "build"
implementations: [...]
},
{
name: "test"
implementations: [...]
depends_on: {
cmds: [
// Reference by command name in the same invowkfile
{alternatives: ["build"]}
]
}
},
{
name: "release"
implementations: [...]
depends_on: {
cmds: [
// Module-prefixed commands for dependencies
{alternatives: ["build"]},
{alternatives: ["com.company.tools lint"]},
]
}
}
]

Por Que Namespaces Importam

  1. Isolamento de namespace - Comandos de módulos ficam distintos entre toolkits compartilhados
  2. Origem clara - O prefixo do módulo mostra de onde o comando vem
  3. Organização lógica - IDs de módulo com pontos organizam comandos relacionados
  4. Autocompletar - IDs de módulo criam limites naturais para completar com tab

Boas Práticas

  • Projetos locais: mantenha nomes curtos e focados (sem prefixo).
  • Módulos: use IDs RDNS como com.company.devtools.
  • Evite IDs genéricos: prefira com.company.tools em vez de tools.

Próximos Passos