Language Support
Jotain gives every programming language the same baseline the moment its buffer opens — no language server required:- Completion — in-buffer completion via corfu + cape (dabbrev, file, keyword).
- Diagnostics — on-the-fly checking via flymake.
- Documentation — echo-area docs via eldoc.
- Navigation — xref, imenu, tree-sitter code folding, and a breadcrumb header line.
- Formatting on save — via apheleia, where a formatter is configured (below).
- Editing hygiene — editorconfig, indentation detection (dtrt-indent), and snippets (tempel).
PATH (Jotain resolves servers from
the project’s own devenv/environment, not from this config), eglot starts
automatically and upgrades completion, documentation, navigation, and
diagnostics to semantic LSP, and adds go-to-definition into dependencies,
find-references, rename, code actions, and workspace-symbol search. Debugging is
provided by dape for the languages with a DAP adapter below.
The table lists the language-specific wiring on top of that baseline. It is the
declared standard from the language registry; the live, ground-truth matrix
(actual mode routing and which servers are bundled/available) is produced by
nix build .#lang-eval-matrix, and a live end-to-end LSP probe by
nix build .#lang-eval-live.
Notes: ᵉ marks a server set by an explicit
eglot-server-programs override in init-prog.el (the rest are eglot’s built-in defaults). Live-probed ✓ marks the curated subset checked end-to-end by .#lang-eval-live. Tree-sitter ✓ means a grammar backs the major mode (all grammars ship with the distribution). This page is generated from etc/lang-eval/jotain-lang-registry.el — edit the registry, not this file, then run just docs-refresh-lang-matrix.