eglot-workspace-configuration
can be a function (#967)
C-u M-. lists and completes arbitrary workspace symbols (#131)
A very old request, now made possible by a relatively recent change to
the workspace/symbol
RPC method.
Rework mode-line menus (#792)
New menus help discover Eglot's features and show which of them are
supported by the current server. Menus can be customized away via
eglot-menu-string
, making space in mode-line.
In eglot-server-programs
a plist may be appended to the usual list
of strings passed as command line arguments. The value of its
:initializationOptions
key constructs the corresponding LSP JSON
object. This may be easier than creating a defclass
for a specific
server and specializing eglot-initialization-options
to that class.
Support on-type-formatting (#899)
Provide basic workspace-folders support (#893)
Eglot now advertises project-root
and project-external-roots
as
workspace-folders. (Configuring tags-table-list
sets the external
roots of a simple git project.)
Show project wide diagnosics (#810)
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
command M-x flymake-show-project-diagnostics
will now show all
diagnostics relevant to a workspace.
Support optional completion tags (#797)
A completion-item tag can be used to tell the editor how to render a completion. Presently, one kind of tag exists, denoting its corresponding completion as obsolete.
Support optional diagnostic tags (#794)
A diagnostic tag 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.
The Rust language server is now rust-analyzer by default (#803)
Eglot will now prefer starting "rust-analyzer" to "rls" when it is available. The special support code for RLS has been removed.
- clojure-lsp (#813)
- racket-langserver (#694)
- futhark lsp (#922)
- purescript-language-server (#905)
- Perl::LanguageServer (#952)
Multiple servers supported out-of-box for same major mode (#688)
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)
eglot-ignored-server-capabilities
now correctly spelled (#724)
This user-visible variable used to be spelled
eglot-ignored-server-capabilites
, which is still a valid but
obsolete name.
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.
Code action shortcuts (#411)
M-x eglot-code-actions
accepts an optional action-kind
argument,
specified interactively with C-u
. Other shortcuts call specific
actions directly (eglot-code-action-inline
,
eglot-code-action-extract
, eglot-code-action-rewrite
,
eglot-code-action-organize-imports
and
eglot-code-action-quickfix
). One can create own shortcuts for code
actions with specific a kind by calling eglot-code-actions
from
elisp.
New command eglot-shutdown-server
(#643)
New variable eglot-withhold-process-id
(#722)
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.
- cmake-language-server (#787)
- css-languageserver (#204, #769)
- fortls (#603)
- html-languageserver (#204, #769)
- json-languageserver (#204, #769)
- lua-lsp (#721)
- mint ls (#750)
- pyright (#742)
- vim-language-server (#787)
- yaml-language-server (#751)
- zls (#646)
Support hierarchical symbols in Imenu (#303)
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 eldoc-documentation-strategy
,
eldoc-echo-area-use-multiline-p
and eldoc-prefer-doc-buffer
.
The variables eglot-put-doc-in-help-buffer
and
eglot-auto-display-help-buffer
have been removed.
Column offset calculation is now LSP-conform (#361)
It seems the majority of servers now comply with the language server
specification when it comes to handling non-ASCII texts. Therefore
the default values of eglot-move-to-column-function
and
eglot-current-column-function
have been changed. The documentations
of these variables help to restore the old behavior.
Support workspace/configuration requests (#326)
Also a new section "Per-project server configuration" in the README.md should answer some faq's in this regard.
Thanks a lot to Felicián Németh, Ingo Lohmar, and everyone else who helped out!
Take over Company configuration (#324)
Similar to what was already the case with Flymake, Eldoc and Xref, use
just the backend that can do something useful in Eglot,
company-capf
. See eglot-stay-out-of
to opt out of this.
Among other things, consider LSP's "filterText" cookies, which enables a kind of poor-man's flex-matching for some backends.
Support LSP's "goto declaration/implementation/typeDefinition" (#302)
New option eglot-send-changes-idle-time
(#258)
Prevent Eldoc flicker when moving around (#198)
Show large docs in help buffer instead of echo area by default (#198)
Also add two new customization variables
eglot-put-doc-in-help-buffer
and eglot-auto-display-help-buffer
.
You can turn it off now in buffers managed by Eglot.
Run connection hooks with proper directory local variables (#196)
This fixes issues with suspiciously empty didChangeConfiguration
messages that are supposed to communicate parameters from a
directory-set eglot-workspace-configuration
.
Fix completion sorting (#190)
No longer try to add Eglot's facilities to existing facilities in these two domains.
Add brief context after xref-find-references
when available (#52)
Use Flymake from GNU ELPA (#178)
Support snippet completions (#50)
Use yasnippet.el
for this, if it is installed.
Implement workspace/didChangeConfiguration
(#29)
Handle experimental/unknown server methods gracefully (#39)
Accept functions as entries in eglot-server-programs
(#63)
CONTACT
in the (MAJOR-MODE . CONTACT)
association in
eglot-server-programs
can now be a function of no arguments
producing any value previously valid for contact. Functions can be
interactive on non-interactive.
Snappier completions that don't hinder typing (#61)
Consider :triggerCharacters
in company completion (#80)
Prefer ccls over cquery for C/C++ (#94)
eglot-ignored-server-capabilites
is more user-friendly (#126)
Implement asynchronous server connection (#68)
A new defcustom eglot-sync-connect
controls this feature.
Work by Michał K.
Prompt for server in eglot-shutdown
(#73)
Add support for the Eclipse JDT language server (#63)
Add the ability to move to LSP-precise columns (#124)
Some servers like clangd
follow the spec very closely here.
Fix a potential security issue fontifying LSP doc (#154)
#44, #48, #54, #58, #64, #74, #81, #82, #86, #87, #83, #93, #100, #115, #120, #121, #126, #138, #144, #158, #160, #167
The :autoport
symbol in the server incovation is replaced
dynamically by a local port believed to be vacant, so that the ensuing
TCP connection finds a listening server.