ECL for Visual Studio Code
For list of latest changes, please see the Change Log at the main GitHub repository.
This extension adds rich language support for HPCC Systems ECL language (for the HPCC-Platform) to VS Code, including:
- Syntax highlighting
- Auto completion
- Client tools discovery and integration
- HPCC-Platform server support
- Integrated result viewer
Recent Highlights
v2.30.x
- Added ecl.preferredECLWatchsetting, allows user to nominate preferred version of ECL Watch when opening "external" pages.
v2.24.x
- Added context menu to ECL bundles and ECL Client Tools
- Added ecl.WUShowResultssetting, allows user to control how results are displayed after submitting a workunit.
v2.23.x
- Added ecl.submitNoArchivecommand, submits raw content of editor to server without creating an archive first.
- Added ecl.pingIntervalsetting, allows user to change or disable the "server alive" ping.
- Updated shift+F1 help to use new HPCC Systems website and include the Standard Library.
v2.19.x
- Added ecl.saveOnSyntaxCheckandecl.saveOnSubmitoption to ECL Settings (defaulting to off to match ECL IDE behaviour).
v2.15.x
- Add pathoption to launch configuration (to assist with proxy servers).
v2.14.x
- Add Copy WUIDcontext menu.
v2.13.x
- Add ecl.forceProxySupportsetting.
v2.12.x
- Added extra support for Trustwave CA authority.
- Fixed issue with rejectAuthorized: falsebeing ignored.
- Updated translations, added FR locale.
- Added "Copy as ECL ID" command to explorer and editor tab context menus.

v2.11.x
- Added "Import MOD file" command
v2.10.x
- Enhanced digital signature support:
- ECL: Verify ECL Signature
 
v2.9.x
- KEL:
- Optionally use grammar for syntax as you type checking (now off by default).
- Improved syntax highlighting
- Default syntax checking "on open" to true
 
v2.8.x
- Added digital signature support:
v2.7.x
- Preliminary localisation support:

v2.6.0
- Added HPCC resources page:
- List of available bundles:
- Install
- Uninstall
- Open homepage
 
- List of available client tools
- Select (force) specific version
- Deselect forced version
- Open terminal for specific version
- Open download page for Client Tools
 
 

v2.5.0
- Added context menu items for Workunits in the Workunit Tree:
- Abort Workunit (only available for running WUs)
- Delete Workunit (Only available for completed WUs)
 

v2.4.0
- Added result viewer to bottom pane
- Added "Copy Results as ECL"

v2.3.0
- Added list of "found" logical files to Insert Record Definition

v2.2.0
- Added Insert Record Definition menu item
v2.1.0
Reworked submission process:
- Launch configuration:
- Simplified
- Can be selected from the status bar
- Can be pinned to specific ECL files
 
- Target Cluster:
- Can be selected from the status bar
- Can be pinned to specific ECL files
 
- Submit / Compile now available from:
- Context menu
- Top of editor
 
- Recent Workunits:
- Tree view of recent workunits
- Toggle between "Mine" and "All"
- Open in external browser icon added to several locations
 
Quick Start
Version 2.x introduces a new streamlined submission process. The "old" Run/Debug pane support has been deprecated and will be removed in the future.

- Open folder
- Open ECL file
- Create Launch Configuration (if needed)
- Select the target by:
- Clicking the "Launch Configuration" in the status bar
- Optionally clicking on the "Target Cluster" in the status bar
 
- Monitor Workunit in the "Workunit History" pane
- Click on Workunit to view results / issues in the bottom pane
ECL
\n+## AI / Chat Integration
The extension contributes experimental Language Model (AI) tools and a chat participant:
- Chat participant ECL(chat.ecl) – provides ECL language and docs assistance.
- Tools (declared in package.jsonundercontributes.languageModelToolsand registered insrc/ai/tools.ts):
- ecl-listWorkunits– List recent workunits (currently mock data unless connected API integration is completed).
- ecl-submitSnippet– Submit a small ECL snippet and return a mock WUID.
 
