1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 05:30:07 +08:00
SpaceVim/docs/layers/language-server-protocol.md
2018-01-19 00:00:53 +08:00

3.8 KiB

title description
SpaceVim language server protocol layer This layers provides language server protocol for vim and neovim

SpaceVim Layers: lsp

Description

This layers adds extensive support for language-server-protocol, This layer is a heavy wallpaper of LanguageClient-neovim (an old fork), The upstream is rewritten by rust.

we also want to include vim-lsp, which is wrote in pure vim script.

the neovim team is going to implement the build-in LSP support, the PR is neovim#6856. and the author of this PR create another plugin tjdevries/nvim-langserver-shim

SpaceVim should works well in different version of vim/neovim, so in the features, the logic of this layer should be:

if has('nvim')
  " use neovim build-in lsp
elseif has('python3')
  " use LanguageClient-neovim
else
  " use vim-lsp
endif

Features

  • Asynchronous calls
  • Code completion (provided by autocomplet layer)
  • Lint on the fly
  • Rename symbol
  • Hover/Get identifer info.
  • Goto definition.
  • Goto reference locations.
  • Workspace/Document symbols query.
  • Formatting.
  • Code Action/Fix.

Note: All these features dependent on the implementation of the language server, please check the list of Language Servers

Install

To use this configuration layer, add call SpaceVim#layers#load('lsp') to your custom configuration file.

Install language server

JavaScript:

npm install -g javascript-typescript-langserver

Python:

pip install --user python-language-server

Configuration

To enable lsp support for a specified filetype, you may need to load this layer with filtypes option, for example:

call SpaceVim#layers#load('lsp',
    \ {
    \ 'filetypes' : ['rust',
                   \ 'typescript',
                   \ 'javascript',
                   \ ],
    \ }

default language server commands:

language server command
javascript ['javascript-typescript-stdio']
haskell ['hie', '--lsp']
c ['clangd']
cpp ['clangd']
html ['html-languageserver', '--stdio']
objc ['clangd']
objcpp ['clangd']
dart ['dart_language_server']
go ['go-langserver', '-mode', 'stdio']
rust ['rustup', 'run', 'nightly', 'rls']
python ['pyls']
php ['php', 'path/to/bin/php-language-server.php']

To override the server command, you may need to use override_cmd option:

call SpaceVim#layers#load('lsp',
    \ {
    \ 'override_cmd' : {
                     \ 'rust' : ['rustup', 'run', 'nightly', 'rls'],
                     \ }
    \ }

Key bindings

Key Binding Description
K / SPC l d show document
SPC l e rename symbol