Editor setup
Connect the pure Venutian language server, started with the lsp command, to VS Code, Neovim, Zed and Helix.
venutian lsp starts Venutian's own language server, a long running process that speaks the Language Server Protocol over stdio. It is written in Venutian itself, and it currently answers initialize, textDocument/didOpen, textDocument/didChange, textDocument/hover and textDocument/completion: opening or editing a .ven file gets you live diagnostics from the real compiler front end, not a guess from a syntax file.
venutian lsp
The server reads requests from stdin and writes responses to stdout, so any editor that can spawn a process and speak LSP over its stdio pipes can use it directly. Point your editor's generic LSP client at the venutian binary with lsp as its one argument, filtered to .ven files.
VS Code
Install a generic LSP client extension, or write a minimal extension that registers a language for .ven and starts a client:
{
"command": "venutian",
"args": ["lsp"],
"filetypes": ["venutian"]
}
Neovim
With nvim-lspconfig, register venutian lsp as a client for .ven buffers:
vim.lsp.start({
name = "venutian",
cmd = { "venutian", "lsp" },
root_dir = vim.fs.dirname(vim.fs.find({ "venutian.json" }, { upward = true })[1]),
})
Set the .ven filetype first, either with a ftdetect rule or vim.filetype.add, so the client only attaches to Venutian files.
Zed
Zed's languages extension mechanism expects a language definition plus a language server binary. Point its language server entry at venutian, with lsp as the launch argument, the same shape as any other stdio based server Zed supports.
Helix
Add an entry to languages.toml:
[language-server.venutian-lsp]
command = "venutian"
args = ["lsp"]
[[language]]
name = "venutian"
file-types = ["ven"]
language-servers = ["venutian-lsp"]
Syntax highlighting without the language server
Every editor above can also highlight .ven files from a plain grammar, independent of the language server: keywords are the words listed in the language tour (make, shape, use, when, otherwise, repeat, attempt, rescue, raise, choose, is, and the rest), :: starts a line comment, and string literals use double quotes with {} template interpolation. Venutian's own build time highlighter, used across this documentation, draws directly from the same keyword list the compiler's lexer does, so the two never drift apart.
See the CLI for every other venutian subcommand, and getting started for installing venutian itself.