Skip to content
easl

Docs Reference

Language servers

Install the language servers easl uses for hover, definitions, references and outlines, and tell it where to find one.

All docs pages

Code tiles answer hover, Go to Definition (⌃⌘J), Find References (⌃⌘R) and Outline (⌃⌘O) from a language server. easl runs its own servers: one per language and project, started when a code tile first needs it, stopped after 5 minutes without requests, at most 4 at once.

Without a server, navigation still works from text search: Go to Definition takes the lines that declare the name, Find References lists the word matches, and Outline lists declarations from the syntax tree. The panel says it’s text search, and where easl looked for a server.

Install

Install the servers for the languages you use:

Language Server Install
Swift sourcekit-lsp Comes with Xcode or the Command Line Tools
Python pyright npm install -g pyright
TypeScript, JavaScript typescript-language-server npm install -g typescript-language-server typescript@5
Go gopls go install golang.org/x/tools/gopls@latest
Rust rust-analyzer rustup component add rust-analyzer

typescript-language-server needs typescript@5: TypeScript 7 has no tsserver.

How easl finds a server

Apps started from the Dock get a minimal PATH, so easl looks through your login shell, in this order:

  1. The path in EASL_LSP_<LANGUAGE>, if set: EASL_LSP_SWIFT, EASL_LSP_PYTHON, EASL_LSP_TYPESCRIPT, EASL_LSP_GO, EASL_LSP_RUST.
  2. The command on your login shell’s PATH.
  3. nvim’s mason (~/.local/share/nvim/mason/bin), and ~/go/bin for gopls.
  4. rustup which rust-analyzer, for rust-analyzer.

A server anywhere else (Zed’s, a custom build) needs the variable, for example in ~/.zprofile:

export EASL_LSP_RUST=/path/to/rust-analyzer

easl looks again 30 seconds after a miss, so a server you install while easl runs is picked up without a restart.

Projects

A server’s project root is the nearest project marker above the file (Package.swift, pyproject.toml, tsconfig.json or package.json, go.mod, Cargo.toml, …), never above the board’s folder.

Swift: easl runs sourcekit-lsp with background indexing off, so opening a code tile never starts a swift build in your repository. Definitions and references come from the index your own builds write; an empty answer says so.