Language Server Protocol Support for Emacs#
homepage • installation • languages • settings • tutorials • troubleshooting • screenshots • FAQ
Why?#
- 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.
Overview#
Client for Language Server
Protocol
(v3.14). lsp-mode aims to
provide IDE-like experience by providing optional integration with the
most popular Emacs packages like company
, flycheck
and projectile
.
- Non-blocking asynchronous calls
- Real-time Diagnostics/linting via
flycheck (recommended) or
flymake
when Emacs > 26 (requires flymake>=1.0.5) - Code completion -
company-capf
/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
imenu
or
helm-imenu
- Code navigation - using builtin xref, lsp-treemacs tree views or lsp-ui peek functions.
- Code lens
- Symbol highlights
- Formatting
- 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
- iedit
- dired
- ido
Presentations/demos#
- System Crafters channel Emacs IDE Videos
- skybert's emacsconf presentation (Java)
- thatwist's ScalaUA Conference presentation (Scala)
See also#
- lsp-docker - provide docker image with preconfigured language servers with corresponding emacs configuration.
- company-box -
company
frontend with icons. - dap-mode - Debugger
integration for
lsp-mode
. - 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#
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#
The 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
Members#
Here it is a list of the current lsp-mode
members and what they are
primary working on/responsible for.
totbwf F# |
brotzeit Rust |
dsyzling Scala |
kurnevsky Scala | Rust |
seagle0128 Go | Python MS |
sebastiansturm lsp-mode core | C++ |
vibhavp lsp-mode core |
yyoncho lsp-mode core | Java |
ericdallo Dart/Flutter | Clojure |
danielmartin C++ | Swift |
kiennq completions | pwsh |
nbfalcon lsp-mode core | iedit |
psibi Terraform | Nix |
razzmatazz C# | F# |
jcs090218 lsp-mode core |