Linter
Ejecuta wippy lint para comprobar los tipos y analizar estáticamente las 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
Que se Verifica
El linter valida todos los tipos de entradas Lua:
function.lua- Funcioneslibrary.lua- Bibliotecasprocess.lua- Procesosworkflow.lua- Workflows
Las entradas de bytecode contienen bytecode compilado (fs/path/hash), no fuente, por lo que no pueden ser parseadas ni verificadas en tipos; el linter solo revisa entradas Lua con fuente (sus variantes .bc se omiten, aunque pueden seguir apareciendo en el conteo total de entradas).
Cada entrada es analizada, verificada en tipos y examinada en busca de problemas de correccion.
Niveles de Severidad
Los diagnosticos tienen tres niveles de severidad:
| Nivel | Descripcion |
|---|---|
error |
Errores de tipo y problemas de correccion que deben corregirse |
warning |
Posibles bugs o patrones problematicos |
hint |
Sugerencias de estilo y notas informativas |
Controla que niveles aparecen con --level:
wippy lint --level error # Errors only
wippy lint --level warning # Warnings and errors (default)
wippy lint --level hint # Everything
Codigos de Error
Errores de Analisis
| Codigo | Descripcion |
|---|---|
P0001 |
Error de sintaxis Lua - el codigo fuente no puede ser analizado |
Errores de Verificacion de Tipos (serie E)
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
Requires No Declarados
Un require("name") con literal de cadena cuyo modulo no esta ni en las declaraciones imports/modules de la entrada ni es un builtin ambiental falla con:
require("name") is not declared in _index.yaml imports or modules
Esta verificacion se ejecuta siempre (no esta condicionada por --rules) y se reporta como error. Declara el modulo para satisfacerla:
imports:
json: wippy.stdlib:json # alias -> registry id
modules:
- funcs # bare module name
Los requires dinámicos (require(variable)) no se inspeccionan. El linter y el runtime comparten el conjunto de módulos ambientales, que incluye módulos disponibles sin declaración, como process en los tipos ejecutables.
Advertencias de Reglas de Lint (Serie W)
Las reglas de lint proporcionan verificaciones de estilo y calidad. Activalas con --rules:
wippy lint --rules
| Codigo | Regla | Descripcion |
|---|---|---|
W0001 |
no-empty-blocks | Bloques de sentencias vacios |
W0002 |
no-global-assign | Asignacion a variables globales |
W0003 |
no-self-compare | Comparacion de un valor consigo mismo |
W0004 |
no-unused-vars | Variables locales sin usar |
W0005 |
no-unused-params | Parametros de funcion sin usar |
W0006 |
no-unused-imports | Importaciones sin usar |
W0007 |
no-shadowed-vars | Variable oculta el ambito externo |
Sin --rules, solo se realiza la verificacion de tipos (codigos P y E).
Filtrado
Por Namespace
Verifica namespaces especificos usando --ns:
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.
Por Codigo de Error
Filtra diagnosticos por codigo:
wippy lint --code E0001
wippy lint --code E0001 --code E0004
Por Cantidad
Limita la cantidad de diagnosticos mostrados:
wippy lint --limit 10 # Show first 10 issues
Formatos de Salida
Formato Tabla (Por Defecto)
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
Formato Resumen
Agrupa diagnosticos por namespace y codigo de error:
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
Salida legible por maquinas para integracion 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
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:
wippy lint --cache-reset
Integración CI/CD
En los modos tabla y resumen, el comando termina con un código distinto de cero cuando el resultado filtrado contiene errores. Las advertencias y sugerencias no afectan al código de salida, incluso cuando --level warning o --level hint las muestran.
El modo JSON es diferente: después de codificar correctamente el resultado, wippy lint --json termina con código 0 aunque error_count no sea cero. Un trabajo de CI que use JSON debe analizar por sí mismo error_count. Para usar el estado de salida del comando como puerta, ejecuta una invocación sin JSON:
wippy lint --level error
Puedes generar un informe por separado sin tratar su código de salida como resultado del lint:
wippy lint --json --level error > lint-results.json
Ejemplo de paso en GitHub Actions:
- name: Lint
run: wippy lint --level warning
Referencia de Flags
| Flag | Corto | Por Defecto | Descripcion |
|---|---|---|---|
--level |
warning | Nivel minimo de severidad (error, warning, hint) | |
--json |
false | Salida en formato JSON | |
--ns |
Filtrar por patrones de namespace | ||
--code |
Filtrar por codigos de error | ||
--limit |
0 | Maximo de diagnosticos a mostrar (0 = ilimitado) | |
--summary |
false | Agrupar por codigo de error | |
--no-color |
false | Desactivar salida con colores | |
--rules |
false | Activar reglas de lint (verificaciones de estilo/calidad serie W) | |
--cache-reset |
false | Limpiar cache antes del analisis | |
--profile |
Aplicar un perfil del workspace desde la configuración combinada del runtime; se puede repetir para aplicar perfiles en orden | ||
--set |
Sobrescribir un valor de configuración combinada como section.path=value; se puede repetir para varias sobrescrituras |
||
--lock-file |
-l |
wippy.lock | Ruta al archivo de bloqueo |
--profile |
Aplicar un perfil de workspace desde la configuracion de runtime combinada (repetible, aplicado en orden) | ||
--set |
Sobrescribir un valor de la configuracion de runtime combinada (section.path=value, repetible) |