To install this package, run in Emacs:
M-x package-install RET eglot RET
Eglot ("Emacs Polyglot") is an Emacs LSP client that stays out of your way. Typing M-x eglot should be enough to get you started, but here's a little info (see the accompanying README.md or the URL for more). M-x eglot starts a server via a shell command guessed from `eglot-server-programs', using the current major mode (for whatever language you're programming in) as a hint. If it can't guess, it prompts you in the minibuffer for these things. Actually, the server does not need to be running locally: you can connect to a running server via TCP by entering a <host:port> syntax. If the connection is successful, you should see an `eglot' indicator pop up in your mode-line. More importantly, this means that current *and future* file buffers of that major mode *inside your current project* automatically become \"managed\" by the LSP server. In other words, information about their content is exchanged periodically to provide enhanced code analysis using `xref-find-definitions', `flymake-mode', `eldoc-mode', `completion-at-point', among others. To "unmanage" these buffers, shutdown the server with M-x eglot-shutdown. To start an eglot session automatically when a foo-mode buffer is visited, you can put this in your init file: (add-hook 'foo-mode-hook 'eglot-ensure)
Some LSP servers report diagnostics for all files in the current
workspace. Flymake has as of version 1.2.1 the option to show
diagnostics from buffers other than the currently visited one. The
M-x flymake-show-project-diagnostics will now show all
diagnostics relevant to a workspace.
A [completion-item tag][completiontag] can be used to tell the editor how to render a completion. Presently, one kind of tag exists, denoting its corresponding completion as obsolete.
A [diagnostic tag][diagnostictag] can indicate either "unused or unnecessary code" or "deprecated or obsolete code". Following the rendering suggestions in the protocol, we fade out unnecessary code and strike-through deprecated code.
Eglot will now prefer starting "rust-analazyer" to "rls" when it is available. The special support code for RLS has been removed.
In practice, this removes the need for Eglot to "officially" bless one server over another. Thanks to Felicián Németh for the original idea.
Thanks to Brian Cully for the minimalist approach.
(also thanks to Felipe Lema who conducted many early experiments in [#463][github#463])
eglot-ignored-server-capabilitiesnow correctly spelled ([#724][github#724])
This user-visible variable used to be spelled
eglot-ignored-server-capabilites, which is still a valid but
This is activated by a new customization option
eglot-extend-to-xref, which defaults to nil.
Thanks to Michael Livshin for the investigation an elegant solution.
M-x eglot-code-actions accepts an optional
specified interactively with
C-u. Other shortcuts call specific
actions directly (
eglot-code-action-quickfix). One can create own shortcuts for code
actions with specific a kind by calling
If non-nil, Eglot will not send the Emacs process id to the language server. This can be useful when using docker to run a language server.
Thanks to Ingo Lohmar for the original implementation.
Such sources include as LSP's signature, hover and also the Flymake
diagnostic messages. They can all be presented in the echo area
(space permitting), or via
C-h .. For now, composition of different
sources can be customized using