WARD/EN Directive Language
Language support for WARD/EN salvage directives (.warden) in Visual Studio Code: diagnostics, completion, hover, signature help, go to definition, find references, rename, document and workspace symbols, and semantic highlighting.
Everything language-aware comes from the language server that ships with the game. It is the same language service the in-game Workbench uses, so the editor reports exactly what the game will: syntax and semantic errors, include resolution, and whether the drone's installed hardware provides each capability a directive needs.
Requirements
- WARD/EN installed. The extension has no language server of its own.
- Launch the game once. On every launch it records where its language server lives, and the extension reads that record. If the record is missing, set
warden.game.path to the installation: the WARDEN.app bundle on macOS, or the folder holding WARDEN.exe (Windows) or warden (Linux).
No Node.js installation is needed. The server runs on the runtime bundled with the game.
Working on a directive
Use Workbench → Export in the game to produce a warden-project file that carries your current fit and the wreck's site names, unpack it into a folder, and open that folder in VS Code. A workspace is a folder of .warden files plus warden.json; the entry file holds language 2; and on start, and other files are modules reached through include. Pack the folder back into a project file and import it in the Workbench during preparation. Imports are validated and never rewrite your source, and a dispatched mission keeps its own frozen snapshot regardless of later edits.
Without warden.json the server assumes main.warden, no target fit and no site names.
Formatting is not provided: the canonical printer drops comments, and the Workbench does not format either.
Colours
The extension maps the language's semantic token types (keyword, sensor, action, variable, parameter, function, number, string, enum, enumMember, comment, invalid) to standard TextMate scopes. Your theme decides the colours. To single out sensing and action builtins, target support.function.sensor.warden and support.function.action.warden in editor.tokenColorCustomizations.
Settings
| Setting |
Purpose |
warden.game.path |
The game installation, when the extension cannot find it by itself. |
warden.server.command |
Executable for a custom server. Only used with warden.server.args. |
warden.server.args |
Arguments for a custom server command; replaces the whole command. |
warden.server.checkout |
Developers only: a WARD/EN source checkout. The server then runs from it with Node 22.13 or later. |
warden.trace.server |
off, messages or verbose tracing of the protocol in the "WARD/EN Language Server" output channel. |
Commands: WARD/EN: Restart Language Server and WARD/EN: Show Language Server Location.
How the server is found
In order: warden.server.args, then warden.game.path, then warden.server.checkout, then the registration the game writes at launch (tooling.json in its user-data folder: ~/Library/Application Support/WARDEN on macOS, %APPDATA%\WARDEN on Windows, ~/.config/WARDEN on Linux). The game's executable is started with ELECTRON_RUN_AS_NODE=1 and the bundled server script, and speaks the Language Server Protocol over stdio.
Any other LSP client can run the same command for .warden files.
Development
npm install
Press F5 to run the extension in an Extension Development Host, then open a folder of .warden files. To package and install locally:
npx vsce package
code --install-extension warden-dsl-0.1.0.vsix
License
MIT. The extension is a thin client; the language server and the game are separate, proprietary software.
Releasing
Releases are made by the Publish workflow when a version tag is pushed:
npm version minor # or patch / major: bumps package.json and creates the v… tag
git push --follow-tags
The workflow packages one .vsix, publishes it to the Visual Studio Marketplace, to Open VSX when an OVSX_PAT secret exists, and attaches it to a GitHub release. It needs a VSCE_PAT repository secret: an Azure DevOps personal access token with the Marketplace "Manage" scope for the halden publisher. Update CHANGELOG.md before tagging.