docs/layers/language-server-protocol.md
This layers adds extensive support for language-server-protocol. By default, this layer use following language server client implementations:
Note: All these features depend on the implementation of the language server, please check the list of Language Servers
To use this configuration layer, update your custom configuration file with:
[[layers]]
name = "lsp"
Ada
After installing AdaCore's GNAT Studio, add the directory containing ada_language_server to your PATH variable.
For instance, if the GNAT Studio 2020 was installed, ada_language_server is present by default in
/opt/GNAT/2020/libexec/gnatstudio/als.
Bash
npm i -g bash-language-server
JavaScript:
npm install -g javascript-typescript-langserver
Python:
pip install --user python-language-server
julia:
The LanguageServer package must be installed in Julia (0.6 or greater), i.e.
julia> Pkg.clone("https://github.com/JuliaEditorSupport/LanguageServer.jl")
With new package system in Julia 0.7 and above, we have a package mode in Julia REPL.
in REPL, hit ] to enter the package management mode, then add LanguageServer to install the package.
PureScript
npm install -g purescript-language-server
Vue:
npm install vue-language-server -g
css:
npm install -g vscode-css-languageserver-bin
ruby:
gem install solargraph
Elm:
npm install -g @elm-tooling/elm-language-server
npm install -g elm elm-test elm-format
vim
npm install -g vim-language-server
>=0.5.0)If you are using nvim(>=0.5.0). You need to use enabled_clients to specific the language servers.
for example:
[[layers]]
name = 'lsp'
enabled_clients = ['vimls', 'clangd']
To override the command of client, you may need to use override_client_cmds option:
[[layers]]
name = "lsp"
enabled_clients = ['vimls', 'clangd']
[layers.override_client_cmds]
vimls = ["vim-language-server", "--stdio"]
<0.5.0)To enable lsp support for a specified filetype, you may need to load this layer with filetypes option, for example:
[[layers]]
name = "lsp"
filetypes = [
"rust",
"javascript"
]
default language server commands:
| language | server command |
|---|---|
ada | ['ada_language_server'] |
c | ['clangd'] |
cpp | ['clangd'] |
crystal | ['scry'] |
css | ['css-languageserver', '--stdio'] |
dart | ['dart_language_server'] |
elm | ['elm-language-server'] |
go | ['gopls'] |
haskell | ['hie', '--lsp'] |
html | ['html-languageserver', '--stdio'] |
javascript | ['typescript-language-server', '--stdio'] |
javascriptreact | ['typescript-language-server', '--stdio'] |
julia | ['julia', '--startup-file=no', '--history-file=no', '-e', 'using LanguageServer; server = LanguageServer.LanguageServerInstance(STDIN, STDOUT, false); server.runlinter = true; run(server);'] |
objc | ['clangd'] |
objcpp | ['clangd'] |
php | ['php', 'path/to/bin/php-language-server.php'] |
purescript | ['purescript-language-server', '--stdio'] |
python | ['pyls'] |
ruby | ['solargraph', 'stdio'] |
reason | ['ocaml-language-server'] |
rust | ['rustup', 'run', 'nightly', 'rls'] |
sh | ['bash-language-server', 'start'] |
typescript | ['typescript-language-server', '--stdio'] |
typescriptreact | ['typescript-language-server', '--stdio'] |
vim | ['vim-language-server', '--stdio'] |
vue | ['vls'] |
To override the server command, you may need to use override_cmd option:
[[layers]]
name = "lsp"
filetypes = [
"rust",
"javascript"
]
[layers.override_cmd]
rust = ["rustup", "run", "nightly", "rls"]
| Key Binding | Description |
|---|---|
K / SPC l d | show document |
SPC l e | rename symbol |
if the checkers layer is not loaded, these key bindings will be added:
| Key | description |
|---|---|
SPC e c | clear errors |
SPC e n | jump to the position of next error |
SPC e N | jump to the position of previous error |
SPC e p | jump to the position of previous error |
SPC e l | display a list of all the errors |
SPC e L | display a list of all the errors and focus the errors buffer |