- Add yaml-language-server (Node.js) to Dockerfile stage 3 - Add YAML_LSP_PORT=2090 env var (Dockerfile + ilsp.nomad) - Start yaml-language-server in background thread (_serve_yaml_lsp) - Expose /yaml WebSocket endpoint (same WS→TCP proxy as /python and /bicep) - Load iac_source_catalog.json alongside bicep_modules_catalog.json - Enrich param_completion_items() with descriptions + required flag from IAC source - Required params sorted first (sortText 0_lru_param_0_...) and marked with * - detail field shows * prefix for required params - Update /health to report iac_source_modules + yaml_lsp fields - Rewrite EDITOR_SETUP.md: WebSocket URLs, YAML schemas config for all editors (Helix, Neovim, PyCharm, VS Code) with azure-pipelines + gitea actions schemas - All 35 tests pass
3.6 KiB
3.6 KiB
Editor configs for ilsp.i80.dk
Available endpoints
| Endpoint | Language | Port (internal) |
|---|---|---|
wss://ilsp.i80.dk/python |
Python | 2087 |
wss://ilsp.i80.dk/bicep |
Bicep + LRU modules | 2088 |
wss://ilsp.i80.dk/yaml |
YAML (pipelines, Actions) | 2090 |
VS Code (.vscode/settings.json — recommended)
Install the vscode-lsp-client or use the built-in yaml extension for YAML:
{
"yaml.schemas": {
"https://raw.githubusercontent.com/microsoft/azure-pipelines-vscode/master/service-schema.json": [
"azure-pipelines.yml",
"azure-pipelines*.yml"
],
"https://json.schemastore.org/github-workflow.json": [
".github/workflows/*.yml",
".gitea/workflows/*.yml"
]
},
"yaml.customTags": [],
"yaml.validate": true,
"[yaml]": {
"editor.defaultFormatter": "redhat.vscode-yaml"
}
}
For Python and Bicep in VS Code, the built-in extensions (Pylance, Bicep) are preferred. Use ilsp endpoints if you want i80-specific completions (pypi packages, LRU modules).
Helix (~/.config/helix/languages.toml)
[language-server.ilsp-python]
command = "websocat"
args = ["wss://ilsp.i80.dk/python"]
[language-server.ilsp-bicep]
command = "websocat"
args = ["wss://ilsp.i80.dk/bicep"]
[language-server.ilsp-yaml]
command = "websocat"
args = ["wss://ilsp.i80.dk/yaml"]
[[language]]
name = "python"
language-servers = ["ilsp-python"]
[[language]]
name = "bicep"
file-types = ["bicep", "bicepparam"]
language-servers = ["ilsp-bicep"]
[[language]]
name = "yaml"
file-types = ["yaml", "yml"]
language-servers = ["ilsp-yaml"]
Neovim (~/.config/nvim/lua/lsp.lua)
-- Python: i80 pypi completions
vim.lsp.start({
name = "ilsp-python",
cmd = { "websocat", "wss://ilsp.i80.dk/python" },
filetypes = { "python" },
})
-- Bicep: LRU module completions
vim.lsp.start({
name = "ilsp-bicep",
cmd = { "websocat", "wss://ilsp.i80.dk/bicep" },
filetypes = { "bicep" },
})
-- YAML: Azure Pipelines + Gitea Actions schema
vim.lsp.start({
name = "ilsp-yaml",
cmd = { "websocat", "wss://ilsp.i80.dk/yaml" },
filetypes = { "yaml" },
settings = {
yaml = {
schemas = {
["https://raw.githubusercontent.com/microsoft/azure-pipelines-vscode/master/service-schema.json"] = {
"azure-pipelines.yml", "azure-pipelines*.yml"
},
["https://json.schemastore.org/github-workflow.json"] = {
".github/workflows/*.yml", ".gitea/workflows/*.yml"
},
},
},
},
})
PyCharm / IntelliJ IDEA Ultimate (LSP4IJ plugin)
- Install LSP4IJ from JetBrains Marketplace
- Settings → Languages & Frameworks → Language Servers → +
| Field | Python | Bicep | YAML |
|---|---|---|---|
| Name | ilsp-python |
ilsp-bicep |
ilsp-yaml |
| Server type | External process | External process | External process |
| Command | websocat wss://ilsp.i80.dk/python |
websocat wss://ilsp.i80.dk/bicep |
websocat wss://ilsp.i80.dk/yaml |
| File patterns | *.py |
*.bicep, *.bicepparam |
*.yml, *.yaml |
PyCharm's built-in Python intelligence runs alongside ilsp-python — additive, not replacing.