6 August 2020
LSP Mode Demo
by Chris Cave-Ayland
Context
RSEs often need to work with multiple programming languages. The Language Server Protocol (originally from Visual Studio Code) was designed to allow multiple language backends to provide a consistent interface to code completion, refactoring, jumping to symbol definitions, syntax highlighting, error messages etc. The lsp-mode package bring the power of LSP to the emacs world.
Meetup Notes
- Talk website: https://cc-a.github.io/lsp-mode-demo
- Defines an open standard for communication between an IDE/editor and an external service implementing programming assistance
- Multiple languages can have a relatively consistent interface (e.g. keybindings)
- Developed by MS as part of VSCode but an open standard and widely adopted
- Reduces implementation effort from n×m to n+m (n language servers, m editors)
- It’s been very successful, supports a large number of languages, and in some cases multiple server implementations for the same language. Tables: languages, editors
- Aside: if you use spacemacs, add the
lsp
layer plus whichever language layers you need (spacemacs develop
branch only). Likewise Doom
emacs has an lsp
layer, and a +lap
option for the debugger
layer.
Demonstration
Config file
Start the demo emacs config by using the config file provided here.
- The config file shows some use-package commands in comments to install dependencies
- use-package has been configured with hooks for python-mode and f90-mode
- Config file configures
- Company
- flycheck
- lsp-mode and lsp-ui (for pop-ups, hovers, minibuffer)
Python demonsration
- Open demo.py from the repository
- Errors and warnings are shown inline the extreme right hand side of the buffer, in what is know as the
sideline
- If you have installed an lsp server for the language, you’ll see a message about the server starting when you open a buffer
lsp-mode
is used for completion (try typing datetime.
followed by TAB
)
- Completions are documented in a hover
- Opening the brackets creates a minibuffer with the function documentation
- you can format the code using lsp-formatter
- you can jump to definition
ctrl
.
(right?)
- Chris demonstrated a more advance, opinionated config shown at the bottom of the config file. This some options for:
- Smaller documentation popups
- Hover text in sideline
- Disabling auto-display of documentation
Fortran demonsration
- Open demo.f90 from the repository
- Similar features to Python are available
- Fortran features are a subset of what is available with Python
- Fortran has a language server written in Python
Other questions / discussion
- lsp runs locally, it doesn’t need of the internet! It typically uses the introspection in each language.
- lsp needs of an external server installed for each language. You can install the ones you like.
- there are ways to have it for different environments, but normally you need the python language server in that env. Some possibilities are:
eglot
is a lightweight alternative to lsp-mode
- The debugger server looks cool (
dap-mode
)!
Resources
Ideas for future sessions
use-package
- Emacs “distributions” e.g. Spacemacs, Doom Emacs
- TRAMP
tags: