Skip to content

Commit af57a5d

Browse files
release: v1.3.0 (#114)
* docs: add release process to AGENTS.md * docs: add branch protection step to release process * docs: enforce_admins true in branch protection command (#108) * Pre-release QA manual testing checklist (#76) * docs: pre-release QA checklist with manual test fixtures (#75) * fix: add missing loop variable declaration in test_highlighting.st * test: add logical operators, MOD, block comments, double-quoted strings to highlighting test * fix: reorder number patterns to prevent splitting literals Moved hex/binary/octal/float patterns before plain integer pattern. Prevents: 16#ABCD matching '16' first, 1.23E-4 matching '1' and '4'. Now full literals highlight correctly. * fix: remove console.warn noise from ast-parser Removed console.warn on missing END keywords. Diagnostics provider handles user-facing errors. Parser silently returns EOF on unmatched blocks. * test: add FUNCTION_BLOCK declarations to syntax highlighting fixture Replaced completion-focused content with proper FB declarations (VAR_INPUT/OUTPUT/IN_OUT, custom FBs). Tests FUNCTION_BLOCK/END_FUNCTION_BLOCK keyword highlighting. * fix: diagnostics squiggles, missing commands, paren tracking, consistency - missing semicolon squiggle at insert point (after last char, len 0) - type mismatch squiggle on RHS expression only - undefined var column accounts for line indent - named param assigns (IN :=) no longer flagged as undefined - typed literal prefixes (T#, DATE#, etc.) no longer flagged - paren check per-line on statement lines; multi-line FB calls not flagged - close-paren quick fix inserts before semicolon, not after - showIndexStats and checkLspStatus commands registered and in package.json - sendRequest helper exported from lsp-client - configurationDefaults sets extension as default formatter - format doc keybinding note updated for Linux (Ctrl+Shift+I) - block terminator semicolons (END_IF; etc.) removed from all fixtures, samples, spec - hover tooltips for primitive data types - completion: FB call param suggestions, dedup, standard FBs + data types * docs: clarify branch naming conventions and PR targets (#112) * docs: enforce_admins true in branch protection command * docs: clarify branch naming conventions and PR targets * chore: bump version to 1.3.0, finalize changelog (#111) * chore: bump version to 1.3.0, finalize changelog * docs: add v1.3.0 release notes, update releases index * fix: remove extra space in SR.st comment alignment * docs: update README for v1.3.0 — fix version header, test count, keybinding * docs: add demo video to README * docs: replace MP4 with GIF for marketplace compatibility * docs: demo GIF and demo.st sample (#113) * docs: add demo video to README * docs: replace MP4 with GIF for marketplace compatibility * samples: add demo.st showcasing key IEC 61131-3 features
1 parent 218bb3a commit af57a5d

41 files changed

Lines changed: 1168 additions & 122 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,50 @@ Add `Priority:` and `Effort:` labels manually per issue. No emoji/icons in title
8686
```
8787
main ← stable, tagged releases only; never commit directly
8888
release-X.Y.0 ← integration branch per milestone; PRs merge here
89-
feature/issue-N-desc ← short-lived; cut from the active release branch
89+
feature/issue-N-desc ← new functionality
90+
fix/issue-N-desc ← bug fixes
91+
chore/desc ← tooling, config, deps
92+
docs/desc ← documentation only
9093
```
9194

92-
- **Feature branches** cut from the active `release-X.Y.0` (matches issue milestone)
93-
- **PRs** target `release-X.Y.0`, never `main`
95+
- All branch types target the active `release-X.Y.0` via PR — no direct pushes, no exceptions
9496
- **`main`** updated only when releasing — merge `release-X.Y.0``main` via a release PR, then tag
9597
- **Hotfixes** branch off `main`, PR back to both `main` and the active release branch
9698
- Create `release-X.Y.0` at milestone start; delete after merge to `main`
9799
- Active release branch is the one matching the current in-progress milestone
98100

101+
## Release Process
102+
103+
**At milestone start — create release branch:**
104+
1. `git checkout main && git pull`
105+
2. `git checkout -b release-X.Y.0 && git push -u origin release-X.Y.0`
106+
3. Apply branch protection (require PR, no force push, no deletion):
107+
```bash
108+
gh api repos/ControlForge-Systems/controlforge-structured-text/branches/release-X.Y.0/protection \
109+
--method PUT --input - <<'EOF'
110+
{
111+
"required_pull_request_reviews": {"required_approving_review_count": 0},
112+
"required_status_checks": null,
113+
"enforce_admins": true,
114+
"restrictions": null,
115+
"allow_force_pushes": false,
116+
"allow_deletions": false
117+
}
118+
EOF
119+
```
120+
121+
**During milestone — tag pre-release when QA starts:**
122+
1. All milestone issues closed and merged into `release-X.Y.0`
123+
2. Tag `vX.Y.0-rc.1` on `release-X.Y.0`, publish as GitHub **pre-release** — signals QA in progress, not for production
124+
125+
**When QA complete — ship:**
126+
1. Move `CHANGELOG.md` `[Unreleased]` entries to `[X.Y.0] - YYYY-MM-DD`
127+
2. Open PR `release-X.Y.0` → `main`
128+
3. Merge PR, tag `vX.Y.0` on `main`
129+
4. `vsce package && vsce publish`
130+
5. Close the milestone
131+
6. Delete `release-X.Y.0` branch
132+
99133
## Pull Requests
100134
101135
Template at `.github/PULL_REQUEST_TEMPLATE.md`. Two sections:

CHANGELOG.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
## [Unreleased]
44

5-
### Changed
6-
- License changed from BUSL-1.1 to MIT (#78)
7-
8-
### Fixed
9-
- Parser regex fails on multi-line variable declarations (#41)
10-
- Verbose console.log in definition provider polluting test and server output
5+
## [1.3.0] - 2026-02-20
116

127
### Added
8+
- Pre-release QA manual testing checklist covering all 14 feature categories (#75)
9+
- Manual test fixtures for rename symbol, find references, .iecst extension, commands, formatting settings (#75)
1310
- Rich hover tooltips for standard function blocks: parameter tables, behavior descriptions, usage examples (#22)
1411
- Advanced diagnostics and linting: missing semicolons, duplicate declarations, undefined variables, unused variables, type mismatches (#6)
1512
- Semantic analysis powered by AST parser symbols for deeper code inspection (#6)
@@ -31,10 +28,15 @@
3128
- Clean build steps for compile and webpack scripts
3229

3330
### Changed
31+
- License changed from BUSL-1.1 to MIT (#78)
3432
- Extracted `getExtensionPath` from server.ts into extension-path.ts for testability (#44)
3533
- Updated all npm dependencies (TypeScript 4.9→5.9, webpack 5.99→5.105, node types 16→20) (#50)
3634
- Removed legacy parser (`parser.ts`) and its tests
3735

36+
### Fixed
37+
- Parser regex fails on multi-line variable declarations (#41)
38+
- Verbose console.log in definition provider polluting test and server output
39+
3840
### Removed
3941
- Stale documentation (FEATURES.md, MANUAL_TEST_GUIDE.md, RELEASE_PLAN.md, TESTING.md)
4042
- Dead scripts (pretest, compile-test, test:watch, test:pre-commit)

README.md

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55

66
Professional **Structured Text (IEC 61131-3)** development environment for **PLC programming** in Visual Studio Code.
77

8+
![ControlForge Structured Text Demo](images/demo.gif)
9+
810
## Key Features
911

10-
- **Code Formatting**: Format Document (Shift+Alt+F), Format Selection, configurable keyword casing, operator spacing, VAR alignment
12+
- **Code Formatting**: Format Document, Format Selection, configurable keyword casing, operator spacing, VAR alignment
1113
- **Real-time Diagnostics**: Errors and warnings as you type — missing semicolons, type mismatches, undefined/unused variables, unmatched blocks
1214
- **Code Actions & Quick Fixes**: One-click fixes for missing END blocks, semicolons, duplicate/unused declarations, unclosed strings
1315
- **Rename Symbol (F2)**: Rename variables, functions, FBs, programs with IEC 61131-3 validation
@@ -18,12 +20,6 @@ Professional **Structured Text (IEC 61131-3)** development environment for **PLC
1820
- **Workspace Indexing**: Automatic cross-file symbol discovery and resolution
1921
- **Code Snippets**: Pre-built templates for common PLC patterns
2022

21-
## Screenshots
22-
23-
### Syntax Highlighting & IntelliSense
24-
![Syntax Highlighting](images/syntax-highlighting.png)
25-
*Rich syntax highlighting for all IEC 61131-3 constructs*
26-
2723
## Getting Started
2824

2925
### Installation
@@ -105,7 +101,7 @@ END_PROGRAM
105101
- **Light bulb menu**: Fixes appear via `Ctrl+.` or clicking the light bulb icon
106102

107103
### Code Formatting
108-
- **Format Document**: `Shift+Alt+F` to format entire file
104+
- **Format Document**: Format entire file via Command Palette (`Ctrl+Shift+P` > Format Document)
109105
- **Format Selection**: Format only selected code
110106
- **Keyword casing**: Configurable UPPER, lower, or preserve
111107
- **Operator spacing**: Automatic spaces around `:=`, `+`, `-`, `*`, `/`, `=`, `<>`, `<=`, `>=`
@@ -136,15 +132,15 @@ END_PROGRAM
136132
- **Visual Studio Code** 1.100.0 or higher
137133
- **Operating System**: Windows, macOS, or Linux
138134

139-
## What's New (Unreleased)
135+
## What's New in v1.3.0
140136
- **Rich FB Hover Tooltips**: Standard function blocks show parameter tables, behavior descriptions, and usage examples on hover
141137
- **Advanced Diagnostics**: Missing semicolons, duplicate declarations, undefined variables, unused variables, type mismatches — all with quick fixes
142-
- **Code Formatting**: Format Document (Shift+Alt+F) and Format Selection with keyword casing, operator spacing, indentation, VAR alignment
138+
- **Code Formatting**: Format Document and Format Selection with keyword casing, operator spacing, indentation, VAR alignment
143139
- **Rename Symbol (F2)**: Rename variables, functions, FBs, programs with identifier validation and comment-awareness
144140
- **Code actions & quick fixes**: Auto-insert missing END blocks, close unclosed strings, fix unmatched parentheses via light bulb menu
145141
- **Real-time diagnostics**: Unmatched blocks, unclosed strings, unmatched parentheses shown in Problems panel as you type
146142
- **Multi-line declaration parsing**: Arrays, structs, and complex initializers now parse correctly
147-
- **353 unit tests**: Comprehensive coverage for all LSP providers, diagnostics, code actions, rename, and formatting
143+
- **366 unit tests**: Comprehensive coverage for all LSP providers, diagnostics, code actions, rename, and formatting
148144

149145
## What's New in v1.2.5
150146
- **Multi-line declaration parsing**: Arrays, structs, and complex initializers now parse correctly

docs/IEC61131_SPECIFICATION.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ MotorSpeed := SpeedSetpoint * ScalingFactor;
265265
```
266266
IF ActualTemperature > HighTempAlarm THEN
267267
AlarmActive := TRUE;
268-
END_IF;
268+
END_IF
269269
```
270270

271271
**Logical operators (`AND`, `OR`, `NOT`)**: Critical for safety interlocks and condition evaluation:
@@ -381,8 +381,8 @@ IF StartButton.Q THEN
381381
StartDelay(IN := TRUE, PT := T#3s);
382382
IF StartDelay.Q THEN
383383
ProductCounter(CU := TRUE, PV := 100);
384-
END_IF;
385-
END_IF;
384+
END_IF
385+
END_IF
386386
```
387387

388388
### Vendor Support Comparison

0 commit comments

Comments
 (0)