Pular para o conteúdo

Referência da CLI

Todo comando, com uso, opções, exemplos e apelidos — gerada do catálogo.

Todo comando, na ordem do dataforge help. Esta página é gerada do catálogo cli.GRUPOS — o mesmo que o help, o autocompletar e /api/comandos.json leem.

Projeto#

init#

Cria forge.toml e o esqueleto do projeto. Ver a página.

bash
dataforge init [pasta]
text
Escreve o manifesto, a pasta src/ com um main.df e a tests/.
Sem argumento, usa a pasta atual.
bash
dataforge init                                       # aqui mesmo
dataforge init meu-app                               # numa pasta nova

Veja: new, info.

api#

exporta a API de um servidor Kiln. Ver a página.

bash
dataforge api <arquivo.df> [--formato]
text
As rotas sao a fonte da verdade: o arquivo e executado
para que elas se registrem, e o resultado sai do que
esta la — nao de uma descricao escrita a mao, que
divergiria na primeira semana.

Aponte para o modulo que MONTA o servidor ('app.df'), e
nao para o que sobe ('main.df').
OpçãoEfeito
--openapiOpenAPI 3.1 — Swagger, geradores de cliente
--insomniacolecao do Insomnia, uma requisicao por rota
--postmancolecao do Postman v2.1
--curlum comando curl por rota
--markdowna tabela de rotas (padrao)
--saida=<arq>grava em vez de imprimir
bash
dataforge api src/app.df                             # a tabela de rotas
dataforge api src/app.df --openapi -o=openapi.json
dataforge api src/app.df --insomnia -o=insomnia.json

Veja: run, test.

converter#

traduz Python para DataForge. Ver a página.

bash
dataforge converter <arquivo.py|pasta>
text
Le com o 'ast' do Python, e nao com expressao regular.
O que nao tem equivalente honesto vira um comentario
'TODO(converter)' com o codigo original ao lado — um
conversor que erra em silencio e pior que um que aponta
onde errou.

O relatorio no fim conta as duas coisas: o que saiu pronto
e o que precisa de voce.
OpçãoEfeito
--saida=<arq>onde gravar (um arquivo so)
--secomostra sem gravar
--forcarsobrescreve um .df que ja exista
bash
dataforge converter app.py                           # grava app.df ao lado
dataforge converter src/                             # a pasta inteira, recursiva
dataforge converter app.py --seco                    # so mostra

Também: convert, migrar. Veja: check, fmt.

new#

Cria um projeto a partir de um modelo. Ver a página.

bash
dataforge new [modelo] [nome]
text
10 modelos, e todos produzem um projeto que RODA e
passa nos proprios testes — nao um esqueleto com TODOs:

  cli      Lê argumentos, imprime tabela colorida, tem --help
  api      Servidor com rotas, JSON, 404/405 e testes sem socket
  web      Templates HTML, arquivos estáticos e escape automático
  data     Banco, estatística e exportação para Excel
  lib      Um pacote com relay, testes e pronto para publicar
  oop      Blueprints, traits, propriedades e operadores
  script   Arquivos, JSON, datas e processos do sistema
  painel   Um dashboard: métricas, gráficos, filtros e testes
  bot      Comandos, botões, conversa com estado e testes sem rede
  test     Como testar em DataForge: asserts, erros e cobertura

Sem argumento, pergunta na tela.
OpçãoEfeito
--listso lista os modelos, sem perguntar nada
bash
dataforge new                                        # escolhe na tela
dataforge new api                                    # usa o modelo, pergunta o nome
dataforge new api minha-api                          # direto ao ponto
dataforge new --list                                 # so os modelos

Veja: init, run, test.

info#

Mostra o manifesto do projeto atual. Ver a página.

bash
dataforge info
text
Nome, versao, entrada, scripts e dependencias declaradas.

Veja: init, list.

Executar#

run#

Executa um programa. Ver a página.

bash
dataforge run [arquivo.df] [-- args]
text
Sem arquivo, usa a entrada declarada no forge.toml.
O que vier depois de '--' chega ao programa em OS.argv().
OpçãoEfeito
--timemostra o tempo de execucao
--debugmostra tokens, AST e traceback completo
bash
dataforge run ola.df
dataforge run                                        # usa a entrada do forge.toml
dataforge run app.df -- --porta 8080                 # passa argumentos ao programa

Veja: eval, watch, repl.

eval#

Executa uma linha de codigo direto. Ver a página.

bash
dataforge eval '<codigo>'
text
Para experimentar sem criar arquivo. Multiplas instrucoes
podem ser separadas por ponto e virgula ou quebra de linha.
bash
dataforge eval 'out 2 ** 10'
dataforge eval 'out [1,2,3] >> morph n: n * 2'

