- 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
- 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
- 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)
- Pre-release QA manual testing checklist covering all 14 feature categories (#75)
- Manual test fixtures for rename symbol, find references, .iecst extension, commands, formatting settings (#75)
- 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)
- Semantic analysis powered by AST parser symbols for deeper code inspection (#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)
- 62 unit tests for workspace-indexer, member-access-provider, definition-provider, completion-provider (44 → 106 total) (#44)
- 45 unit tests for diagnostics provider (106 → 151 total) (#27)
- 31 unit tests for code action provider (151 → 182 total) (#26)
- 58 unit tests for rename provider (182 → 240 total) (#28)
- 67 unit tests for formatting provider (240 → 307 total) (#29)
- 46 unit tests for Phase 2 semantic diagnostics, levenshtein/fuzzy matching, and code actions (307 → 353 total) (#6)
- Clean build steps for compile and webpack scripts
- License changed from BUSL-1.1 to MIT (#78)
- Extracted
getExtensionPathfrom server.ts into extension-path.ts for testability (#44) - Updated all npm dependencies (TypeScript 4.9→5.9, webpack 5.99→5.105, node types 16→20) (#50)
- Removed legacy parser (
parser.ts) and its tests
- Parser regex fails on multi-line variable declarations (#41)
- Verbose console.log in definition provider polluting test and server output
- Stale documentation (FEATURES.md, MANUAL_TEST_GUIDE.md, RELEASE_PLAN.md, TESTING.md)
- Dead scripts (pretest, compile-test, test:watch, test:pre-commit)
- Stale files (test-local.sh, HOW_TO_TEST_LOCALLY.md)
- Stale branches (develop, feature/issue-5-rename-symbol-support)
- Duplicate completion provider conflicts (#37)
- npm test failing in clean environments (#38)
- iec61131-definitions/ inaccessible in packaged extension (#39)
- Hardcoded workspace root breaking in renamed folders (#40)
- Inconsistent case-insensitive symbol lookup (#42)
- Memory leak from missing index cleanup on file close (#43)
- Removed duplicate completion provider from extension client
- Extension path passed via LSP initialization instead of hardcoded lookup
- Normalized symbol names for IEC 61131-3 case-insensitive compliance
- Debounced document change handling for typing performance
- Improved error handling for LSP client connection
- Fixed "Pending response rejected since connection got disposed" error
- Added proper shutdown sequence for LSP server process
- Enhanced language server connection stability
- Improved error reporting for better diagnostics
- Completed migration to webpack bundling for better reliability
- Comprehensive fix for LSP initialization error with vscode-languageclient module
- Improved module resolution with fallback mechanisms
- Enhanced error reporting for language server initialization issues
- Migrated to webpack-based bundling for improved performance and reliability
- Reduced extension size by optimizing included dependencies
- Improved extension startup time by bundling code into fewer files
- 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
- 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
- Go to Definition & Find References: Navigate through Structured Text code
- 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
- 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
- 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 (TON, TOF, TP, CTU, CTD, CTUD, R_TRIG, F_TRIG, RS, SR)
- Type-aware suggestions with detailed descriptions
- Dot notation support (e.g.,
- Enhanced parser with function block instance extraction
- Enhanced code snippets and examples
- Syntax highlighting with additional keywords (END_CONFIGURATION, END_RESOURCE)
- Better variable and function block detection
- Enhanced error handling and performance
- Updated documentation and testing infrastructure
- Missing syntax highlighting for configuration keywords
- Parser edge cases for variable declarations
- Updated publisher ID from ControlForge to ControlForgeSystems
- Removed Hello World sample command
- Improved extension description for marketplace listing
- Updated repository and website URLs
- Initial release
- Syntax highlighting for Structured Text
- Basic syntax validation
- Support for .st and .iecst files
- IEC 61131-3 language features