All docsEditor setup

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.

shell
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:

json
{
  "command": "venutian",
  "args": ["lsp"],
  "filetypes": ["venutian"]
}

Neovim

With nvim-lspconfig, register venutian lsp as a client for .ven buffers:

lua
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:

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.