Diagnostics and error messages
The compiler reports every issue with an E##### code (e.g. E00221), a severity level, and a message — currently only in Spanish — with the concrete values interpolated.
Levels
| Level | Meaning |
|---|---|
error | Blocks code generation; the object doesn’t compile. |
warning | Doesn’t block compiling, but flags something probably unintentional (e.g. a variable declared and never used). |
What they look like
On the command line (human format):
[2026-07-24T21:26:47Z] ERROR E00221 (line: 12, column: 5): La variable 'x' declara char(16773105), fuera del rango permitido (1-16773104).
Or as JSON (--format json, the one the VSCode extension consumes to draw red/yellow underlines in the editor):
{"errors": [{"line": 12, "column": 5, "severity": "error", "message": "..."}]}
Some representative examples
| Code | Situation |
|---|---|
E00001 | A @Name section was expected and something else was found. |
E00128 | A file referenced by the .warpcfg (e.g. the SSH key in @Connection) doesn’t exist on this machine — doesn’t block validate/generate, but will be needed for build/reverse. |
E00152 | A variable from @Variables was declared but never used (warning). |
E00195 | Invalid use of RefreshSelectRow()/For Each Row outside a Screen with a DataGridView. |
E00221 | char outside the allowed range for a standalone variable in @Variables (1-16,773,104). |
E00222 | number with precision out of range (1-63) in @Variables. |
E00223 | number whose scale is greater than its precision. |
E00224 | varchar outside the allowed range (1-16,773,100). |
E00238 | struct(Name) references a template that doesn’t exist in @Variables. |
E00240 | &Variable.Member access to a member that doesn’t exist in the struct’s template. |
E00242 | A struct(OtherTemplate) variable was passed where a different template was expected (the comparison is by exact name, not by structure). |
E00269 | A table’s Description (@Structure) exceeds the 50 characters allowed by TEXT in DDS. |
E00270 | A field’s Description (@Fields) exceeds the 50 characters allowed by TEXT in DDS. |
E00271 | An index’s Description (@Indexes) exceeds the 50 characters allowed by TEXT in DDS. |
E00281 | The Description in @Properties (of a Program or Screen) exceeds the 50 characters allowed by TEXT in the compile-time CL commands (CRTBNDRPG/CRTDSPF/CHGPFM). Same limit and criterion as E00269/E00270/E00271. |
E00284 | @License Port is 0. |
E00285 | @License Host is not a valid host. |
E00286 | @License Fingerprint is not a valid SHA-256 fingerprint. |
E00287 | Warning: @License has Host but no Fingerprint. |
E00288 | Warning: @License has Host and File together (File is ignored). |
E00290 | @Connection/@Deployment/@License declared directly inside @GeneratorConfig, without wrapping them in a @Profile "Name". |
E00291 | @GeneratorConfig doesn’t declare any @Profile. |
E00292 | The profile requested with --profile or Default Profile doesn’t exist among the declared @Profiles (available ones are listed). |
E00293 | Several @Profiles are declared and it wasn’t indicated which one to use (neither --profile nor Default Profile), so the compiler can’t pick just one (available ones are listed). |
Each message has a code, a level (error/warning) and a template with the case’s actual details ({variable}, {length}, etc.) the compiler fills in when reporting it.
When they fire
- On saving/opening a
.warpfile in VSCode (warpgate.validateOnSave/validateOnOpen), if there’s a.warprojresolved for that file. - Manually with
warpgate --action validate— never touches the IBM i, purely local. - License note:
validatedoes not require a license;generate/build/reversedo (see Licensing). - As part of
generate/build/reverse— if there are errors, code generation/deployment doesn’t proceed.