Pular para o conteúdo

Plugins do check

A regra que o seu projeto cobra, rodando no mesmo comando das 177 embutidas — com linha, coluna, código e silenciamento.

O dataforge check tem 177 regras. O que ele não sabe é a regra do seu projeto: "toda rota precisa de middleware de autenticação", "nenhum blueprint de domínio pode adotar Arcane.Http", "nome de uma letra não passa". Um plugin é um .df que responde isso.

Um plugin é uma ação#

regras.df
adopt Arcane.Macro as M

action verificar(arvore, arquivo):
    achados := []

    action olhar(nodo):
        given nodo["tipo"] is "Identifier" and len(nodo["nome"]) is 1:
            achados.append({"linha": nodo["linha"], "coluna": nodo["coluna"],
                            "codigo": "sem-nome-curto",
                            "mensagem": "nome de uma letra nao diz nada",
                            "sugestao": "use um nome que se leia",
                            "severidade": "aviso"})

    M.percorrer(arvore, olhar)
    yield achados

relay verificar

Rode com --plugin, ou declare no manifesto e esqueça:

bash
dataforge check src/ --plugin=regras.df
forge.toml
[check]
plugins = ["regras.df"]

O contrato#

Campo do achadoO que é
linha, colunaonde acusar — vêm do nó (nodo["linha"])
codigoo nome da regra; aparece na mensagem e serve para silenciar
mensagemo que está errado
sugestaoo que fazer — a parte que faz a diferença
severidade"erro" (padrão) ou "aviso"; erro reprova o comando

A ação recebe a árvore (o mesmo dado de `M.arvore`) e o caminho do arquivo, e devolve um cluster de achados. Nada mais.

Silenciar uma regra de plugin#

O mesmo escape das regras embutidas vale aqui — e vale porque, sem ele, a única saída de quem discorda seria desligar o plugin inteiro:

dataforge
x := 1    // df: permitir sem-nome-curto

Um plugin quebrado não derruba o check#

Se o plugin não carrega, ou falha no meio, isso vira diagnóstico — com o nome do arquivo e o motivo. Quem roda o check quer o relatório do código dele, e não a pilha do analisador.

dataforge
// saída quando o plugin falha:
//
//   alvo.df:1:1: erro: o plugin 'ruim.df' falhou: quebrei
//       sugestão: conserte o plugin, ou tire-o da lista
out "veja o bloco acima" 

O que um plugin alcança#

Dá para fazerComo
lint própriopercorrer a árvore e acusar o que a equipe combinou
análise de fluxo simplesseguir a ordem das instruções dentro de uma ação
convenção de arquiteturaolhar adopt e acusar dependência proibida entre camadas
verificação de esquemaler um .json do projeto e conferir contra o que o código declara
Não dáPor quê
transformar a árvore antes de rodaro plugin do check analisa; reescrever é trabalho de macro, que roda na carga do arquivo
adicionar palavra à linguagemisso é o parser, e mexe no DataForge
rodar a cada tecla no editoro LSP usa as regras embutidas; o plugin roda no comando