Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
a858af6
chore(deps): refresh development toolchain
vitalyruhl Aug 20, 2026
b72d40d
test(language): establish QuickScript behavior baseline
vitalyruhl Aug 20, 2026
5088637
feat(core): add source and token model
vitalyruhl Aug 20, 2026
46a3d92
feat(core): implement QuickScript tokenizer
vitalyruhl Aug 20, 2026
eccd656
docs(architecture): document core foundation
vitalyruhl Aug 20, 2026
eb962e8
chore(release): prepare version 1.5.1
vitalyruhl Aug 20, 2026
ee6e9c5
docs(architecture): define formatter migration path
vitalyruhl Aug 20, 2026
07f6c28
chore(release): defer version bump until HIL
vitalyruhl Aug 20, 2026
7bd02e2
feat(language): add native QuickScript language server
vitalyruhl Aug 20, 2026
edb9590
docs(architecture): document language pipeline and HIL
vitalyruhl Aug 20, 2026
a6180c0
chore(extension): prepare HIL fix round 1 version
vitalyruhl Aug 20, 2026
0855a0e
fix(language): restore HIL formatter and function diagnostics
vitalyruhl Aug 20, 2026
c047761
docs(testing): record first manual HIL findings
vitalyruhl Aug 20, 2026
2174d3b
delete old todo
vitalyruhl Aug 20, 2026
8389eb2
fix(language): address HIL round 2 findings
vitalyruhl Aug 20, 2026
e06c9b9
docs(language): define QuickScript grammar
vitalyruhl Aug 20, 2026
e7655ab
feat(core): validate QuickScript statement grammar
vitalyruhl Aug 20, 2026
f6fee06
test(language): add grammar-derived negative coverage
vitalyruhl Aug 20, 2026
e7cfd2a
fix(formatter): reindent multiline brace comments as blocks
vitalyruhl Aug 20, 2026
b350654
chore(release): prepare HIL version 1.5.3
vitalyruhl Aug 20, 2026
f4f5901
feat(core): support CALL expressions
vitalyruhl Aug 20, 2026
823b938
test(language): cover comment isolation and CALL expressions
vitalyruhl Aug 20, 2026
fb06441
docs(language): document CALL expression grammar
vitalyruhl Aug 20, 2026
30f3952
chore(release): prepare HIL version 1.5.4
vitalyruhl Aug 20, 2026
1290165
fix(language): isolate multiline metadata comments
vitalyruhl Aug 20, 2026
bd77d31
feat(language): add QuickScript quality diagnostics
vitalyruhl Aug 20, 2026
2da7cfd
test(language): cover naming quality rules
vitalyruhl Aug 20, 2026
7d480a2
docs(language): document quality diagnostics
vitalyruhl Aug 20, 2026
aabfa1d
chore(release): prepare quality HIL version 1.5.6
vitalyruhl Aug 20, 2026
e16a3f8
feat(core): add QuickScript document metadata model
vitalyruhl Aug 20, 2026
a2766c8
feat(language): add cross-file workspace symbols
vitalyruhl Aug 20, 2026
e32289c
test(language): cover metadata and workspace symbols
vitalyruhl Aug 20, 2026
86a1d61
docs(language): document QuickScript metadata convention
vitalyruhl Aug 20, 2026
db5f020
chore(release): prepare metadata HIL version 1.5.7
vitalyruhl Aug 20, 2026
65d0cb9
fix(language): normalize Windows workspace document identities
vitalyruhl Aug 20, 2026
cda8200
fix(security): remove private project function catalog
vitalyruhl Aug 20, 2026
457e460
chore(release): prepare QuickScript language server 1.6.0
vitalyruhl Aug 20, 2026
c1dd71d
fix(formatter): preserve input line endings
vitalyruhl Aug 20, 2026
46d0611
fix(language-server): preserve document line endings
vitalyruhl Aug 20, 2026
276d774
test: allow extension host startup on slower runners
vitalyruhl Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dist/*.js whitespace=-trailing-space
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ all-agents-combined.md
#formatter
#.vscode/**
typings/**
out/test/**
/out/
#src/**
**/*.map

