Skip to content

Releases: ControlForge-Systems/controlforge-structured-text

v1.4.0

15 Mar 02:12
f1dfce0

Choose a tag to compare

Added

  • ST syntax highlighting injected into <Declaration>, <ST>, <Implementation>, and <Interface> XML elements in TwinCAT/CoDeSys export files (plain content and CDATA-wrapped)
  • Hardware address literals (%IX0.0, %QW1, %MD100, etc.) highlighted as constant.other.hardware-address.st
  • Pragma/attribute blocks ({attribute 'xxx'}, {IF}, {ENDIF}, etc.) highlighted as meta.pragma.st with keyword.other.pragma.st keyword scopes
  • SFC action qualifier keywords (N, S, R, L, D, P, SD, DS, SL) highlighted as keyword.other.sfc-qualifier.st
  • ANY_CHAR and ANY_CHARS generic types added to storage.type.st
  • CLASS, END_CLASS, INTERFACE, END_INTERFACE, METHOD, END_METHOD, PRIVATE, PROTECTED, PUBLIC, INTERNAL, END_NAMESPACE added to keyword.declaration.st
  • PROPERTY added to keyword.other.st
  • Named parameters: IEC 61131-3 escape character $ (not \) used in string escape patterns
  • OF in ARRAY [..] OF scoped as keyword.other.array-of.st (distinct from CASE...OF control scope)
  • Named parameters in FB/function calls (Param :=, Param =>) now scoped as variable.parameter.st in syntax highlighting (#94)
  • Signature Help for function and function block calls: triggers on ( and ,, supports manual trigger, highlights active parameter, includes standard + workspace signatures (#33)
  • Diagnostic error for assignment to CONSTANT-qualified variables (VAR CONSTANT, VAR_GLOBAL CONSTANT); paren-depth guard avoids false positives on named FB parameters (#60)
  • Diagnostic error for out-of-bounds array access with constant/literal indices; supports 1-D, multi-dimensional, zero-based, and negative-lower-bound arrays; variable indices ignored (#61)
  • FOR loop bounds validation: BY 0 flagged as error (infinite loop), reverse range with positive/negative BY flagged as warning (never executes), start equals end flagged as hint; only constant bounds checked (#62)
  • Diagnostic warning and quick-fix code action for := vs = confusion: bare = in statement position flagged with "Replace '=' with ':='" action; := inside IF/ELSIF/WHILE/UNTIL condition flagged with "Replace ':=' with '='" action (#63)
  • Cross-file rename: F2 now renames symbols across all workspace files, not just the active document

Fixed

  • Multi-line FB calls with closing ) on its own line falsely flagged as "Unmatched closing parenthesis"; fixed with cross-line depth tracking
  • Output named parameters (Param =>) falsely flagged as undefined identifiers; => pattern now excluded from identifier extraction

Changed

  • Bump @types/node to ^25.0.0, glob to ^13.0.0; add skipLibCheck to tsconfig for TS 5.x / @types/node 25 compatibility (#124)
  • Standardized manual test fixture naming (removed test_/test- prefixes) and updated references
  • Removed redundant QA and screenshot placeholder docs from repo (docs/QA_CHECKLIST.md, images/README.md)

ControlForge Structured Text v1.3.0

20 Feb 08:29
af57a5d

Choose a tag to compare

What's New

Added

  • Rich hover tooltips for standard function blocks: parameter tables, behavior descriptions, usage examples
  • Advanced diagnostics and linting: missing semicolons, duplicate declarations, undefined variables, unused variables, type mismatches
  • Levenshtein-based fuzzy matching for "did you mean?" suggestions on undefined identifiers
  • Quick fixes: insert semicolon, remove duplicate declaration, remove unused variable
  • Code formatting (Shift+Alt+F): keyword casing, indentation, operator spacing, VAR block alignment, trailing whitespace
  • Format Selection support for partial document formatting
  • Configurable formatting settings: keywordCase, insertSpacesAroundOperators, alignVarDeclarations, trimTrailingWhitespace, insertFinalNewline
  • Rename Symbol (F2): rename variables, functions, FBs, programs with IEC 61131-3 validation and comment awareness
  • Code actions: auto-insert missing END blocks, close unclosed strings, fix unmatched parentheses
  • Real-time diagnostics with Problems panel integration
  • AST parser rewrite with multi-line statement accumulator architecture
  • 353 unit tests total (up from 44)
  • Demo GIF and sample file

Changed

  • License changed from BUSL-1.1 to MIT
  • Updated all npm dependencies (TypeScript 4.9→5.9, webpack 5.99→5.105)

Fixed

  • Parser regex fails on multi-line variable declarations
  • Verbose console.log in definition provider polluting output

Removed

  • Stale documentation, scripts, and branches

v1.3.0-rc.1 - Stability & Core LSP

19 Feb 15:43

Choose a tag to compare

Pre-release

Pre-release candidate for v1.3.0. Not for production use.

Changes since v1.2.5

Added

  • Rich hover tooltips for standard function blocks: parameter tables, behavior descriptions, usage examples (#22)
  • Advanced diagnostics and linting: missing semicolons, duplicate declarations, undefined variables, unused variables, type mismatches (#6)
  • Quick fixes for semantic diagnostics: insert semicolon, remove duplicate declaration, remove unused variable (#6)
  • Levenshtein-based fuzzy matching for "did you mean?" suggestions on undefined identifiers (#6)
  • Code formatting (Shift+Alt+F): keyword casing, indentation, operator spacing, VAR block alignment, trailing whitespace removal (#29)
  • Format Selection support for partial document formatting (#29)
  • Configurable formatting settings: keywordCase, insertSpacesAroundOperators, alignVarDeclarations, trimTrailingWhitespace, insertFinalNewline (#29)
  • Rename Symbol (F2): rename variables, functions, FBs, programs with IEC 61131-3 validation, comment awareness (#28)
  • Code actions and quick fixes: auto-insert missing END blocks, close unclosed strings, fix unmatched parentheses (#26)
  • Real-time diagnostics with Problems panel integration: unmatched blocks, unclosed strings, unmatched parentheses (#27)
  • AST parser rewrite with multi-line statement accumulator architecture (#41)
  • 366 unit tests (up from 44 in v1.2.5)

Fixed

  • Parser regex fails on multi-line variable declarations (#41)
  • Verbose console.log in definition provider polluting output

Changed

  • License changed from BUSL-1.1 to MIT (#78)
  • Updated all npm dependencies (TypeScript 4.9→5.9, webpack 5.99→5.105, node types 16→20) (#50)
  • Extracted getExtensionPath for testability (#44)
  • Removed legacy parser

Removed

  • Stale documentation, scripts, and branches

v1.2.5 - Critical Hotfix Release

10 Feb 06:09

Choose a tag to compare

🔥 Critical Hotfix Release

This release fixes 4 CRITICAL and 2 HIGH priority bugs discovered in v1.2.4.

Critical Fixes

  • #37: Removed duplicate completion provider (eliminated 219 redundant lines)
  • #38: Fixed npm test failing with missing TypeScript
  • #39: Fixed iec61131-definitions/ access in packaged extension
  • #40: Fixed hardcoded workspace root breaking in renamed folders

High Priority Fixes

  • #42: Consistent case-insensitive symbol lookup (IEC 61131-3 compliance)
  • #43: Memory leak prevention with file cleanup and debouncing

Performance Improvements

  • 300ms debouncing prevents re-parsing on every keystroke
  • Memory usage remains stable in long-running sessions
  • Large workspace performance significantly improved

Files Changed

  • 7 source files modified
  • -217 lines of duplicate code removed
  • +45 lines of cleanup/debouncing logic added

Testing

  • ✅ All 41 unit tests passing
  • ✅ Package builds successfully (257 KB)
  • ✅ iec61131-definitions/ confirmed in .vsix

Full Changelog: https://github.com/ControlForge-Systems/controlforge-structured-text/blob/main/CHANGELOG.md#125---2026-02-10

ControlForge Structured Text v1.2.4

21 Jun 16:25

Choose a tag to compare

What's New in 1.2.4

Fixed

  • Improved error handling for LSP client connection
  • Fixed "Pending response rejected since connection got disposed" error
  • Added proper shutdown sequence for LSP server process

Changed

  • Enhanced language server connection stability
  • Improved error reporting for better diagnostics
  • Completed migration to webpack bundling for better reliability

Technical Improvements

  • Added automatic retry with exponential backoff for LSP connection failures
  • Enhanced robustness of the client-server communication
  • Added detailed logging through a dedicated output channel for easier troubleshooting
  • Further refined the webpack bundling introduced in 1.2.3 for better reliability

ControlForge Structured Text v1.2.3

21 Jun 16:25

Choose a tag to compare

What's New in 1.2.3

Fixed

  • Comprehensive fix for LSP initialization error with vscode-languageclient module
  • Improved module resolution with fallback mechanisms
  • Enhanced error reporting for language server initialization issues

Changed

  • Migrated to webpack-based bundling for improved performance and reliability
  • Significantly reduced extension size by optimizing included dependencies
  • Improved extension startup time by bundling code into fewer files

Developer Notes

  • After trying several approaches to resolve the "Cannot find module 'vscode-languageclient/node'" error, we're hopeful that webpack bundling might be the solution
  • This has been a challenging journey through VS Code's Language Server Protocol architecture and extension packaging
  • While we can't be certain, we believe this approach may provide a more reliable experience across environments

ControlForge Structured Text v1.2.2

21 Jun 16:16

Choose a tag to compare

What's New in 1.2.2

Fixed

  • Critical bug fix: resolved LSP initialization error with vscode-languageclient module
  • Added robust error handling for language server activation
  • Added LSP status check command to verify Language Server Protocol is running

ControlForge Structured Text v1.2.1

21 Jun 16:15

Choose a tag to compare

What's New in 1.2.1

Fixed

  • Language Server Protocol (LSP) activation issues
  • Enhanced error handling for LSP initialization
  • Added diagnostic tools for LSP status verification
  • Improved server-client communication with detailed logging

ControlForge Structured Text v1.2.0

21 Jun 16:22

Choose a tag to compare

What's New in 1.2.0

Added

  • Go to Definition & Find References:
    • Member access navigation for function blocks (instance.member → definition)
    • Cross-file navigation between instances and library definitions
    • Smart hover information for variables and function block members
    • Comprehensive symbol indexing across workspace
  • Language Server Protocol (LSP) Integration:
    • Client-server architecture for advanced IDE features
    • Workspace indexing for cross-file references
    • Enhanced symbol provider with member access support
  • IEC 61131-3 Definition Files:
    • Standard function block definition files (TON, TOF, TP, CTU, etc.)
    • Enhanced documentation and specification compliance
    • Sample files and test cases for manual validation

Improved

  • Reorganized project structure with better separation of concerns
  • Enhanced documentation with comprehensive test guides
  • Better performance with smarter caching and incremental updates
  • More robust parser with better error handling

ControlForge Structured Text v1.1.0

21 Jun 16:23

Choose a tag to compare

What's New in 1.1.0

Added

  • Function Block Instance Member Completion:
    • Auto-complete for function block output members
    • Dot notation support (e.g., myTimer.Q, upCounter.CV)
    • Support for all IEC 61131-3 standard function blocks
    • Type-aware suggestions with detailed descriptions

Improved

  • Enhanced Parser:
    • Better variable and function block instance detection
    • Improved code structure and performance
    • Enhanced error handling
  • Testing and Documentation:
    • Comprehensive testing framework
    • Better examples and guides for users
    • Improved sample files