Diagnósticos y mensajes de error
El compilador reporta cada problema con un código E##### (p.ej. E00221), un nivel de severidad y un mensaje en español con los valores concretos interpolados.
Niveles
| Nivel | Significado |
|---|---|
error | Impide la generación de código; el objeto no compila. |
warning | No impide compilar, pero señala algo probablemente no intencional (p.ej. una variable declarada y nunca usada). |
Cómo se ven
Por línea de comandos (formato humano):
[2026-07-24T21:26:47Z] ERROR E00221 (line: 12, column: 5): La variable 'x' declara char(16773105), fuera del rango permitido (1-16773104).
O en JSON (--format json, el que consume la extensión de VSCode para pintar los subrayados rojos/amarillos en el editor):
{"errors": [{"line": 12, "column": 5, "severity": "error", "message": "..."}]}
Algunos ejemplos representativos
| Código | Situación |
|---|---|
E00001 | Se esperaba una sección @Nombre y se encontró otra cosa. |
E00128 | Un archivo referenciado por el .warpcfg (p.ej. la clave SSH de @Connection) no existe en esta máquina — no bloquea validate/generate, pero hará falta para build/reverse. |
E00152 | Una variable de @Variables fue declarada pero nunca usada (warning). |
E00195 | Uso inválido de RefreshSelectRow()/For Each Row fuera de un Screen con DataGridView. |
E00221 | char fuera del rango permitido para una variable standalone en @Variables (1-16.773.104). |
E00222 | number con precisión fuera de rango (1-63) en @Variables. |
E00223 | number cuya escala es mayor que su precisión. |
E00224 | varchar fuera del rango permitido (1-16.773.100). |
E00238 | struct(Nombre) referencia un template que no existe en @Variables. |
E00240 | Acceso &Variable.Miembro a un miembro que no existe en el template del struct. |
E00242 | Se pasó una variable struct(OtroTemplate) donde se esperaba un template distinto (la comparación es por nombre exacto, no por estructura). |
E00269 | La Description de una tabla (@Structure) supera los 50 caracteres que admite TEXT en DDS. |
E00270 | La Description de un campo (@Fields) supera los 50 caracteres que admite TEXT en DDS. |
E00271 | La Description de un índice (@Indexes) supera los 50 caracteres que admite TEXT en DDS. |
E00281 | La Description de @Properties (de un Program o Screen) supera los 50 caracteres que admite TEXT en los mandatos CL de compilación (CRTBNDRPG/CRTDSPF/CHGPFM). Mismo límite y criterio que E00269/E00270/E00271. |
E00284 | Port de @License es 0. |
E00285 | Host de @License no es un host válido. |
E00286 | Fingerprint de @License no es una huella SHA-256 válida. |
E00287 | Aviso: @License tiene Host pero no Fingerprint. |
E00288 | Aviso: @License tiene Host y File juntos (File se ignora). |
E00290 | @Connection/@Deployment/@License declarados directamente dentro de @GeneratorConfig, sin envolverlos en un @Profile "Nombre". |
E00291 | @GeneratorConfig no declara ningún @Profile. |
E00292 | El perfil pedido con --profile o Default Profile no existe entre los @Profile declarados (se listan los disponibles). |
E00293 | Hay varios @Profile declarados y no se indicó cuál usar (ni --profile ni Default Profile), así que el compilador no puede elegir uno solo (se listan los disponibles). |
Cada mensaje tiene un código, un nivel (error/warning) y una plantilla con los datos concretos del caso ({variable}, {length}, etc.) que el compilador completa al reportarlo.
Cuándo se disparan
- Al guardar/abrir un
.warpen VSCode (warpgate.validateOnSave/validateOnOpen), si hay un.warprojresuelto para ese archivo. - Manualmente con
warpgate --action validate— no toca IBM i, es puramente local. - Nota de licencia:
validateno exige licencia;generate/build/reversesí (ver Licenciamiento). - Como parte de
generate/build/reverse— si hay errores, no se llega a generar/desplegar código.