Veja: run, repl.

watch#

Reexecuta a cada mudanca no arquivo. Ver a página.

bash
dataforge watch [arquivo.df]
text
Fica observando e roda de novo quando voce salva.
Ctrl+C para sair.
OpçãoEfeito
--testroda a suite em vez do arquivo
--checkroda a analise estatica
bash
dataforge watch src/main.df
dataforge watch --test                               # TDD: a suite a cada save

Veja: run, test.

repl#

Console interativo. Ver a página.

bash
dataforge repl
text
Comandos internos: :type <expr>, :ast <expr>, :check <expr>,
:load <arquivo>, :vars, :help, :quit.

Veja: run, eval.

Qualidade#

check#

Analise estatica: nomes, aridade, tipos e alcance. Ver a página.

bash
dataforge check [alvo]
text
Aceita arquivo, pasta ou padrao. Sem alvo, analisa a pasta atual.
Sai com codigo 1 se houver erro — serve na esteira de CI.
OpçãoEfeito
--stricttrata avisos como erros
--syntax-onlyso a sintaxe, sem analise semantica
--formato=githubanotacoes do Actions: o erro aparece na linha do PR
bash
dataforge check .                                    # o projeto inteiro
dataforge check src/ --strict                        # avisos viram erros
dataforge check . --formato=github                   # no CI do GitHub

Veja: lint, explain.

test#

Executa a suite de testes. Ver a página.

bash
dataforge test [alvo]
text
Descobre *_test.df e a pasta tests/. Cada acao que comeca
com 'test_' vira um caso.
OpçãoEfeito
--verbose, -vmostra cada caso
--filter=<texto>so os casos cujo nome contem o texto
--fail-fastpara na primeira falha
--coberturaquais linhas os testes executaram
--minimo=<n>falha se a cobertura ficar abaixo de n%
--linhaslista as linhas descobertas, em faixas
bash
dataforge test
dataforge test tests/ -v
dataforge test --cobertura                           # com o relatorio
dataforge test --minimo=80                           # exige 80% no CI
dataforge test --filter=soma                         # so o que casa

Veja: bench, watch.

fmt#

Formata o codigo. Ver a página.

bash
dataforge fmt [alvo]
text
Idempotente: formatar duas vezes da o mesmo resultado.
OpçãoEfeito
--checkso verifica, nao reescreve (sai 1 se houver pendencia)
bash
dataforge fmt .                                      # reescreve
dataforge fmt . --check                              # para a esteira de CI

Veja: lint.

lint#

Aponta problemas de estilo e higiene. Ver a página.

bash
dataforge lint [alvo]
text
Treze regras: nome fora do padrao, variavel escrita e nunca
lida, ramo redundante, e outras.
OpçãoEfeito
--stricttrata avisos como erros

Veja: fmt, check.

seguranca#

Procura segredo escrito no codigo e padrao arriscado. Ver a página.

bash
dataforge seguranca [alvo]
text
Duas varreduras sobre cada arquivo. A primeira acha SEGREDO pelo
formato — chave da AWS, token do GitHub, 'sk_live' da Stripe,
bloco de chave privada, token do PyPI —, e por isso acha o que
voce esqueceu, que e o unico tipo que importa. A segunda aplica
dez regras sintaticas: SQL concatenado, shell com interpolacao,
MD5 para assinatura, senha sem derivacao, verificacao desligada.

Ela le TEXTO, e nao a arvore, de proposito: um analisador de
seguranca que tenta provar fluxo de dado erra nos dois sentidos,
e o que se faz com o alarme errado e desligar tudo.

Alem de '.df', ela le '.env', '.json', '.toml', '.yml', '.sh' e
'.ts' — um segredo vaza do arquivo de configuracao muito mais do
que do codigo.

'// df: permitir <regra>' na linha, ou na de cima, silencia ali.
OpçãoEfeito
--strictsai com 1 se houver qualquer achado
--jsona saida como dado, para a esteira de CI
--so=<gravidade>'alto' esconde os medios
bash
dataforge seguranca .                                # o projeto inteiro
dataforge seguranca src/ --strict                    # reprova o CI
dataforge seguranca . --json                         # para outra ferramenta

Também: sec, audit. Veja: lint, check.

bench#

Mede o tempo de execucao, repetindo. Ver a página.

bash
dataforge bench <arquivo.df>
text
Roda varias vezes e mostra minimo, mediana e desvio.
Descarta as primeiras execucoes, que aquecem o cache.
OpçãoEfeito
--runs=<n>quantas repeticoes (padrao 10)
bash
dataforge bench algoritmo.df
dataforge bench alg.df --runs=50

