Beta Language servers (LSP)

Editora speaks the Language Server Protocol, so with a server installed you get real language smarts. LSP is off by default; turn it on in Settings → LSP.

What you get

FeatureCommandDefault key
Go to definitionlsp.gotoDefinitionM-.
Find referenceslsp.findReferencesM-?
Go to Symbol in Workspacelsp.gotoSymbol(palette)
Hover docslsp.hoverC-c h
Format Documentlsp.formatDocument(palette)
Restart serverslsp.restartServers(palette)

The goto/references/hover commands are also in the editor right-click menu while a server is active, and you can Ctrl/Cmd-click a symbol to jump to its definition. Find references lists results in a browsable References tool window (tool.references), grouped by file with a line and preview. Go to Symbol in Workspace opens a live search over every symbol in the project. Format Document reformats the whole file through the server when it advertises formatting (undoable; palette or the right-click menu), including .json, .css, and .html. Diagnostics appear as inline squiggles, in the Problems tool window (M-8), and as marks on the minimap and scrollbar. Completion is merged into the autocomplete popup. The status bar shows an LSP: <server> segment for managed files, with a loading bar while a server starts.

Two more things ride on a server when it’s active. The Structure tool window builds its outline from the server’s document symbols, so you get a precise hierarchy with real kinds, per-kind icons, and method signatures (it falls back to a fold/TextMate heuristic for non-LSP files). And in a language whose server supports range formatting, Tab snaps the current line’s indentation to the server’s convention.

Servers are auto-detected, never bundled

Editora doesn’t ship language servers. It looks for each one on your PATH (a Settings field can override the command per server) and uses it if present. Around twenty servers are supported:

Each server has its own enable checkbox and a live found/not-found status on the Settings → LSP page, plus a per-server command field with a Browse button.

One-click install

If a server isn’t installed, Editora can fetch it for you. All 21 servers are covered through three channels, picked per server:

Three entry points: an Install… button per server in Settings → LSP, an in-editor banner when you open a file whose server is missing (turn the nudge off with view.toggleInstallPrompts), and the Install: Language Server… picker (install.languageServer). After installing, the server is auto-detected and activates without a restart. Editora never installs the underlying runtimes (Node, Python, Go, …); if one is missing it tells you which to install first.

Workspace roots

A server runs once per workspace root. The root is the active project, else the nearest build marker (pom.xml, package.json, go.mod, Cargo.toml, and so on), else the file’s directory. Files of the same language in one project share a single server.

Finding the server’s binary

A GUI-launched app inherits a stripped PATH that often misses Homebrew, npm, and version-manager directories. Editora rebuilds the PATH from your login shell plus the usual install locations before launching a server, which recovers things like nvm’s per-version node bin. If a server still isn’t found, set its absolute path in Settings. See Troubleshooting for details.

Notes and limits

What’s deferred for now: format-on-save, rename, code actions and quick fixes, document symbols from the server, incremental sync, and a dedicated references tool window. (Whole-file Format Document is supported.) Diagnostics for files that aren’t open are dropped to keep the Problems window focused on what you’re editing.