Expand Down
10 changes: 5 additions & 5 deletions .serena/memories/language-intelligence.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
- `.vbi` and `.vi` are proprietary InTouch QuickScript, not Visual Basic, VBA,
VBScript, Pascal, or PowerShell. Do not route them to a foreign language
server.
- Serena excludes QuickScript from semantic navigation until this repository
provides a native InTouch language server. Use targeted text search and
repository language evidence in the meantime.
- ProjectAtlas may index QuickScript as neutral text for file orientation and
lexical search, never as a source of semantic symbols or references.
- This repository provides a native InTouch QuickScript language server. Serena
uses its thin QuickScript adapter for semantic navigation of `.vbi` and `.vi`.
- ProjectAtlas may index QuickScript structurally for file orientation and
lexical search, while semantic language intelligence remains in the native
language server.
- Current language evidence: `syntaxes/intouch.tmLanguage.json`,
`src/const.ts`, `src/nestingdef.ts`, `src/formatCore.ts`,
`src/test/suite/testfiles/`, and `docs/language/quickscript.md`.
Expand Down
1 change: 1 addition & 0 deletions .serena/project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ activation_command_timeout: 180.0
# The first language server is the default language and the respective language server will be used as a fallback.
# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
language_servers:
- quickscript
- yaml
- json
- markdown
Expand Down
93 changes: 37 additions & 56 deletions .vscodeignore
Original file line number Diff line number Diff line change
@@ -1,69 +1,50 @@
### VSIX Ignore (bundled) ###
# Keep only runtime bundle (dist), grammar, themes, snippets, language config, images used by marketplace, license, readme.

# Exclude development sources & build output not needed after bundling
src/
out/
backup/
scripts/

# Node modules removed because code is bundled
node_modules/

# Dev / workspace meta
.git/
.github/
.vscode/
.vscode-test/
workspace.code-workspace
# Ship only the runtime bundle and user-facing extension assets.

# Local agent, index, workspace, and repository metadata
.agents/**
.git/**
.github/**
.projectatlas/**
.serena/**
.vscode/**
.vscode-test/**
.gitignore
.vscodeignore
AGENTS.md
TODO.md
launch.json
renovate.json
settings.json
TODO.md
tsconfig.json
tslint.json
package-lock.json
workspace.code-workspace

# Tests & fixtures
src/test/
**/*.test.vbi
**/*.tobe.vbi
# Development sources, tests, documentation, and build metadata
.Temp/**
LanguageDefinition/**
backup/**
docs/**
node_modules/**
other/**
out/**
packages/**
scripts/**
src/**
temp/**
eslint.config.mjs
package-lock.json
syntaxes/schema.json
tsconfig.json

# Exclude all heavy/readme showcase images (served via GitHub raw links in README)
# Marketplace images are hosted externally; retain only the extension icon.
images/**
!images/logo.png

# Exclude full LanguageDefinition directory (no language docs / assets in VSIX per request)
LanguageDefinition/**

# Misc archives / binaries
# Generated and archival artifacts
dist/**/*.map
*.7z
*.zip
*.zap*
*.iso
*.exe

# Existing packaged files
*.iso
*.vsix

# Temp folders
temp/
other/