Veja: test, run.

Pacotes#

add#

Instala uma dependencia e grava no forge.toml. Ver a página.

bash
dataforge add <pacote>[@versao] 
text
Sem faixa, grava '^' da versao mais recente. Aceita tambem
caminho local, git+URL e URL de tarball.
OpçãoEfeito
--offlineso com o cache local
bash
dataforge add validador
dataforge add tabela@^2.0                            # faixa de versoes
dataforge add ../lib-interna                         # pasta local

Veja: install, remove, search.

remove#

Desinstala e tira do forge.toml. Ver a página.

bash
dataforge remove <pacote> 

Também: rm, uninstall. Veja: add, list.

install#

Instala o que o forge.lock fixa. Ver a página.

bash
dataforge install
text
O comando que se roda depois de clonar um projeto.

Ele HONRA o forge.lock: a versao travada vence enquanto
couber na faixa do forge.toml. Duas pessoas que clonam o
mesmo projeto em dias diferentes recebem o mesmo codigo,
e o sha256 do lock e conferido contra o que chegou.

Para MOVER as versoes, 'dataforge update'.
OpçãoEfeito
--dry-runmostra o plano sem baixar
--offlineso com o cache local

Também: i, sync. Veja: update, add, list, tree.

update#

Move as versoes e reescreve o forge.lock. Ver a página.

bash
dataforge update [pacote …]
text
Resolve de novo dentro das faixas declaradas. Sem nome,
atualiza tudo; com nomes, so eles — o resto continua
travado, que e o que torna a atualizacao controlada.

Sair da faixa exige mudar o forge.toml: 'dataforge
outdated' mostra os dois casos separados.
OpçãoEfeito
--dry-runmostra o plano sem baixar
--offlineso com o cache local
bash
dataforge update                                     # tudo, dentro das faixas
dataforge update tabela                              # so este pacote

Também: up. Veja: install, outdated, list.

list#

Mostra o que esta instalado. Ver a página.

bash
dataforge list
text
Marca as transitivas e o que sumiu do disco.

Também: ls. Veja: tree, outdated.

tree#

Desenha a arvore de dependencias. Ver a página.

bash
dataforge tree
text
Mostra quem trouxe cada pacote, e onde ha versao compartilhada.

Veja: list, why.

why#

Explica por que um pacote esta instalado. Ver a página.

bash
dataforge why <pacote>
text
Mostra a cadeia desde o forge.toml ate ele.
bash
dataforge why tabela

Veja: tree, list.

outdated#

Lista dependencias com versao mais nova disponivel. Ver a página.

bash
dataforge outdated
text
Separa o que cabe na faixa declarada do que exigiria
mudar o forge.toml — os primeiros sobem com
'dataforge update'.

Veja: update, add, list.

Procura pacotes no registro. Ver a página.

bash
dataforge search <termo>
text
Busca no nome, na descricao e nas tags.
bash
dataforge search cpf
dataforge search ""                                  # lista tudo

Veja: add.

pack#

Empacota este projeto para publicar. Ver a página.

bash
dataforge pack
text
Gera dist/<nome>-<versao>.tar.gz com o sha256.
Reprodutivel: mesma fonte, mesmo hash.

Veja: publish.

publish#

Publica o pacote num registro. Ver a página.

bash
dataforge publish --registry=<pasta>
text
Dois destinos, e eles resolvem problemas diferentes:

  --registry=<pasta>  um indice estatico, para um registro
                      interno de empresa — espera um PR
  --remoto            o registro da comunidade, por chamada
                      autenticada, e o pacote entra na fila
                      de revisao

O tarball NAO sobe: o que se envia e o endereco dele e o
sha256. Hospedar binario exige cota, expiracao e politica de
abuso; um release do GitHub ja faz isso melhor, e o hash e o
que torna a origem irrelevante.
OpçãoEfeito
--registry=<pasta>um indice estatico numa pasta
--remotoo registro da comunidade, com revisao
--tarball=<url>o endereco do tarball ja hospedado
bash
dataforge publish --registry=../registro             # interno
dataforge publish --remoto                           # a comunidade

Veja: pack, login.

versions#

As versoes instaladas, a ativa e a que o projeto exige. Ver a página.

bash
dataforge versions
text
Cada versao mora numa venv propria em
'~/.dataforge/versoes/<versao>'. A escolha global fica no
arquivo 'atual'; a do projeto, no campo 'dataforge' do
forge.toml — o mesmo que o manifesto ja lia.
OpçãoEfeito
--jsono resultado como dado

Também: versoes. Veja: use, upgrade.

use#

Fixa a versao do DataForge deste projeto. Ver a página.

