Pular para o conteúdo

Lint

dataforge lint: as 13 regras de estilo e higiene.

O que ele faz#

O lint encontra o que compila mas provavelmente não é o que você quis dizer. Não repete o que o `check` já reporta: aqui moram questões de higiene e estilo.

bash
dataforge lint src/
dataforge lint . --strict     # avisos derrubam o build

As regras#

CódigoEncontra
unused-variablevariável atribuída e nunca lida
unused-importmódulo importado com adopt e nunca usado
unused-parameterparâmetro de ação nunca lido no corpo
shadowed-namenome local que esconde um de fora sem shadow
empty-blockbloco cujo corpo não faz nada
magic-numbernúmero solto repetido 5 vezes ou mais
long-actionação com mais de 60 linhas
deep-nestinganinhamento de 5 níveis ou mais
naming-conventionblueprint fora de PascalCase, ação fora de snake_case
redundant-elseotherwise depois de um ramo que sempre retorna
double-negationnot not x
comparison-to-boolx is yes / x is no
todo-commentcomentário TODO/FIXME (informativo)

A saída#

text
app.df:2:1: aviso: Module 'Arcane.Text' is imported but never used
    sugestão: Remove the 'adopt' line
app.df:4:1: aviso: Action 'CalcularTotal' does not follow snake_case
    sugestão: Rename it to 'calcular_total'
app.df:7:5: aviso: Variable 'naoUsada' is assigned but never read
    sugestão: Remove it, or rename it to '_naoUsada' to say it is on purpose

Calibragem#

As regras foram ajustadas contra os 225 arquivos do repositório até restarem apenas avisos legítimos. Duas exceções foram codificadas explicitamente:

  • Métodos especiais (toString, setup, add, mul…) não seguem snake_case porque o runtime os chama pelo nome — a grafia é parte do contrato.
  • Assinaturas de trait (ações sem corpo) não disparam empty-block nem unused-parameter.

Silenciar de propósito#

Um _ no início do nome diz "não usar isto é intencional":

dataforge
cycle _ in range(0, 3):        # o valor não interessa
    fazer_algo()

action f(dados, _contexto):    # parâmetro exigido pela interface
    yield processar(dados)

Configurar no projeto#

forge.toml
[lint]
strict = false
ignore = ["magic-number", "todo-comment"]