Clarion VS Code Extension – December 2025 Progress Update

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:


:brain: 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. TO in LOOP vs CASE)

This is a foundational shift: Clarion is no longer treated as “highlighted text”, but as a language with editor-level intelligence.


:rocket: 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: DocumentStructure was 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.


:magnifying_glass_tilted_left: 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.


:brain: 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: 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.


:bullseye: 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

15 Likes