bash
dataforge use <versao> [--global]
text
Sem '--global', escreve 'dataforge = "<versao>"' na secao
[project] do forge.toml — e o arquivo e reescrito LINHA A
LINHA, para nao apagar comentarios nem reordenar campos.

E o pino VALE: 'dataforge run' num projeto que exige outra
versao entrega a execucao a ela, quando ela esta instalada.
Quando nao esta, recusa e diz como instalar — rodar na
versao errada e o que o pino existe para impedir.

'DATAFORGE_SEM_TROCA=1' desliga a troca.
OpçãoEfeito
--globalescolhe para a maquina, e nao para o projeto
bash
dataforge use 1.0.0                                  # fixa no projeto
dataforge use 1.0.0 --global                         # fixa para a maquina

Também: switch. Veja: versions, upgrade.

upgrade#

Instala uma versao AO LADO da atual. Ver a página.

bash
dataforge upgrade [versao]
text
Sem versao, pergunta ao site qual e a mais nova. A instalacao
e uma venv propria: a versao que ja roda nao e tocada, e por
isso um upgrade que falha no meio nao deixa a maquina sem
DataForge.
OpçãoEfeito
--checkmostra os passos sem executar nenhum
--forcereinstala mesmo que ja exista
bash
dataforge upgrade                                    # a mais nova publicada
dataforge upgrade 1.0.0 --check                      # so diz o que faria

Veja: versions, use.

workspace#

Todos os pacotes da arvore, e os conflitos de faixa. Ver a página.

bash
dataforge workspace [pasta]
text
Cada pacote tem o seu forge.toml, e a unica forma de saber se
dois deles pedem faixas incompativeis do mesmo terceiro era
instalar os dois e esperar o erro — que aparece na maquina de
quem consome.

Ele LE e relata: nao instala nada. Sai com 2 quando ha
conflito, porque instalar duas copias em versoes diferentes
gera bug irreproduzivel.
OpçãoEfeito
--jsono resultado como dado
bash
dataforge workspace                                  # a arvore daqui para baixo
dataforge workspace --json                           # para o CI ler

Também: ws. Veja: install, tree.

login#

Guarda o token de publicacao no registro da comunidade. Ver a página.

bash
dataforge login [token]
text
O token e criado no painel do site e aparece UMA vez. Ele
fica em '~/.dataforge/credenciais.json', com modo 600: num
arquivo do projeto ele acabaria commitado, que e a forma
mais comum de vazar credencial de registro que existe.

O 'login' CONFERE o token antes de gravar — sem isso o erro
so apareceria no primeiro 'publish', longe da causa.
bash
dataforge login                                      # pede o token e confere
dataforge login df_pat_…                             # sem perguntar

Veja: publish, whoami, logout.

logout#

Esquece o token guardado. Ver a página.

bash
dataforge logout

Veja: login.

whoami#

Diz de quem e o token guardado, e o que ele alcanca. Ver a página.

bash
dataforge whoami

Veja: login.

Analise#

stats#

O tamanho e a forma do codigo. Ver a página.

bash
dataforge stats [alvo]
text
Nao e 'linhas de codigo' como metrica de produtividade — e o
inventario: quantas acoes, quantos blueprints, o arquivo mais
longo, a acao mais longa.

Serve para achar o que cresceu demais sem ninguem notar. Uma
acao acima de 50 linhas costuma fazer mais de uma coisa.
bash
dataforge stats                                      # o projeto inteiro
dataforge stats src/                                 # so uma pasta

Veja: lint, check.

profile#

Onde o tempo foi gasto, acao por acao. Ver a página.

bash
dataforge profile <arquivo>
text
Um 'bench' diz que esta lento; um 'profile' diz ONDE.
Mede cada acao: quantas chamadas, tempo acumulado e por
chamada, ordenado pelo que mais custa.

Meca antes de otimizar. A acao que voce acha que e o gargalo
quase nunca e.
bash
dataforge profile src/main.df

Veja: bench, run.

fix#

Formata e aponta o que precisa de voce. Ver a página.

bash
dataforge fix [alvo]
text
Roda o formatador e, em seguida, o linter — arrumando o que da
para arrumar sozinho e listando o resto.

O que exige julgamento nao e 'consertado' automaticamente:
uma ferramenta que muda o codigo precisa ser previsivel.
OpçãoEfeito
--dry-runmostra o que faria, sem escrever
bash
dataforge fix                                        # o projeto inteiro
dataforge fix --dry-run                              # so o relatorio

Veja: fmt, lint.

Ambiente#

devops#

Gera os artefatos que levam o projeto ao ar. Ver a página.

