Clarion VS Code Extension – December 2025 Progress Update
(covering v0.7.7 through v0.8.3)
December ended up being a very dense development period, focused on making the extension behave like a real Clarion language tool rather than just a syntax highlighter.
The work broadly fell into four areas:
IntelliSense for Clarion itself (brand-new capability)
Before this work, Clarion keywords, attributes, built-in functions, and controls had no signature help at all — only syntax colouring.
From v0.7.8 onward, the extension now provides true IntelliSense for the Clarion language:
- Built-in function signatures with:
- Parameter lists
- Optional parameters
- Data types
- Attribute IntelliSense (
NAME(),DLL,PRIVATE,VIRTUAL, etc.) - Control and structure awareness (WINDOW, SHEET, BUTTON, etc.)
- Context-aware help (e.g.
TOin LOOP vs CASE)
This is a foundational shift: Clarion is no longer treated as “highlighted text”, but as a language with editor-level intelligence.
Performance: large files now feel instant
Significant performance work targeted real-world Clarion codebases:
- Keystroke latency reduced from ~800–900 ms to ~10–15 ms in large files (13k+ lines)
- Root cause:
DocumentStructurewas being rebuilt on every keystroke - Fix: structures are now built on demand, only when a provider actually needs them
Additional improvements:
- Folding provider crash fixes
- Hard safety limits on folding ranges
- Tokenizer optimised with early-exit and context-aware pattern checks
Net effect: hover, signature help, folding, diagnostics and completions no longer block typing.
Navigation: procedures now behave like methods
Procedure navigation was brought in line with class method behaviour:
- F12 (Go to Definition) on a procedure call → MAP declaration
- Ctrl+F12 (Go to Implementation) → PROCEDURE implementation
- Hover now shows both declaration and implementation context
This works correctly with:
- MEMBER files (automatically checks the parent MAP)
- Overloaded procedures
- Parameter type matching (not just parameter count)
The goal was consistency: procedure calls now behave the same way as class methods.
Unreachable code detection – rebuilt correctly
Unreachable code detection was fully re-architected:
- Logic moved server-side using real structure boundaries (
finishesAt) - No fragile depth tracking or client-side parsing
- Correct Clarion semantics for:
- IF / ELSIF / ELSE
- CASE / OF / OROF / ELSE
- EXECUTE / BEGIN
- LOOP / ACCEPT
- ROUTINE vs procedure scope
False positives that existed in earlier approaches are now eliminated.
Package size & cleanup
The extension was also significantly slimmed down:
- Package size reduced by ~50% (~38 MB → ~19 MB)
- Telemetry infrastructure fully removed
- Unused dependencies pruned
- Debug configs and legacy logging cleaned up
Production builds now ship only runtime-required files.
Overall direction
This period wasn’t about adding flashy commands — it was about:
- Making the extension fast enough to disappear
- Making analysis correct according to Clarion semantics
- Making navigation and IntelliSense feel native to the Clarion Extension
If you work in large .clw files or complex MAP / MEMBER layouts, you should feel the difference immediately.
As always, feedback — especially with real-world Clarion examples — is very welcome. Post your issue here