IQX JobRunner for VS Code
Syntax highlighting and validation for IQX JobRunner XML jobs. Any file named *.job.xml is picked up automatically.
Features
Highlighting
- XML base with JobRunner command names highlighted distinctly from user-defined tags (e.g. Library procedures)
- Embedded SQL in
<SQLSelect> / <SQLExec> (plain or CDATA) and in sql=, condition= and multiselectsql= attributes, with :param and {field} scopes on top
- Embedded JSON in
<MongoSelector> / <MongoDocument>
- Regex highlighting in
regex="..." attributes
- JobRunner substitutions:
{Field}, {$attribute}, {WPK_G_...} and the {{ literal-brace escape
- XPath / JSONPath content scopes
Validation (Problems panel)
- XML well-formedness (mismatched/unclosed tags, duplicate attributes, ...)
- JobRunner schema checks driven by the full documented tag catalog:
- unknown commands (with case-sensitive suggestions —
<Setvariable> → did you mean <SetVariable>?)
- unknown/mis-cased attributes; missing required attributes
- YES/NO flags, enum values (e.g.
recordextent, operation, quality), case-sensitive field types (Numeric not numeric), comparison operators
- Structural rules:
- root element must be
<Job> (capital J)
<Else> must be a sibling of its <If...> (not nested inside)
<Catch> must follow a <Block>
<ForEachRow> / <IfAnyRows> / etc. need an ancestor query
<WriteExcel...> needs an <ExportFile> ancestor with excelfontname + excelfontsize
- parent rules (
<Parameter> in <Parameters>, <Field> in a ...Select, email body tags directly under <SendEmail>, ...)
- Embedded JSON validation for Mongo selectors/documents (JobRunner's
(field) substitutions are understood) and literal JSON <HTTPRequestData> bodies
- SQL checking, configurable via
iqxJobrunner.validation.sqlMode:
lint (default) — structural checks only (unterminated strings, unbalanced parentheses, unterminated comments). Safe for SQL Anywhere syntax.
parser — additionally parses substitution-free SQL with a strict parser (closest dialect: T-SQL) and reports failures as warnings. SQL Anywhere-specific syntax (e.g. current date, key join) may produce false positives.
off
IntelliSense & navigation
- Completions: tags (context-ranked by parent), attributes per tag, enum / YES-NO / field-type / comparison values,
{field} substitutions (system fields + variables defined in the job)
- Hover docs for tags, attributes and
{SystemFields}
- Quick fixes (light bulb) for case errors, bare
{, missing required attributes, YES/NO values, lowercase <job> root
- Go-to-definition:
<Call> → Library procedure (follows <Include>d files); find references back to call sites
- Document outline / breadcrumbs for parameters, variables, queries, procedures and forms
- Snippets:
job, sqlquery, blockcatch, ifelse, sendemail, httpjson, jsonquery, parameters, library, exportcsv
Embedded-region decorations
SQL and JSON regions get a subtle themed background and a muted SQL/JSON label. Colours are themable (iqxJobrunner.embeddedSqlBackground, embeddedJsonBackground, embeddedLabelForeground).
Extension Settings
| Setting |
Default |
Description |
iqxJobrunner.validation.enable |
true |
Master switch for diagnostics |
iqxJobrunner.validation.sqlMode |
lint |
off / lint / parser |
iqxJobrunner.validation.unknownTags |
warning |
ignore / warning / error |
iqxJobrunner.validation.json |
true |
Validate embedded JSON |
iqxJobrunner.validation.undefinedSubstitutions |
false |
Heuristic: flag {names} defined nowhere in the job |
iqxJobrunner.decorations.enable |
true |
SQL/JSON region backgrounds and labels |
Development
npm install
npm run build # bundle to dist/extension.js
npm run typecheck # tsc --noEmit
npm test # validator unit tests + grammar tests (real TextMate engine)
npm run package # build the installable .vsix
CI (GitHub Actions) runs typecheck, build, both test suites and uploads a .vsix artifact on every push.
Press F5 in VS Code to launch the Extension Development Host.
The validator core (src/validator/) has no dependency on the vscode API, so it can be tested and reused standalone. The JobRunner tag/attribute catalog lives in src/validator/jobrunner-schema.json; the distilled language documentation it was built from is in docs/jobrunner-language-reference.md.
| |