bash
dataforge devops <init|docker|ci|k8s|doctor|…>
text
Dockerfile, compose, pipeline de CI, manifestos do
Kubernetes, chart do Helm, nginx, Prometheus, SBOM.

O que ele gera nao e esboco: e o que se poria em
producao — usuario sem privilegio, limite de recurso,
sonda de saude e segredo fora do repositorio.

Os artefatos saem conforme o que o projeto ADOTA: quem
nao usa banco nao ganha um Postgres no compose.

Arquivo que ja existe e PULADO, nao sobrescrito.
OpçãoEfeito
--forcarsobrescreve (o anterior vai para .anterior)
--secomostra o que faria, sem escrever
--registro=<host>o registro das imagens
--dominio=<host>o dominio, no ingress e no nginx
--em=<pasta>o projeto (padrao: a pasta atual)
bash
dataforge devops init                                # tudo o que faz sentido
dataforge devops docker                              # Dockerfile e compose
dataforge devops k8s --dominio=app.exemplo.br
dataforge devops doctor                              # o que falta para subir
dataforge devops secrets                             # o que nao pode ir ao repo

Também: ops. Veja: vitrine, new, pack.

telegram#

Cria, roda e publica um bot de Telegram. Ver a página.

bash
dataforge telegram <new|run|doctor|webhook|off>
text
O token vem de $TELEGRAM_TOKEN — nunca do código. 'doctor' pergunta ao próprio Telegram por que o bot está calado: token, webhook brigando com o polling, privacidade de grupo ligada.
bash
dataforge telegram new meubot                        # cria o projeto
dataforge telegram doctor                            # por que ele não responde
dataforge telegram run                               # sobe em long polling
dataforge telegram webhook https://x.dev             # registra o webhook

Também: bot. Veja: vitrine, devops, new.

vitrine#

Sobe um painel feito com Arcane.Vitrine. Ver a página.

bash
dataforge vitrine <run|dev|doctor|new>
text
Um programa de cima para baixo vira uma pagina web. 'dev'
recarrega ao salvar; 'doctor' diz por que ela nao sobe.

Nao ha 'build': nao existe bundler nem transpilacao — o
que roda e o proprio .df.
OpçãoEfeito
--porta=<n>a porta (padrao 8501)
--host=<ip>o endereco (padrao 127.0.0.1)
bash
dataforge vitrine dev                                # sobe recarregando ao salvar
dataforge vitrine doctor                             # o que falta para subir
dataforge vitrine new meupainel                      # cria o projeto

Veja: new, run.

editor#

Instala a coloracao de sintaxe no VS Code. Ver a página.

bash
dataforge editor [status|remove]
text
Copia a extensao para o VS Code, Insiders, Cursor, VSCodium e
Windsurf — todos os que encontrar. Depois disso, todo arquivo
.df abre com as palavras reservadas coloridas, 23 snippets e a
indentacao de 4 espacos que a linguagem exige.

O instalador ja faz isso; use este comando para reinstalar
depois de atualizar o DataForge ou de instalar um editor novo.
OpçãoEfeito
statusmostra onde esta instalada
removedesinstala de todos os editores
bash
dataforge editor                                     # instala em todos
dataforge editor status                              # so confere

Veja: version, lsp.

debug#

Roda parando onde voce mandar. Ver a página.

bash
dataforge debug <arquivo.df>
text
Para, mostra o que esta valendo e deixa andar de uma
instrucao por vez. Dentro dele: 'p' passo, 'n' proximo,
'f' sai da acao, 'c' continua, 'vars' lista o escopo,
'pilha' mostra quem chamou quem, e qualquer expressao e
avaliada no quadro onde voce parou.

Sem '--parar', ele para na primeira instrucao.
OpçãoEfeito
--parar=N,Mparadas ja nas linhas N e M
--vigiar=EXPRpara quando o valor de EXPR mudar (repetivel)
--vigiar-leitura=NOMEpara quando NOME for LIDO — 'quem esta consultando isto?'
bash
dataforge debug conta.df                             # para no comeco
dataforge debug conta.df --parar=42                  # so na linha 42
dataforge debug conta.df --vigiar=saldo              # para quando 'saldo' mudar
dataforge debug conta.df --vigiar-leitura=saldo      # para quando 'saldo' for lido

Veja: run, check.

dap#

Adaptador de depuracao para o editor. Ver a página.

bash
dataforge dap
text
Fala o Debug Adapter Protocol por stdin/stdout. E o que poe
os breakpoints na margem do editor, a pilha de chamadas no
painel, as variaveis em arvore e o console de avaliacao —
com 'entrar', 'passar por cima' e 'sair da acao'.

Voce nao o roda a mao: a extensao do VS Code o inicia
sozinha ao apertar F5. Este comando existe para outros
editores que perguntam qual adaptador iniciar.