Runtime registration adds each tool to an in-memory registry (toolRegistry) so future prompt engineering and chat flows can surface available tool capabilities without re-reading the manifest. See src/ai/tools.ts for the implementation and TODO markers indicating where to integrate with real HPCC Platform session APIs.
NOTE: These features depend on the VS Code Language Model / Chat APIs which are still evolving. Behavior may change in future VS Code versions.
Copilot Chat Integration
This extension contributes an ECL specific Chat participant (chat.ecl) with commands:
- @ecl /create– Scaffold a new ECL file.
- @ecl /docs <question>– Ask a question answered using the HPCC Systems online language & standard library reference.
- @ecl /meta <question>– Provide questions or guidance that should leverage structural metadata from the currently active ECL editor (module names, exports, records, datasets, functions, services, imports, header comment, and basic size stats). The assistant automatically includes this metadata in the prompt enabling context‑aware refactoring suggestions and explanations.
Example:
@ecl /meta Explain what the exported records are used for and suggest a clearer function name for MyFunc.
If no ECL editor is active, the /meta command will indicate that no metadata is available.
ECL Commands
The following ECL specific commands are available. Note: These commands will not be active until an ECL file has been opened (as this triggers the extension to load). To activate a command either use its associated hotkey or press ctrl/cmd+shift+p and type ECL this will present a filtered list of the ECL specific commands:
Global:
| Command | Shortcut | Description | 
| Syntax Check All Files | shift+F7 | Save All + check syntax of all files. | 
| Syntax Clear | ctrl/cmd+F7 | Clear all previously reported ECL Syntax Check results | 
| Import '.mod' file |  | Import MOD file into workspace | 
| Language Reference Website |  | Opens the ECL language reference website in external browser | 
| Terminal |  | Opens ECL Client Tools Terminal Session | 
Within the ECL Code Editor:
| Command | Shortcut | Description | 
|  Submit | F5 | Submit ECL | 
|  Compile |  | Compile ECL | 
|  Syntax Check | F7 | Save and check syntax of current file | 
| Submit (No Archive) | ctrl/cmd+F5 | Submit raw ECL without creating an archive | 
| Verify ECL Signature |  | Verify ECL Digital Signature | 
| Language Reference Lookup | shift+F1 | For the currently selected text, search the online ECL language reference | 
| Insert Record Definition | ctrl/cmd+R | Fetches record definition for given logical file | 
| Command | Shortcut | Description | 
\n+## Testing
\n+Two layers of automated tests are provided:\n+\n+1. Unit (Vitest): Fast logic tests under test/ (e.g. manifest.test.ts). Run with:\n+ bash\n+   npm run test-run\n+   \n+2. Integration (VS Code host + Mocha): Live extension environment tests under test/integration/. Run with:\n+ bash\n+   npm run test:integration\n+   \n+\n+Run both sequentially:\n+bash\n+npm run test:all\n+\n+\n+Integration tests use @vscode/test-electron to launch an isolated VS Code. Some activation scenarios are skipped if optional dependency extensions (e.g. GordonSmith.observable-js) are not installed in the harness; such tests are marked pending instead of failing. Add new integration suites in test/integration/suite/*.test.ts and keep them focused (assert command registration, language features, etc.).\n+
| Copy as ECL ID | | Copy path as Qualified ECL ID |
Within the Workunit Tree Title Bar:
| Command | Shortcut | Description | 
|  My workunits |  | Toggle between "My" and "All" Workunits | 
|  All workunits |  | Toggle between "My" and "All" Workunits | 
|  Refresh |  | Refresh Tree | 
|  ECL Watch |  | Launch ECL Watch in external browser | 
|  Switch Platform |  | Switch HPCC Platform instance (launch configuration) | 
Within the Workunit Tree:
| Command | Shortcut | Description | 
| Copy WUID |  | Copy workunit ID to clipboard | 
| Abort Workunit |  | Abort running workunit | 
| Delete Workunit |  | Delete completed workunit | 
| Command | Shortcut | Description | 
| Copy as ECL ID |  | Copy path as Qualified ECL ID | 
Within the Status Bar
| Command | Shortcut | Description | 
| Launch Configuration |  | Click to select launch configuration | 
| Target Cluster |  | Click to select target cluster | 
| Pin |  | Pin current launch configuration and target cluster to current document | 
| Client Tools |  | Click to select client tools version | 
Within the Result View
All commands in the Result View are available via context menu.
| Command | Notes | 
| Copy Column as ECL Set | Right Click on Column Header | 
| Copy Row as ECL | Right Click in Result Body | 
| Copy All as ECL | Right Click in Column Header or Result Body | 
Testing
Unit Tests (Vitest)
Purpose: Validate logic (utilities, transformations) quickly without starting a VS Code Extension Host.
Run in watch mode:
npm run test-vitest
One-off with coverage:
npm run test-coverage
Configuration lives in vitest.config.ts (jsdom environment). Avoid importing heavy VS Code APIs directly—wrap them so they can be mocked for unit tests.
Manifest Assertions
test/manifest.test.ts validates that required activation events and core commands are present in package.json without launching VS Code. If full extension‑host integration tests are needed later, a harness (e.g. @vscode/test-electron) can be reintroduced in a future change.
Full Pipeline
Runs lint -> build -> unit tests.
npm test
ECL Settings
The following Visual Studio Code settings are available for the ECL extension. These can be set in user preferences (ctrl/cmd+,) or directly in your current workspace (.vscode/settings.json):
  // Override eclcc auto detection.
  "ecl.eclccPath": ""
  // eclcc arguments.
  "ecl.eclccArgs": [],
  // eclcc syntax check arguments.
  "ecl.eclccSyntaxArgs": [],
  // Write eclcc log file to specified file.
  "ecl.eclccLogFile": ""
  // Run 'eclcc -syntax' on save.
  "ecl.syntaxCheckOnSave": true
  // Run 'eclcc -syntax' on load.
  "ecl.syntaxCheckOnLoad": true
  // Additional folders to use when resolving IMPORT statements.
  "ecl.includeFolders": []
  // Add '-legacy' argument to eclcc.
  "ecl.legacyMode": false
  // Debug level logging (requires restart).
  "ecl.debugLogging": false
  // Show results after submitting a workunit.
  "ecl.WUShowResults": internal | external | disabled
  // Force global 'proxySupport' to 'fallback'
  "ecl.forceProxySupport": false
  // Save file prior to syntax check
  "ecl.saveOnSyntaxCheck": false
  // Save file prior to submission
  "ecl.saveOnSubmit": false
  // Ping interval (secs, -1 to disable)
  "ecl.pingInterval": 5
  // Preferred version of ECL Watch (default v9).
  "ecl.preferredECLWatch": v9 | v5
ECL Launch Settings
Submitting ECL using VS-Code requires specifying the target environment within the VS Code launch.json (pressing F5 will prompt you to auto create a skeleton file if none exists):
// Default ECL Launch Configuration
{
  "name": "localhost",
  "type": "ecl",
  "request": "launch",
  "protocol": "http",
  "serverAddress": "localhost",
  "port": 8010,
  "targetCluster": "hthor",
  "path": "",
  "abortSubmitOnError": true,
  "rejectUnauthorized": true,
  "resultLimit": 100,
  "timeoutSecs": 60,
  "user": "vscode_user",
  "password": ""
}
KEL
KEL is an optional language that can generate ECL.
KEL Commands
The following KEL specific commands are available. Note: These commands will not be active until a KEL file has been opened (as this triggers the extension to load). To activate a command either use its associated hotkey or press ctrl/cmd+shift+p and type KEL this will present a filtered list of the KEL specific commands:
Within the KEL Code Editor:
- Syntax Check [F7] - Save + check syntax of current file.
- Generate ECL [F5] - Save + generate ECL files.
Within the Status Bar
Click on KEL Client Tools Version
- Select Client Tools Version - Select Client Tools Version from available options.
KEL Settings
The following Visual Studio Code settings are available for the KEL extension. These can be set in user preferences (ctrl/cmd+,) or directly in your current workspace (.vscode/settings.json):
  // Java runtime arguments (e.g. -Xmx12G).
  "kel.javaArgs": []
  // Override KEL auto detection
  "kel.kelPath": ""
  // Check syntax on save.
  "kel.syntaxCheckOnSave": true
  // Generated ECL location (Same Folder | Child Folder)."
  "kel.generateLocation": "Same Folder"
  // "Generate ECL on save."
  "kel.generateOnSave": false
  // Check syntax on load.
  "kel.syntaxCheckOnLoad": true
  // Check syntax with KEL grammar (fast)
  "kel.syntaxCheckFromGrammar": false
Building and Debugging the Extension
To set up a development environment for debugging the ECL for VS Code extension:
cd /Some/Dev/Folder/
git clone https://github.com/hpcc-systems/vscode-ecl
cd vscode-ecl
git submodule update --init --recursive
npm install
At which point you can open the vscode-ecl folder within VS Code.
Next start the background build process by pressing ctrl+shift+b (which will run the default build command in .vscode/tasks.json)
At which point you can edit the sources and launch debug sessions via F5 and included launch configurations.
License
Apache-2.0