RPGLE Analyzer
Professional-grade VS Code extension for RPGLE analysis — from AST-powered parsing to inline diagnostics, cross-file /COPY resolution, and scope-aware code completion.
RPGLE Analyzer keeps the built-in Outline structural and adds separate views for semantic, impact, and graph analysis.
Version 0.11.2 — Fix de estabilidad en Hover para fuentes complejos, Data Flow Visual webview unificado, toggle legacy views, EXSR tracking, Graph Explorer SVG, Smart Preview virtual scroll, Hover unificado con gutter decorations.
What It Gives You
| Feature |
Description |
| 🔍 Outline |
Structural view: procedures, parameters, subroutines, prototypes, variables, DS fields, files, constants, indicators, SQL cursors, H/I specs |
| 🧭 Go to Definition |
F12 / Ctrl+click — scope-aware navigation to declarations |
| 💬 Hover Tooltips |
KIND: NAME [SCOPE] [DETAIL] on symbol hover |
| 🩺 Diagnostics Inline |
Real-time errors/warnings on save: unused variables, unclosed blocks, unresolved prototypes |
| 🔬 Semantic Insights |
Read/write analysis by variable and scope, including legacy opcodes (MOVE, Z-ADD, ADD) and SQL INTO :var |
| 📂 Cross-file /COPY |
Recursive resolution of /COPY and /INCLUDE directives (up to 10 levels deep) with caching |
| ✨ Code Completion |
40+ RPGLE keywords, 8 snippets, scope-aware variables, subfields after DS_NAME., procedures for CALLP |
| 🌐 Graph Explorer |
Local call graph, file interactions, LikeDS relations |
| 🔗 Impact Explorer |
Forward invocation flow + basic incoming callers |
| 📊 Data Flow Visual |
Unified panel: File I/O graph, Read/Write Analysis table, Impact Propagation + Field Origins. Replaces Semantic Insights, Data Flow Tree, and Impact Explorer |
| 📐 Smart Preview |
Indented structural preview with block/branch visualization |
| 🔃 Folding & CodeLens |
Block close-to-open navigation |
| 🧭 Go To Parent IF |
Navigate from ELSE/ELSEIF to parent IF |
Supported Scope
| Kind |
Formats |
| Procedures |
P ... B/E, dcl-proc / end-proc |
| Subroutines |
BEGSR / ENDSR (fixed + free) |
| PI Parameters |
Fixed D-spec + free dcl-pi |
| Prototypes |
PR, DCL-PR with extproc/extpgm |
| Variables |
D, DCL-S, DCL-DS — all RPGLE types (char, varchar, packed, zoned, binary, float, int, date, time, timestamp, arrays, pointers, based) |
| DS Fields |
Named + unnamed, nested, likeds |
| Constants |
DCL-C + fixed-form |
| Indicators |
*IN.., *INLR, *INRT |
| KLIST / KFLD |
Fixed + free |
| Files |
F, DCL-F (disk, printer, display, workstn) |
| SQL Cursors |
EXEC SQL DECLARE <cursor> CURSOR ... |
| Control-flow |
IF/ELSE/ELSEIF/ENDIF, DOW/DOU/DO/ENDDO, FOR/ENDFOR, SELECT/WHEN/OTHER/ENDSL, MONITOR/ON-ERROR/ENDMON, BEGSR/ENDSR |
| H/I/O Specs |
Fixed-format H, I, O specs |
| Cross-file |
/COPY, /INCLUDE — recursive with cache |
Main Views
Outline
Use the standard VS Code Outline when you want structure first.
- Procedures stay grouped and readable
- Local definitions stay inside their procedure
- DS fields appear nested under their parent structure
- Optional reference lines can be shown under declarations
Go to Definition & Hover
Press F12 or Ctrl+click on any symbol to jump to its declaration. Hover over symbols to see kind, scope, and detail information. Scope-aware: resolves local variables before globals.
Diagnostics
Errors and warnings appear inline as you type (debounced) and on save:
- ⚠️ Warning: declared variable never used
- ❌ Error: procedure/subroutine/block without matching close
- ⚠️ Warning: prototype without matching procedure or
CALLP
Semantic Insights
Use RPGLE: Open Semantic Insights when you want variable-level analysis. (redirige a Data Flow Visual si useLegacyTreeViews: false)
- Groups variables by scope
- Shows
Read, Write, and Read/Write counts
- Detects legacy opcodes:
MOVE, MOVEL, Z-ADD, ADD
- Detects SQL
INTO :var as write
- Supports partial-text filtering
- Lets you jump to declarations and relevant references
Data Flow Visual
Use RPGLE: Open Data Flow Visual (o cualquiera de los comandos legacy de Semantic Insights, Data Flow Analysis o Impact Explorer, que redirigen aquí) cuando quieras un panel unificado con análisis completo de data flow.
- File I/O Graph — Operaciones I/O agrupadas por archivo, con íconos de lectura/escritura y navegación a línea
- Read/Write Analysis — Tabla de variables con reads/writes por opcode, scope, file I/O, dependencias entre variables, y advertencias de variables no leídas/no escritas
- Impact Propagation — Severidad direct/indirect/transitive + field origins con cadena de origen hasta el archivo
Toggle legacy: Si prefieres las vistas de árbol antiguas, activa rpgleOutline.useLegacyTreeViews: true en la configuración.
Cross-file /COPY
/COPY and /INCLUDE directives are resolved recursively:
- Searches
includes/, include/, <library>/, and source directories
- Supports extensions:
.rpgle, .rpgleinc, .inc, .cpy
- Merged symbols are marked with
includedFrom showing origin
- Cache with 10s TTL, invalidated on save
Code Completion
Triggered by . (dot) — provides:
- Keywords: 40+ RPGLE keywords (
dcl-s, if, dow, monitor, callp, etc.)
- Snippets: 8 block templates (
dcl-proc...end-proc, monitor...on-error...endmon, if...endif, etc.)
- Variables: scope-aware (globals + locals + from /COPY)
- Subfields: after
DS_NAME.
- Procedures: after
callp / call
Impact Explorer
Use RPGLE: Open Impact Explorer when you want invocation flow from a selected root.
- Works on the active file
- Supports root selection
- Shows outgoing impact and basic incoming callers
- Supports partial-text filtering
Graph Explorer
Use RPGLE: Open Graph Explorer when you want a more conceptual local map.
- Invocation flow
- File interactions
LikeDS data-shape relations
Recommended Commands
| Command |
What it does |
RPGLE: Open Data Flow Visual |
Nuevo — Panel unificado con File I/O Graph, Read/Write Analysis e Impact Propagation |
RPGLE: Open Semantic Insights |
Redirige a Data Flow Visual (o tree view legacy si useLegacyTreeViews: true) |
RPGLE: Open Impact Explorer |
Redirige a Data Flow Visual (o tree view legacy) |
RPGLE: Open Graph Explorer |
Conceptual local map with SVG visual graph |
RPGLE: Show Call Graph |
Local invocation relationships |
RPGLE: Show Dependency Graph |
File operations + LikeDS |
RPGLE: Show Smart Preview |
Indented structural preview |
RPGLE: Go To Parent IF |
Navigate to parent IF from ELSE/ELSEIF |
Installation
Install the extension from the VS Code Marketplace when available, or from a provided .vsix package.
Short version:
- Open Extensions in VS Code.
- Choose Install from VSIX... if you received a package file.
- Open an
.rpgle, .rpg, or .sqlrpgle member.
More detail: INSTALL.md
Configuration
{
"rpgleOutline.enableDSpecVariables": true,
"rpgleOutline.enableKListFields": true,
"rpgleOutline.showReferencesInOutline": true,
"rpgleOutline.maxReferencesPerSymbol": 20,
"rpgleOutline.outlineSortMode": "alphabetical",
"rpgleOutline.enableLiveBlockNavigator": true,
"rpgleOutline.showLiveBlockStatus": true,
"rpgleOutline.useLegacyTreeViews": false
}
| Scenario |
Time |
Throughput |
| 56 regression fixtures (767 lines) |
3.97ms |
193 L/ms |
| 100 lines |
0.66ms |
240 L/ms |
| 500 lines |
1.00ms |
501 L/ms |
| 1,000 lines |
1.44ms |
693 L/ms |
| 5,000 lines |
3.80ms |
1,315 L/ms |
ANTLR cold start is skipped for fixed-format files via heuristic detection.
Notes
- The extension is now stable (v0.11.0+).
- Analysis is intentionally conservative to reduce false positives.
- Most deeper analysis is local to the active file, not whole-workspace.
- Diagnostics and code completion require a running VS Code extension host.
Links
| |