branch: externals/eglot commit ecd334f6466b0a1488735e4cb6d41ab4fa65660f Author: João Távora <joaotav...@gmail.com> Commit: João Távora <joaotav...@gmail.com>
Update README --- README.md | 115 +++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 84 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index a8d1c8b..faf2dea 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,21 @@ Eglot ----- -*E*macs Poly*glot*. An Emacs client to Language Server Protocol servers. +*E*macs Poly*glot*. An Emacs client to [Language Server Protocol][lsp] servers. ``` (add-to-list 'load-path "/path/to/eglot") -(require 'eglot) +(require 'eglot) ; Requires emacs 26! +;; Now find some project file inside some Git-controlled dir M-x eglot ``` -*That's it*. Either this guesses the local LSP program to start for -the language of your choice or it prompts you for such a -thing. Currently, if you have these programs installed, it works -out-of-the-box for: +*That's it*. Either this guesses the LSP executable to start for the +language of your choice, or it prompts you to enter the program. + +If you have these programs installed, `M-x eglot` works out-of-the-box +with: * Javascript's [javascript-typescript-stdio][javascript-typescript-langserver] * Rust's [rls][rls] @@ -25,60 +27,111 @@ server. To skip the guess and always be prompted use `C-u M-x eglot`. # Supported Protocol features -- [x] textDocument/didChange (incremental) -- [x] textDocument/didClose +## General +- [x] initialize +- [x] initalized +- [x] shutdown +- [x] exit +- [ ] $/cancelRequest + +## Window +- [x] window/showMessage +- [x] window/showMessageRequest +- [x] window/logMessage +- [x] telemetry/event + +## Client +- [ ] client/registerCapability +- [ ] client/unregisterCapability + +## Workspace +- [ ] workspace/workspaceFolders (3.6.0) +- [ ] workspace/didChangeWorkspaceFolders (3.6.0) +- [ ] workspace/didChangeConfiguration +- [ ] workspace/configuration (3.6.0) +- [ ] workspace/didChangeWatchedFiles +- [x] workspace/symbol +- [x] workspace/applyEdit + +## Text Synchronization - [x] textDocument/didOpen +- [x] textDocument/didChange (incremental or full) +- [x] textDocument/willSave +- [ ] textDocument/willSaveWaitUntil - [x] textDocument/didSave +- [x] textDocument/didClose -- [ ] textDocument/codeAction +## Diagnostics +- [x] textDocument/publishDiagnostics + +## Language features - [x] textDocument/completion - [ ] completionItem/resolve +- [x] textDocument/hover +- [ ] textDocument/signatureHelp - [x] textDocument/definition +- [ ] textDocument/typeDefinition (3.6.0) +- [ ] textDocument/implementation (3.6.0) +- [x] textDocument/references - [x] textDocument/documentHighlight - [x] textDocument/documentSymbol -- [ ] textDocument/executeCommand -- [ ] textDocument/format -- [x] textDocument/hover +- [ ] textDocument/codeAction +- [ ] textDocument/codeLens +- [ ] codeLens/resolve +- [ ] textDocument/documentLink +- [ ] documentLink/resolve +- [ ] textDocument/documentColor +- [ ] textDocument/colorPresentation (3.6.0) +- [ ] textDocument/formatting +- [ ] textDocument/rangeFormatting +- [ ] textDocument/onTypeFormatting - [x] textDocument/rename -- [x] textDocument/references -- [ ] textDocument/signatureHelp -- [x] workspace/symbol # Differences to lsp-mode.el -This is really beta and currently does a little less than -[lsp-mode.el][emacs-lsp] which is more mature. Though I think -`eglot.el` will eventually beat it, you could be better served with +Eglot is **really beta** and may currently underperform +[lsp-mode.el][emacs-lsp], which is more mature and has a host of +[plugins][emacs-lsp-plugins] for bells and whistles. If you think the minimalist approach +of `eglot.el` is not for you, you could be better served with `lsp-mode.el` for now. User-visible differences: -- Single entry point, `M-x eglot` to enable LSP in a project. - Automatically detects current and future opened files under that +- Single entry point `M-x eglot`, not `M-x eglot-<language>`. Also no + `eglot-<language>` extra packages. +- No "whitelisting" or "blacklisting" directories to languages. `M-x + eglot` starts servers to handle major modes inside a specific + project. Uses Emacs's built-in `project.el` library to discover + projects. Automatically detects current and future opened files under that project and syncs with server. - Easy way to quit/restart a server, just middle/right click on the connection name. - Pretty interactive mode-line section for live tracking of server communication. +- Automatically restarts frequently crashing servers (like RLS). +- Server-initiated edits are confirmed with the user. +- Diagnostics work out-of-the-box (no `flycheck.el` needed). -Differences under the hood: - -- Message parser is much much simpler -- Easier to read and maintain elisp. Yeah I know, subjective... But - judge for yourself. -- No external dependencies apart from Emacs (no `flycheck.el`, no - `projectile.el`, no Cask, etc). -- Uses project.el, flymake.el -- Requires the upcoming emacs 26 +Under the hood: + +- Message parser is much much simpler. +- Easier to read and maintain elisp. Yeah I know, *extremely + subjective*, so judge for yourself. +- About 1k LOC lighter. +- Development doesn't require Cask, just Emacs. +- Project support doesn't need `projectile.el`, uses Emacs's `project.el` +- Requires the upcoming Emacs 26 - Contained in one file -- send `textDocument/didChange` for groups of edits, not one per each - tiny change. +- Sends `textDocument/didChange` for groups of edits, not one per each + tiny change. - Its missing tests! This is *not good* +[lsp]: https://microsoft.github.io/language-server-protocol/ [rls]: https://github.com/rust-lang-nursery/rls [pyls]: https://github.com/palantir/python-language-server [javascript-typescript-langserver]: https://github.com/sourcegraph/javascript-typescript-langserver [emacs-lsp]: https://github.com/emacs-lsp/lsp-mode +[emacs-lsp-plugins]: https://github.com/emacs-lsp