Para depurar no terminal — por ssh, sem interface
grafica — use 'dataforge debug'.
bash
dataforge dap                                        # o que o editor executa

Veja: debug, lsp.

lsp#

Servidor de linguagem para o editor. Ver a página.

bash
dataforge lsp
text
Fala o Language Server Protocol por stdin/stdout. E o que da
ao editor autocompletar sensivel a contexto, erro sublinhado
enquanto se digita, ir-para-definicao, renomear com seguranca,
o esquema do arquivo e ajuda de assinatura.

Voce nao o roda a mao: a extensao do VS Code o inicia
sozinha. Este comando existe para outros editores — Neovim,
Helix, Emacs — que perguntam qual comando iniciar.
OpçãoEfeito
--log=ARQUIVOgrava o que acontece, para depurar
bash
dataforge lsp                                        # o que o editor executa
dataforge lsp --log=/tmp/lsp.log                     # com registro

Veja: editor, check.

Diagnostico#

explain#

Explica um codigo de erro. Ver a página.

bash
dataforge explain <codigo>
text
Todo erro do DataForge tem um codigo estavel, como DF0601.
Este comando diz o que ele significa e como resolver.
bash
dataforge explain DF0601
dataforge explain 0401                               # o prefixo e opcional
dataforge explain KeyError                           # o nome da classe tambem

Veja: check, erros.

crucible#

Roda as suites do Crucible, o framework de testes. Ver a página.

bash
dataforge crucible [alvo]
text
Descobre os arquivos, carrega as suites e roda tudo junto.
Sem alvo, procura em tests/, testes/ e *_crucible.df.
OpçãoEfeito
--verbose, -vmostra tambem o que passou
--filtro=<t>so os trials cujo nome contem <t>
--tag=<a,b>so os marcados com estas tags
--sem-tag=<a>pula os marcados com esta tag
--aleatorioembaralha a ordem; ordem oculta aparece
--semente=<n>repete um embaralhamento especifico
--repetir=<n>roda cada trial n vezes
--prazo=<ms>falha o que passar deste tempo
--fail-fastpara na primeira falha
--formato=<f>texto \| junit \| json \| tap
--out=<arq>escreve o relatorio num arquivo
--matcherslista tudo o que se pode cobrar
bash
dataforge crucible                                   # roda tudo
dataforge crucible --tag=rapido                      # so os rapidos
dataforge crucible --formato=junit --out=r.xml       # para o CI

Também: cr. Veja: test, bench.

big-o#

Calcula a complexidade de cada acao, sem rodar o codigo. Ver a página.

bash
dataforge big-o [alvo]
text
Le a arvore e conta estrutura: lacos aninhados, recursao,
e o custo das funcoes embutidas que aparecem. Diz a classe
E o porque — 'O(n^2)' sozinho nao ajuda a melhorar nada.
OpçãoEfeito
--medirroda e compara com a classe MEDIDA
--verbose, -vmostra o porque e o que fazer
--escalaa tabela do que cada classe custa
--jsonsaida estruturada, para o editor
--strictsai com erro se algo passar de O(n log n)
bash
dataforge big-o src/ -v
dataforge big-o --escala                             # a tabela de referencia

Também: bigo, complexidade. Veja: profile, bench.

oop#

Metricas de orientacao a objeto e os cheiros de SOLID. Ver a página.

bash
dataforge oop [alvo]
text
Mede cada blueprint sem rodar: WMC, DIT, NOC, CBO, RFC, LCOM,
fan-in, fan-out, instabilidade e indice de manutenibilidade.

Cada limite ultrapassado vira um cheiro com o principio que
ele fere e o que fazer: god blueprint (SRP), contrato gordo
(ISP), switch de tipo (OCP), sobrescrita que recusa (LSP),
dependencia concreta (DIP), heranca funda, baixa coesao,
modelo anemico, inveja de recurso e dependencia circular.
OpçãoEfeito
--diagramao diagrama de classes em Mermaid
--hierarquiaa arvore de heranca
--jsonsaida estruturada
--strictsai com erro se houver cheiro
bash
dataforge oop src/                                   # metricas e cheiros
dataforge oop src/ --diagrama > classes.mmd          # o diagrama para o README

Também: metricas-oop. Veja: big-o, stats, check.

custo#

Mostra o que cada 'adopt' traz junto. Ver a página.

bash
dataforge custo [alvo]
text
Uma linha de import nao parece cara. Um modulo de 200
simbolos entra inteiro no processo.
bash
dataforge custo src/

Também: cost. Veja: big-o.

gramatica#

A gramatica da linguagem, com exemplos conferidos.

