Linter
Execute wippy lint para verificar tipos e analisar estaticamente entradas Lua.
Uso
wippy lint # Check all Lua entries
wippy lint --level hint # Show all diagnostics including hints
wippy lint --json # Output in JSON format
wippy lint --ns app # Check only the app namespace
wippy lint --summary # Group results by error code
O Que É Verificado
O linter valida todos os kinds de entrada Lua:
function.lua— Funçõeslibrary.lua— Bibliotecasprocess.lua— Processosworkflow.lua— Workflows
Entradas de bytecode contem bytecode compilado (fs/path/hash), nao codigo-fonte, entao nao podem ser analisadas sintaticamente nem verificadas quanto a tipos; o linter verifica apenas entradas Lua que carregam codigo-fonte (suas variantes .bc sao ignoradas, embora ainda possam aparecer na contagem total de entradas).
Cada entrada é analisada sintaticamente, tem seus tipos verificados e é examinada em busca de problemas de correção.
Níveis de Severidade
Os diagnósticos têm três níveis de severidade:
| Nível | Descrição |
|---|---|
error |
Erros de tipo e problemas de correção que precisam ser corrigidos |
warning |
Bugs prováveis ou padrões problemáticos |
hint |
Sugestões de estilo e notas informativas |
Controle quais níveis aparecem com --level:
wippy lint --level error # Errors only
wippy lint --level warning # Warnings and errors (default)
wippy lint --level hint # Everything
Códigos de Erro
Erros de Análise Sintática
| Código | Descrição |
|---|---|
P0001 |
Erro de sintaxe Lua — o código-fonte não pode ser analisado |
Erros de Verificação de Tipos (Série E)
Os erros do verificador de tipos (E0001+) informam problemas encontrados pelo sistema de tipos: incompatibilidades de tipo, variáveis indefinidas, operações inválidas e problemas semelhantes de correção. Eles sempre são apresentados 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
Requires Não Declarados
Um require("name") com literal de string cujo módulo não esteja nas declarações imports/modules da entrada nem seja um builtin ambiente falha com:
require("name") is not declared in _index.yaml imports or modules
Essa verificação sempre é executada — não depende de --rules — e é apresentada como erro. Declare o módulo para satisfazê-la:
imports:
json: wippy.stdlib:json # alias -> registry id
modules:
- funcs # bare module name
Requires dinâmicos (require(variable)) não são inspecionados. O linter e o runtime compartilham o conjunto de módulos ambientes, que inclui módulos disponíveis sem declaração, como process em kinds executáveis.
Avisos das Regras de Lint (Série W)
As regras de lint realizam verificações de estilo e qualidade. Habilite-as com --rules:
wippy lint --rules
| Código | Regra | Descrição |
|---|---|---|
W0001 |
no-empty-blocks | Blocos de instruções vazios |
W0002 |
no-global-assign | Atribuição a variáveis globais |
W0003 |
no-self-compare | Comparação de um valor consigo mesmo |
W0004 |
no-unused-vars | Variáveis locais não utilizadas |
W0005 |
no-unused-params | Parâmetros de função não utilizados |
W0006 |
no-unused-imports | Instruções de importação não utilizadas |
W0007 |
no-shadowed-vars | Variável que oculta um escopo externo |
Sem --rules, somente a verificação de tipos — códigos P e E — é realizada.
Filtragem
Por Namespace
Verifique namespaces específicos com --ns:
wippy lint --ns app # Exact namespace match
wippy lint --ns "app.*" # All under app
wippy lint --ns app --ns lib # Multiple namespaces
As dependências das entradas selecionadas são carregadas para a verificação de tipos, mas seus diagnósticos não são apresentados.
Por Código de Erro
Filtre diagnósticos por código:
wippy lint --code E0001
wippy lint --code E0001 --code E0004
Por Quantidade
Limite o número de diagnósticos exibidos:
wippy lint --limit 10 # Show first 10 issues
Formatos de Saída
Formato de Tabela (Padrão)
Cada diagnóstico é exibido com o contexto do código-fonte, a localização do arquivo e a mensagem de erro. Os resultados são ordenados por entrada, severidade e número da linha.
Uma linha de resumo apresenta os totais:
Checked 42 entries: 5 errors, 12 warnings
Formato de Resumo
Agrupa os diagnósticos por namespace e código de erro:
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
Formato JSON
Saída legível por máquina para processamento em CI/CD:
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
}
Cache
O linter mantém os resultados em cache entre execuções. As chaves do cache incluem o hash do código-fonte, o nome do método, as dependências e a configuração do sistema de tipos.
Limpe o cache se os resultados parecerem desatualizados:
wippy lint --cache-reset
Integração com CI
Nos modos de tabela e resumo, o comando retorna um código diferente de zero quando o resultado filtrado contém erros. Warnings e hints não afetam o código de saída, mesmo quando --level warning ou --level hint os exibe.
O modo JSON é diferente: depois de codificar o resultado com sucesso, wippy lint --json retorna o código 0 mesmo quando error_count é diferente de zero. Um job de CI que use a saída JSON precisa analisar error_count por conta própria. Para usar o código de saída do comando como critério, execute uma chamada sem JSON:
wippy lint --level error
Você pode gerar um relatório separadamente, sem tratar seu código de saída como o resultado do lint:
wippy lint --json --level error > lint-results.json
Exemplo de etapa do GitHub Actions:
- name: Lint
run: wippy lint --level warning
Referência de Flags
| Flag | Curta | Padrão | Descrição |
|---|---|---|---|
--level |
warning | Nivel minimo de severidade (error, warning, hint) | |
--json |
false | Saida em formato JSON | |
--ns |
Filtrar por padroes de namespace | ||
--code |
Filtrar por codigos de erro | ||
--limit |
0 | Maximo de diagnosticos a exibir (0 = ilimitado) | |
--summary |
false | Agrupar por codigo de erro | |
--no-color |
false | Desabilitar saida colorida | |
--rules |
false | Ativar regras de lint (verificacoes de estilo/qualidade serie W) | |
--cache-reset |
false | Limpar cache antes de executar o lint | |
--lock-file |
-l |
wippy.lock | Caminho para o arquivo de lock |
--profile |
Aplica um profile de workspace da configuração de runtime mesclada (repetível, aplicado em ordem) | ||
--set |
Sobrescreve um valor da configuração de runtime mesclada (section.path=value, repetível) |