Iron LSP
Real-time language intelligence for .iron files in VSCode, Neovim, and Zed. Diagnostics that match the compiler exactly — never a divergence between what your editor flags and what ironc produces.
What you get
ironc check, byte-identical..iron file in the project.ironc fmt.Editor extensions
The Iron installer (~/.iron/bin/ironls) ships the language server. Install one of the editor extensions below, and your editor will discover and spawn it automatically.
VSCode
Search "Iron Language Support" in the Marketplace, or install from the .vsix bundled with each release.
Neovim
Built-in LSP client + the Iron filetype plugin. Drop the snippet from the Neovim README into your config.
Neovim setupZed
Search "Iron LSP" in the Zed extensions panel. The extension downloads ironls from the matching release and verifies its SHA-256.
Configuration
ironls binaryironls locally and want your editor to use it instead of the bundled release binary, set the iron_lsp_path override:
- VSCode:
"iron-lsp.serverPath"insettings.json - Neovim: pass
cmd = { "/path/to/ironls" }when callingvim.lsp.start - Zed:
"lsp": { "iron-lsp": { "binary": { "path": "/path/to/ironls" } } }
ironls version range. If your binary falls outside the range, the extension refuses to spawn it and shows a notification — your project never silently runs against an incompatible server.iron_lsp_log_level to debug for verbose output. Each editor exposes the LSP stderr stream through its standard logs panel — use it when diagnosing startup or version-mismatch issues.The parity guarantee
Iron's LSP isn't a parallel implementation of the language — it links the compiler frontend (iron_compiler) directly as a static library. Every diagnostic span, every error code, every type lookup comes from the same code path that ironc uses. That is the core promise: what your editor flags, the compiler flags. CI runs a byte-identical comparison on every commit to ensure they never drift.