bash
dataforge gramatica [grupo|producao]
text
Cada producao traz o EBNF, um exemplo e a nota do que mais
engana. Os exemplos passam pelo lexer e pelo parser de verdade
a cada execucao da suite — a gramatica nao tem como descrever
uma sintaxe que o parser ja nao aceita.
OpçãoEfeito
--ebnfso o EBNF (de um grupo, ou da gramatica inteira)
--precedenciaa tabela, da mais fraca para a mais forte
--jsona mesma coisa como dado
bash
dataforge gramatica                                  # os grupos
dataforge gramatica pipeline                         # uma producao
dataforge gramatica expressoes --ebnf                # o EBNF de um grupo
dataforge gramatica --precedencia                    # quem liga mais forte

Também: grammar. Veja: palavras, tokens, ast.

palavras#

Lista as palavras da linguagem, com um exemplo de cada. Ver a página.

bash
dataforge palavras [termo]
text
Sao 113: as 81 reservadas mais as contextuais. Cada uma traz
o que faz e um exemplo que RODA — eles saem de
'exemplos_palavras.py', e ha teste executando todos.

Com termo, procura no nome e na descricao.
bash
dataforge palavras                                   # todas
dataforge palavras cycle                             # so o que fala de laco

Também: keywords. Veja: erros, explain.

erros#

Lista o catalogo de erros da linguagem. Ver a página.

bash
dataforge erros [termo]
text
Sao 219 codigos em 19 familias. Sem termo, lista tudo
agrupado; com termo, procura no titulo e na explicacao.
bash
dataforge erros                                      # o catalogo inteiro
dataforge erros banco                                # so o que fala de banco

Também: errors. Veja: explain.

doc#

Gera documentacao Markdown a partir dos comentarios. Ver a página.

bash
dataforge doc [alvo]
OpçãoEfeito
--out=<arquivo>escreve num arquivo
bash
dataforge doc src/ --out=doc/API.md

deps#

Mostra o grafo de imports do codigo. Ver a página.

bash
dataforge deps [alvo]
text
Quem adota quem, e avisa sobre ciclos.

Veja: tree.

tokens#

Mostra o fluxo de tokens (lexer). Ver a página.

bash
dataforge tokens <arquivo>

Veja: ast.

ast#

Mostra a arvore sintatica (parser). Ver a página.

bash
dataforge ast <arquivo>

Veja: tokens, ir.

abi#

Compara duas versoes e diz se a nova QUEBRA a anterior. Ver a página.

bash
dataforge abi <antes.df> <depois.df>
text
A superficie de um modulo e o contrato dele: o que ele
exporta, com que aridade e com que tipos. Muda-la quebra
quem depende — em silencio, no dia da atualizacao.

Sai com 1 quando ha quebra, para reprovar no CI. O veredito
e o bump de semver que a mudanca EXIGE:

  maior     alguma coisa quebrou
  menor     so acrescimos compativeis
  correcao  a superficie nao mudou
OpçãoEfeito
--jsono resultado como dado, para o CI ler
--estritotrata como quebra o que a superficie nao decide sozinha (campo novo num record)
bash
dataforge abi v1/lib.df v2/lib.df                    # o que mudou
dataforge abi a.df b.df --json                       # como dado

Veja: alvo, check.

alvo#

Este programa roda no navegador? no WASI? numa funcao?. Ver a página.

bash
dataforge alvo <arquivo> [--alvo=<nome>]
text
Le os 'adopt' e cruza com o que cada ambiente suporta.

  servidor   maquina com sistema operacional completo
  cli        programa de linha de comando
  navegador  CPython em WebAssembly, dentro de uma aba
  wasi       WebAssembly fora do navegador
  funcao     serverless: efemero, e com o disco so de leitura
  embarcado  microcontrolador

A leitura e ESTATICA: um 'roda' quer dizer 'nao achei
impedimento por esta via', e nao 'vai funcionar'.
OpçãoEfeito
--alvo=<nome>confere um alvo, e sai com 1 se nao roda
--jsono resultado como dado
bash
dataforge alvo app.df                                # a tabela de todos
dataforge alvo app.df --alvo=navegador               # um so

Veja: abi, check.

percurso#

Onde o tempo vai: as fases em ordem, medidas. Ver a página.

bash
dataforge percurso <arquivo>
text
O 'ir' mostra cada fase; o 'percurso' mostra TODAS em
ordem, com o que cada uma produziu e quanto levou — que e
a pergunta quando um arquivo demora a abrir no editor.

Ele NAO executa o programa: executar e o que o programa
faz, e um arquivo de verdade abre soquete e escreve em
disco. A ultima fase e nomeada e marcada como nao
percorrida, para que a ausencia tenha lugar.

