Releases: ControlForge-Systems/controlforge-structured-text
Releases · ControlForge-Systems/controlforge-structured-text
v1.4.0
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 asconstant.other.hardware-address.st - Pragma/attribute blocks (
{attribute 'xxx'},{IF},{ENDIF}, etc.) highlighted asmeta.pragma.stwithkeyword.other.pragma.stkeyword scopes - SFC action qualifier keywords (
N,S,R,L,D,P,SD,DS,SL) highlighted askeyword.other.sfc-qualifier.st ANY_CHARandANY_CHARSgeneric types added tostorage.type.stCLASS,END_CLASS,INTERFACE,END_INTERFACE,METHOD,END_METHOD,PRIVATE,PROTECTED,PUBLIC,INTERNAL,END_NAMESPACEadded tokeyword.declaration.stPROPERTYadded tokeyword.other.st- Named parameters: IEC 61131-3 escape character
$(not\) used in string escape patterns OFinARRAY [..] OFscoped askeyword.other.array-of.st(distinct fromCASE...OFcontrol scope)- Named parameters in FB/function calls (
Param :=,Param =>) now scoped asvariable.parameter.stin 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 0flagged 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/nodeto^25.0.0,globto^13.0.0; addskipLibCheckto tsconfig for TS 5.x /@types/node25 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
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
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
getExtensionPathfor testability (#44) - Removed legacy parser
Removed
- Stale documentation, scripts, and branches
v1.2.5 - Critical Hotfix Release
🔥 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 testfailing 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
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
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
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
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
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
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