Ir al contenido

Linter

Wippy incluye un linter integrado que realiza verificacion de tipos y analisis estatico en codigo Lua. Ejecutalo con wippy lint.

Ventana de terminal
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

El linter valida todos los tipos de entradas Lua:

  • function.lua - Funciones
  • library.lua - Bibliotecas
  • process.lua - Procesos
  • workflow.lua - Workflows

Sus variantes precompiladas .bc (function.lua.bc, library.lua.bc, process.lua.bc, workflow.lua.bc) tambien son analizadas.

Cada entrada es analizada, verificada en tipos y examinada en busca de problemas de correccion.

Los diagnosticos tienen tres niveles de severidad:

NivelDescripcion
errorErrores de tipo y problemas de correccion que deben corregirse
warningPosibles bugs o patrones problematicos
hintSugerencias de estilo y notas informativas

Controla que niveles aparecen con --level:

Ventana de terminal
wippy lint --level error # Errors only
wippy lint --level warning # Warnings and errors (default)
wippy lint --level hint # Everything
CodigoDescripcion
P0001Error de sintaxis Lua - el codigo fuente no puede ser analizado

Los errores del verificador de tipos (E0001+) reportan problemas encontrados por el sistema de tipos: incompatibilidades de tipos, variables no definidas, operaciones invalidas y problemas de correccion similares. Siempre se reportan como errores.

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

Las reglas de lint proporcionan verificaciones de estilo y calidad. Activalas con --rules:

Ventana de terminal
wippy lint --rules
CodigoReglaDescripcion
W0001no-empty-blocksBloques de sentencias vacios
W0002no-global-assignAsignacion a variables globales
W0003no-self-compareComparacion de un valor consigo mismo
W0004no-unused-varsVariables locales sin usar
W0005no-unused-paramsParametros de funcion sin usar
W0006no-unused-importsImportaciones sin usar
W0007no-shadowed-varsVariable oculta el ambito externo

Sin --rules, solo se realiza la verificacion de tipos (codigos P y E).

Verifica namespaces especificos usando --ns:

Ventana de terminal
wippy lint --ns app # Exact namespace match
wippy lint --ns "app.*" # All under app
wippy lint --ns app --ns lib # Multiple namespaces

Las dependencias de las entradas seleccionadas se cargan para la verificacion de tipos pero sus diagnosticos no se reportan.

Filtra diagnosticos por codigo:

Ventana de terminal
wippy lint --code E0001
wippy lint --code E0001 --code E0004

Limita la cantidad de diagnosticos mostrados:

Ventana de terminal
wippy lint --limit 10 # Show first 10 issues

Cada diagnostico se muestra con contexto del codigo fuente, ubicacion del archivo y el mensaje de error. Los resultados se ordenan por entrada, severidad y numero de linea.

Una linea de resumen muestra los totales:

Checked 42 entries: 5 errors, 12 warnings

Agrupa diagnosticos por namespace y codigo de error:

Ventana de terminal
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

Salida legible por maquinas para integracion CI/CD:

Ventana de terminal
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
}

El linter almacena resultados en cache para acelerar ejecuciones repetidas. Las claves de cache se basan en el hash del codigo fuente, nombre del metodo, dependencias y configuracion del sistema de tipos.

Limpia el cache si los resultados parecen desactualizados:

Ventana de terminal
wippy lint --cache-reset

Usa la salida JSON y codigos de salida para verificaciones automatizadas:

Ventana de terminal
wippy lint --json --level error > lint-results.json

El linter termina con codigo 0 cuando no se encuentran errores, y con un valor distinto de cero cuando hay errores.

Ejemplo de paso en GitHub Actions:

- name: Lint
run: wippy lint --level warning
FlagCortoPor DefectoDescripcion
--levelwarningNivel minimo de severidad (error, warning, hint)
--jsonfalseSalida en formato JSON
--nsFiltrar por patrones de namespace
--codeFiltrar por codigos de error
--limit0Maximo de diagnosticos a mostrar (0 = ilimitado)
--summaryfalseAgrupar por codigo de error
--no-colorfalseDesactivar salida con colores
--rulesfalseActivar reglas de lint (verificaciones de estilo/calidad serie W)
--cache-resetfalseLimpiar cache antes del analisis
--lock-file-lwippy.lockRuta al archivo de bloqueo
  • CLI - Referencia completa del CLI
  • Tipos - Documentacion del sistema de tipos
  • LSP - Integracion con editores con diagnosticos en vivo