Syntax highlighting, inline type-checker diagnostics, IntelliSense, a
run-in-terminal command, and Run-and-Debug-panel support for .ig files (the
Ignid programming language), plus a custom file icon.
What it does
- Syntax highlighting — keywords, types, strings (including
${...}interpolation), numbers, comments, function calls/definitions, record/enum type names, field access. - Inline error diagnostics — runs the Ignid type checker whenever a
.igfile is opened or saved, and shows its errors as red squiggles at the correct line. - IntelliSense — autocomplete for keywords, types, every builtin and
std.igfunction (with parameter snippets and a signature shown in the suggestion), plus the current file's ownfn/rec/enumnames and enum members. Snippets for common blocks (fn,start,rec,enum,when,whenelse,loopwhile,loopin,match,try,let,fix) fill in the boilerplate[ ... ]body. - Run in terminal — the ▶ button in the editor title bar (or
F5/Ctrl+F5, or right-click → "Ignid: Run File") saves the file, then compiles and runs it withignid.exein an integrated terminal named "Ignid". Fully interactive (works fine withask()), equivalent to typingignid file.igyourself. - Run and Debug panel — the Debug side panel (
Ctrl+Shift+D) now lists "Ignid" and can launch the active file, streaming its output into the Debug Console with a working Stop button. This is launch-only, not real breakpoint debugging — setting a breakpoint shows it as an unfilled/"unverified" circle and it will not actually pause execution, because that requires the Ignid compiler/runtime itself to emit debug info and support pausing on a line, which doesn't exist yet (a compiler feature, not something this extension can add by itself). It also can't feed keystrokes to a running program'sask()calls — the Debug Console doesn't forward stdin like a real terminal. Use the ▶ "Run File" command instead for anything interactive; use the Debug panel only when you specifically want the Run-and-Debug-panel workflow (e.g. from alaunch.json, or alongside other debugged projects in a multi-root workspace). - A file icon —
.igfiles show a small purple "ig" badge in the file explorer and editor tabs, instead of the generic file icon.
Setup
Install from the VS Code Marketplace by searching for "Ignid", or manually:
- Make sure
checker.exe(orchecker_s11.exe, renamed/copied tochecker.exe, or any build of Ignid'schecker.ig) is on yourPATH, or setignid.checkerPathin your VS Code settings to its full path. - Make sure
ignid.exeis on yourPATH(needed for both the run command and the Debug panel), or setignid.ignidPathto its full path. - Either:
- Run from source (for development): open this
vscode-ignid/folder in VS Code and pressF5to launch an Extension Development Host window with it loaded. - Package and install: run
npx @vscode/vsce packagein this folder to produce a.vsixfile, then in VS Code: Extensions view →...menu → "Install from VSIX...".
- Run from source (for development): open this
Settings
| Setting | Default | Description |
|---|---|---|
ignid.checkerPath |
"checker.exe" |
Path to the Ignid type-checker executable |
ignid.lintOnSave |
true |
Run the checker and show errors on open/save |
ignid.ignidPath |
"ignid.exe" |
Path to the ignid compile-and-run executable, used by "Ignid: Run File" |
How the diagnostics work
checker.ig's error messages include a real line number
([type error] line N: message near TOKEN) — the extension spawns the checker
process, feeds it the current file's path over stdin (matching how the rest of
the Ignid toolchain is invoked), and parses that format out of stderr into VS
Code Diagnostics. There's no column information yet (the checker tracks
positions by line, not line+column), so each error underlines the whole line —
still enough to jump straight to the right spot.
If used files are involved, line numbers are computed against the expanded
source (with used files' content spliced in), so they may not perfectly match
your file for programs that use other modules with errors originating in those
modules.
License
Unlike the core Ignid language/compiler (see the main project's LICENSE file, which disallows redistribution), this extension is provided under the MIT License — the whole point of an editor extension is for it to be shared and installed freely.