Language Server Protocol Support for Emacs#
homepage • installation • languages • settings • tutorials • troubleshooting • screenshots • FAQ
- Community Driven
- Fully featured - supports all features in Language Server Protocol v3.14.
- Fast - see performance section.
- Flexible - choose between full-blown IDE with flashy UI or minimal distraction free.
- Easy to configure - works out of the box and automatically upgrades if additional packages are present.
Client for Language Server
(v3.14). lsp-mode aims to
provide IDE-like experience by providing optional integration with the
most popular Emacs packages like
- Non-blocking asynchronous calls
- Real-time Diagnostics/linting via
flycheck (recommended) or
flymakewhen Emacs > 26 (requires flymake>=1.0.5)
- Code completion -
completion-at-point(note that company-lsp is no longer supported).
- Hovers - using lsp-ui
- Code actions - via
lsp-execute-code-action, modeline (recommended) or lsp-ui sideline.
- Code outline - using builtin
- Code navigation - using builtin xref, lsp-treemacs tree views or lsp-ui peek functions.
- Code lens
- Symbol highlights
- Project errors on modeline
- Debugger - dap-mode
- Breadcrumb on headerline
- Helm integration - helm-lsp
- Ivy integration - lsp-ivy
- Consult integration - consult-lsp
- Treemacs integration - lsp-treemacs
- Semantic tokens as defined by LSP 3.16 (compatible language servers include recent development builds of clangd and rust-analyzer)
- which-key integration for better discovery
- System Crafters channel Emacs IDE Videos
- skybert's emacsconf presentation (Java)
- thatwist's ScalaUA Conference presentation (Scala)
- lsp-docker - provide docker image with preconfigured language servers with corresponding emacs configuration.
- company-box -
companyfrontend with icons.
- dap-mode - Debugger
- eglot - An alternative minimal LSP implementation.
- which-key - Emacs package that displays available keybindings in popup
- projectile - Project Interaction Library for Emacs
- emacs-tree-sitter - Faster, fine-grained code highlighting via tree-sitter.
- gccemacs - modified Emacs capable of compiling and running Emacs Lisp as native code.
Contributions are very much welcome!
NOTE Documentation for clients is generated from doc comments in the clients themselves (see lsp-doc.el) and some metadata (see lsp-clients.json) so please submit corrections accordingly.
Support the project#
emacs-lsp organization has more than 20,000 lines of code, to keep all of this working,
we need to implement new features and help the community on a lot of issues.
You can help us keep going and improving it by supporting the project
Here it is a list of the current
lsp-mode members and what they are
primary working on/responsible for.
Scala | Rust
Go | Python MS
lsp-mode core | C++
lsp-mode core | Java
Dart/Flutter | Clojure
C++ | Swift
completions | pwsh
lsp-mode core | iedit
Terraform | Nix
C# | F#