# Ignore all source maps except allow dist maps (help debugging if user enables)
**/*.map
!dist/*.map

# Keep dist bundle
!dist/**

# Allow essential files
!README.md
!LICENSE
!package.json
!language-configuration.json
!syntaxes/**
!themes/**
!snippets/**
!images/logo.png

*.zap*
*.zip
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,28 @@
<!-- markdownlint-disable MD013 -->
<!-- markdownlint-disable MD025 -->

## 1.6.0

- Replace the legacy formatter lexers with the shared QuickScript tokenizer and
recoverable structure parser.
- Add a native language server with diagnostics, symbols, completion, hover,
document-local variable navigation, and workspace QuickFunction navigation.
- Route VS Code formatting through the language client while preserving the
existing grammar, snippets, theme, and formatter command.
- Add editor-independent core tests, language-server protocol smoke tests, and
a manual `.vbi`/`.vi` HIL gate.
- Keep unclosed `{>` metadata blocks inside one multiline brace-comment token
while preserving diagnostics between same-line-closed nesting markers.
- Keep project-specific QuickFunctions external to the public static catalog;
workspace declarations remain dynamically discoverable.
- Accept corpus-evidenced Unicode and digit-prefixed identifiers, numeric
dotfields, and multiline `IF` continuation forms.
- Add configurable QuickScript quality diagnostics for non-ASCII identifiers
and problematic literal window names without changing language validity.
- Add canonical comment-based document metadata, InTouch KeyScript/shortcut and
Window-event classification, plus URI-aware cross-file QuickFunction
definition, references, hover, and completion independent of filename prefixes.

### V1.4.0

- 29.11.2022 VitalyRuhl
Expand Down
20 changes: 0 additions & 20 deletions LanguageDefinition/ToDo_V1.5.x.md

This file was deleted.

39 changes: 31 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,25 @@

# Intouch-Language

- **Intouch-Language** is an open source extension created for **Visual Studio Code** (**Not official!**). It provides `syntax highlighting`, `snippets` and `auto-format` function for Intouch Basic. New since 2022.11.28 - own darkmode theme for VSC, names Intouch Dark.
- **Intouch-Language** is an open source extension created for **Visual Studio Code** (**Not official!**). It provides native QuickScript language-server support for `.vbi` and `.vi` files, including formatting, diagnostics, document metadata, QuickFunction discovery, cross-file definition and references, hover, completion, and document symbols. It also includes the Intouch Dark theme.
- **Intouch** is a programming language for AVEVA (Wonderware) SCADA Intouch Applications.

## QuickScript Language Server

The extension includes a native, editor-independent QuickScript language
server for `.vbi` and `.vi` files. It provides:

- Parser-based formatting and diagnostics.
- Comment-based document metadata for QuickFunctions, Windows, Applications,
DataChanges, Conditions, and KeyScripts.
- Workspace QuickFunction discovery with cross-file definition and references.
- Hover, completion, and document symbols.
- Window event support for `OnShow`, `WhileRunning`, and `OnClose`.
- Non-callable Application, DataChange, Condition, and KeyScript symbols.

Project-specific QuickFunctions are discovered from the current workspace;
private project catalogs are not bundled with the public extension.

<p align="center" bgcolor:=#3f3f3f>
<br />
<a title="Intouch" href="https://factorysoftware.de/"><img src="https://factorysoftware.de/resources/uploads/2020/02/wonderware-germany-austria-footer.png" alt="Intouch" /></a>
Expand Down Expand Up @@ -129,13 +145,16 @@ NOTE: The default VS Code theme does not color much. Switch to intouch theme (in
## Development and agent workflow

Repository governance starts at [AGENTS.md](AGENTS.md). QuickScript language
boundaries and the planned language-server architecture are documented in
boundaries and the language-server architecture are documented in
[docs/language/quickscript.md](docs/language/quickscript.md) and
[docs/architecture/intouch-core-preparation.md](docs/architecture/intouch-core-preparation.md).
The supported comment-based script metadata convention is documented in
[docs/language/document-metadata.md](docs/language/document-metadata.md).

The current extension does not include a language server. Until a native
InTouch language server exists, `.vbi` and `.vi` are not semantically analysed
by a foreign language server.
The extension uses its own QuickScript language server for `.vbi` and `.vi`.
Formatting and semantic features share the editor-independent core tokenizer
and parser. Manual validation against real project files remains the release
gate; see [Manual QuickScript HIL](docs/testing/manual-hil.md).

---

Expand Down Expand Up @@ -163,8 +182,12 @@ by a foreign language server.
The following items are either recently resolved or planned but not yet implemented:

- PLANNED: Range (selection) formatting. Current command formats the entire document.
- PLANNED: Diagnostics (unclosed IF/FOR, unexpected ENDIF/NEXT) – tracked in modernization plan.
- PLANNED: Tokenizer-based nesting & keyword uppercasing refactor for improved robustness.
- Diagnostics cover unclosed or invalid block nesting, duplicate local `DIM`
declarations, and unknown datatypes.
- Formatting uses the shared tokenizer and recoverable structure parser.
- Definition and references are document-local for variables and cross-file for
metadata-declared workspace QuickFunctions; project-wide variable indexing
and range formatting remain planned.
- NOTE: Multiline IF continuation indentation intentionally uses base + 2 spaces before THEN; THEN line stays aligned with expression by design.
- NOTE: Spacing inside string literals and single-line brace comments is preserved intentionally; only outer code regions are normalized.

Expand Down Expand Up @@ -283,6 +306,6 @@ Become a patron, by simply clicking on this button (**very appreciated!**):

## Copyright

`2021-2025 (c)Vitaly Ruhl`
`2021-2026 (c)Vitaly Ruhl`

License: GNU General Public License v3.0
Loading
Loading