# IDE & Editor Support
SLANG provides first-class editor support through the **Language Server Protocol** (LSP), **TextMate grammars**, and editor-specific syntax files.
---
## Architecture
```
┌─────────────┐ stdio ┌──────────────┐
│ VS Code │ ◄────────────► │ slang-lsp │
│ Neovim │ │ │
│ Helix │ │ parseWith │
│ Emacs │ │ Recovery() │
│ Zed │ │ analyzeFlow │
│ ... │ │ resolveDeps │
└─────────────┘ └──────────────┘
```
The LSP server (`@riktar/slang-lsp`) runs as a standalone process communicating via **stdio**. It reuses the existing SLANG core:
- `parseWithRecovery()` — error-recovering parser that always returns an AST + error list
- `analyzeFlow()` — static analysis (missing converge, missing budget, unknown agents, missing commit)
- `resolveDeps()` + `detectDeadlocks()` — dependency graph and cycle detection
Any editor with LSP support can connect to `slang-lsp` and get diagnostics, completions, hover, go-to-definition, and document symbols.
---
## Features
| Feature | LSP | VS Code | Vim | Sublime | JetBrains |
|---------|:---:|:-------:|:---:|:-------:|:---------:|
| Syntax highlighting | — | ✅ | ✅ | ✅ | ✅ |
| Bracket matching | — | ✅ | — | — | ✅ |
| Comment toggling (`--`) | — | ✅ | — | — | — |
| Code folding | — | ✅ | — | — | ✅ |
| Snippets (18 patterns) | — | ✅ | — | — | — |
| Real-time diagnostics | ✅ | ✅ | ✅* | — | — |
| Autocompletion | ✅ | ✅ | ✅* | — | — |
| Go-to-definition | ✅ | ✅ | ✅* | — | — |
| Hover documentation | ✅ | ✅ | ✅* | — | — |
| Document outline | ✅ | ✅ | ✅* | — | — |
\* Via LSP client (nvim-lspconfig, coc.nvim, etc.)
---
## VS Code
### Installation
**Option A — From Marketplace** (when published):
Search for "SLANG" in the VS Code Extensions panel and install.
**Option B — From source** (development):
```bash
cd packages/vscode-slang
npm install
npm run build
npx @vscode/vsce package
code --install-extension vscode-slang-0.8.1.vsix
```
### What you get
- **Syntax highlighting** — full TextMate grammar covering all 31 keywords, primitives, `@AgentRef` references, strings with escape sequences, numbers, operators, comments
- **Real-time diagnostics** — parse errors appear inline as you type, with static analysis warnings for missing converge, budget, commit; deadlock detection
- **Autocompletion** — triggers on `@` for agent references (with all declared agents + `@out`, `@all`, `@Human`, `@any`), and on empty lines for all keywords and meta keys
- **Go-to-definition** — `Ctrl+Click` / `Cmd+Click` on `@AgentName` navigates to the agent declaration
- **Hover** — hover over keywords for syntax reference, hover over `@AgentName` for agent metadata (role, model, tools, retry, operation count)
- **Document outline** — `Ctrl+Shift+O` shows the flow structure: flows → agents → operations (stakes, awaits, commits)
- **Snippets** — 18 snippets for rapid development:
| Prefix | Description |
|--------|-------------|
| `flow` | Flow declaration with agent and converge |
| `agent` | Agent with role and model |
| `agent-tools` | Agent with tools |
| `stake` | Produce & send |
| `stake-output` | Stake with output schema |
| `await` | Wait for input |
| `commit` | Accept result |
| `escalate` | Delegate upward |
| `when` | Conditional block |
| `when-else` | Conditional with else |
| `repeat` | Loop until condition |
| `let` | Declare variable |
| `set` | Update variable |
| `converge` | Convergence condition |
| `budget` | Resource limits |
| `deliver` | Post-convergence handler |
| `import` | Import another flow |
| `flow-research` | Full research flow template |
- **Language configuration** — bracket matching (`{}`/`[]`/`()`), auto-closing pairs, auto-indentation on `{`, comment toggling with `--`
---
## Any LSP-compatible editor (Neovim, Emacs, Helix, Zed, etc.)
The SLANG LSP server works with any editor that supports the Language Server Protocol:
```bash
npm install -g @riktar/slang-lsp
```
Then configure your editor to use `slang-lsp` as the language server for `.slang` files (stdio transport).
Neovim (nvim-lspconfig)
```lua
vim.api.nvim_create_autocmd("FileType", {
pattern = "slang",
callback = function()
vim.lsp.start({
name = "slang-lsp",
cmd = { "slang-lsp" },
root_dir = vim.fn.getcwd(),
})
end,
})
```
Helix (~/.config/helix/languages.toml)
```toml
[[language]]
name = "slang"
scope = "source.slang"
file-types = ["slang"]
language-servers = ["slang-lsp"]
comment-token = "--"
[language-server.slang-lsp]
command = "slang-lsp"
```
## Vim/Neovim (syntax only, no LSP)
Copy the syntax files from `editors/vim/`:
```bash
cp editors/vim/syntax/slang.vim ~/.vim/syntax/
cp editors/vim/ftdetect/slang.vim ~/.vim/ftdetect/
```
## Sublime Text
Copy the syntax file to your Sublime packages:
```bash
cp editors/sublime/slang.sublime-syntax ~/Library/Application\ Support/Sublime\ Text/Packages/User/
# Linux: ~/.config/sublime-text/Packages/User/
```
## JetBrains (IntelliJ, WebStorm, PyCharm, etc.)
1. Go to **Settings → Editor → TextMate Bundles**
2. Click **+** and select `editors/jetbrains/` from this repository
3. Restart the IDE