Cada fase e medida UMA vez, com os imports aquecidos:
serve para comparar as fases entre si, e nao maquinas.
OpçãoEfeito
--jsono resultado como dado
--desenhoo caminho real desenhado
--sem-tipospula a analise estatica, a fase mais cara num projeto com muitos 'adopt'
bash
dataforge percurso app.df                            # a tabela de fases
dataforge percurso app.df --desenho                  # o caminho desenhado, com as ausencias

Veja: ir, ecossistema.

ecossistema#

O inventario da implementacao, conferido contra o disco. Ver a página.

bash
dataforge ecossistema
text
O desenho do ecossistema com uma marca por componente:

  [+]  existe, com esse papel
  [~]  equivale: outra peca responde a mesma pergunta
  [-]  nao existe, e o porque esta escrito

Ele CONFERE as duas direcoes: todo caminho citado existe
no disco, e todo modulo do nucleo aparece em algum
componente. Sem a segunda, um modulo novo nasce fora do
mapa e o inventario fica incompleto em silencio.

Sai com 1 quando o mapa e o disco discordam.
OpçãoEfeito
--jsono inventario como dado
--ausenciasso o que nao existe e o que esta no lugar
bash
dataforge ecossistema                                # o inventario inteiro
dataforge ecossistema --ausencias                    # so o que nao existe, com o motivo

Veja: principios, percurso.

principios#

Os dez principios de design, com a prova de cada um. Ver a página.

bash
dataforge principios
text
Cada principio carrega a frase do documento, o que ela
significa AQUI, o veredito e uma prova que RODA — duas
delas chamam o analisador e uma abre um interpretador.

O veredito nao e dez de dez de proposito: ha parciais e
ha um que nao se aplica, com o motivo.

E as TENSOES: onde dois principios se contradizem, qual
venceu, o custo aceito e o arquivo onde isso mora. Uma
lista de principios diz o que se quer; a tensao diz o que
se escolheu quando nao era possivel querer as duas coisas.
OpçãoEfeito
--jsono resultado como dado
--tensoesso as tensoes
bash
dataforge principios                                 # os dez, medidos
dataforge principios --tensoes                       # so onde dois se contradizem

Veja: ecossistema, percurso.

ir#

Mostra o caminho inteiro: HIR, MIR, LIR e as analises. Ver a página.

bash
dataforge ir <arquivo> [--fase=…]
text
As representacoes do meio, que 'tokens' e 'ast' nao mostram.

  hir       a arvore depois do acucar, e quanto dele o arquivo usa
  mir       o grafo de fluxo: bloco basico, aresta, laco, tratador
  analises  alcance, constantes, escapatoria e nome nao definido
  ssa       uma definicao por nome, com os nos phi das juncoes
  otimizado o que os passes conseguem tirar deste arquivo
  lir       o que o compilador de fechamentos compilou, e o que recuou

Nao ha fase de codigo de maquina: o backend e compilador.py, e
o 'lir' e onde isso fica visivel.
OpçãoEfeito
--fase=<nome>tokens, ast, hir, mir, analises, ssa, otimizado, lir ou tudo
--acao=<nome>so o corpo desta acao, no 'mir'
--jsona mesma coisa como dado
bash
dataforge ir app.df                                  # o caminho inteiro
dataforge ir app.df --fase=mir                       # so o grafo de fluxo
dataforge ir app.df --fase=lir                       # o que compilou

Veja: ast, tokens, check.

completar#

Gera o autocompletar do terminal. Ver a página.

bash
dataforge completar <bash|zsh|fish>
text
O script sai do proprio catalogo de comandos: um comando novo
aparece no Tab no dia em que entra aqui. As opcoes sao por
comando, e depois de 'run', 'check' ou 'fmt' o Tab completa
arquivo. O script nao chama o dataforge a cada tecla.
bash
dataforge completar bash > ~/.local/share/bash-completion/completions/dataforge # bash
dataforge completar zsh > "${fpath[1]}/_dataforge"   # zsh
dataforge completar fish > ~/.config/fish/completions/dataforge.fish # fish

Também: completion. Veja: help, editor.

clean#

Limpa caches e artefatos de build. Ver a página.

bash
dataforge clean
text
Remove dist/, __pycache__ e o cache de pacotes baixados.
OpçãoEfeito
--allinclui forge_modules/ e o cache global

version#

Mostra a versao. Ver a página.

bash
dataforge version

Também: --version, -V.

help#

Mostra esta ajuda, ou a de um comando. Ver a página.

bash
dataforge help [comando]
bash
dataforge help                                       # visao geral
dataforge help add                                   # so o 'add'

Também: --help, -h.