Pular para o conteúdo

Linter

O Wippy inclui um linter integrado que realiza verificacao de tipos e analise estatica em codigo Lua. Execute-o com wippy lint.

Terminal window
wippy lint # Verifica todas as entradas Lua
wippy lint --level hint # Mostra todos os diagnosticos incluindo hints
wippy lint --json # Saida em formato JSON
wippy lint --ns app # Verifica apenas o namespace app
wippy lint --summary # Agrupa resultados por codigo de erro

O linter valida todos os tipos de entradas Lua:

  • function.lua - Funcoes
  • library.lua - Bibliotecas
  • process.lua - Processos
  • workflow.lua - Workflows

Suas variantes pre-compiladas .bc (function.lua.bc, library.lua.bc, process.lua.bc, workflow.lua.bc) tambem sao analisadas.

Cada entrada e analisada sintaticamente, verificada quanto a tipos e analisada para problemas de corretude.

Os diagnosticos possuem tres niveis de severidade:

NivelDescricao
errorErros de tipo e problemas de corretude que devem ser corrigidos
warningProvaveis bugs ou padroes problematicos
hintSugestoes de estilo e notas informativas

Controle quais niveis aparecem com --level:

Terminal window
wippy lint --level error # Apenas erros
wippy lint --level warning # Warnings e erros (padrao)
wippy lint --level hint # Tudo
CodigoDescricao
P0001Erro de sintaxe Lua - codigo-fonte nao pode ser analisado

Os erros do verificador de tipos (E0001+) reportam problemas encontrados pelo sistema de tipos: incompatibilidades de tipo, variaveis indefinidas, operacoes invalidas e problemas de corretude similares. Estes sao sempre reportados como erros.

local x: number = "hello" -- E: string not assignable to number
local function add(a: number, b: number): number
return a + b
end
add("one", "two") -- E: string not assignable to number

As regras de lint fornecem verificacoes de estilo e qualidade. Ative-as com --rules:

Terminal window
wippy lint --rules
CodigoRegraDescricao
W0001no-empty-blocksBlocos de instrucoes vazios
W0002no-global-assignAtribuicao a variaveis globais
W0003no-self-compareComparacao de um valor consigo mesmo
W0004no-unused-varsVariaveis locais nao utilizadas
W0005no-unused-paramsParametros de funcao nao utilizados
W0006no-unused-importsImportacoes nao utilizadas
W0007no-shadowed-varsVariavel oculta o escopo externo

Sem --rules, apenas a verificacao de tipos (codigos P e E) e realizada.

Verifique namespaces especificos usando --ns:

Terminal window
wippy lint --ns app # Correspondencia exata de namespace
wippy lint --ns "app.*" # Tudo dentro de app
wippy lint --ns app --ns lib # Multiplos namespaces

Dependencias das entradas selecionadas sao carregadas para verificacao de tipos, mas seus diagnosticos nao sao reportados.

Filtre diagnosticos por codigo:

Terminal window
wippy lint --code E0001
wippy lint --code E0001 --code E0004

Limite o numero de diagnosticos exibidos:

Terminal window
wippy lint --limit 10 # Mostra os primeiros 10 problemas

Cada diagnostico e exibido com contexto do codigo-fonte, localizacao do arquivo e a mensagem de erro. Os resultados sao ordenados por entrada, severidade e numero de linha.

Uma linha de resumo mostra os totais:

Checked 42 entries: 5 errors, 12 warnings

Agrupa diagnosticos por namespace e codigo de erro:

Terminal window
wippy lint --summary
By namespace:
app 15 issues (5 errors, 10 warnings)
lib 2 issues (2 warnings)
By error code:
E0001 [error ] 5 occurrences
E0004 [error ] 3 occurrences
Checked 42 entries: 5 errors, 12 warnings

Saida legivel por maquina para integracao com CI/CD:

Terminal window
wippy lint --json
{
"diagnostics": [
{
"entry_id": "app:handler",
"code": "E0001",
"severity": "error",
"message": "string not assignable to number",
"line": 10,
"column": 5
}
],
"total_entries": 42,
"error_count": 5,
"warning_count": 12,
"hint_count": 0
}

O linter armazena resultados em cache para acelerar execucoes repetidas. As chaves de cache sao baseadas no hash do codigo-fonte, nome do metodo, dependencias e configuracao do sistema de tipos.

Limpe o cache se os resultados parecerem desatualizados:

Terminal window
wippy lint --cache-reset

Use a saida JSON e codigos de saida para verificacoes automatizadas:

Terminal window
wippy lint --json --level error > lint-results.json

O linter retorna codigo de saida 0 quando nenhum erro e encontrado, e diferente de zero quando ha erros.

Exemplo de step no GitHub Actions:

- name: Lint
run: wippy lint --level warning
FlagCurtaPadraoDescricao
--levelwarningNivel minimo de severidade (error, warning, hint)
--jsonfalseSaida em formato JSON
--nsFiltrar por padroes de namespace
--codeFiltrar por codigos de erro
--limit0Maximo de diagnosticos a exibir (0 = ilimitado)
--summaryfalseAgrupar por codigo de erro
--no-colorfalseDesabilitar saida colorida
--rulesfalseAtivar regras de lint (verificacoes de estilo/qualidade serie W)
--cache-resetfalseLimpar cache antes de executar o lint
--lock-file-lwippy.lockCaminho para o arquivo de lock
  • CLI - Referencia completa da CLI
  • Tipos - Documentacao do sistema de tipos
  • LSP - Integracao com editor com diagnosticos em tempo real