From c32aa6f225114c2959c34252ec4d98008bd6a45b Mon Sep 17 00:00:00 2001 From: Shidong Wang Date: Tue, 5 Oct 2021 23:17:41 +0800 Subject: [PATCH] fix(`lsp`): fix lsp support in nvim Use LanguageClient-neovim for old neovim --- autoload/SpaceVim/layers/lsp.vim | 8 ++-- autoload/SpaceVim/logger.vim | 2 +- autoload/SpaceVim/lsp.vim | 42 +++++++++++++++++++- autoload/SpaceVim/plugins/a.vim | 2 +- autoload/SpaceVim/plugins/projectmanager.vim | 2 +- 5 files changed, 48 insertions(+), 8 deletions(-) diff --git a/autoload/SpaceVim/layers/lsp.vim b/autoload/SpaceVim/layers/lsp.vim index 690946e63..70a0c908d 100644 --- a/autoload/SpaceVim/layers/lsp.vim +++ b/autoload/SpaceVim/layers/lsp.vim @@ -86,12 +86,12 @@ function! SpaceVim#layers#lsp#plugins() abort endif elseif SpaceVim#layers#isLoaded('autocomplete') && get(g:, 'spacevim_autocomplete_method') ==# 'coc' " nop - elseif has('nvim-0.4.3') - " use neovim build-in lsp - elseif has('nvim') + elseif has('nvim-0.4.3') && $ENABLE_NVIM043LSP call add(plugins, ['bfredl/nvim-lspmirror', {'merged' : 0}]) call add(plugins, ['bfredl/nvim-lspext', {'merged' : 0}]) - call add(plugins, ['shougo/deoplete-lsp', {'merged' : 0}]) + elseif has('nvim') + call add(plugins, ['autozimu/LanguageClient-neovim', + \ { 'merged': 0, 'if': has('python3'), 'build' : 'bash install.sh' }]) else call add(plugins, ['prabirshrestha/async.vim', {'merged' : 0}]) call add(plugins, ['prabirshrestha/vim-lsp', {'merged' : 0}]) diff --git a/autoload/SpaceVim/logger.vim b/autoload/SpaceVim/logger.vim index ac63b74e0..56674cce4 100644 --- a/autoload/SpaceVim/logger.vim +++ b/autoload/SpaceVim/logger.vim @@ -6,7 +6,7 @@ " License: GPLv3 "============================================================================= -if $SPACEVIM_LUA && has('nvim') +if $SPACEVIM_LUA && has('nvim-0.5.0') function! SpaceVim#logger#info(msg) abort lua require("spacevim.logger").info( \ require("spacevim").eval("a:msg") diff --git a/autoload/SpaceVim/lsp.vim b/autoload/SpaceVim/lsp.vim index 0ae5612d5..8dabf0dc3 100644 --- a/autoload/SpaceVim/lsp.vim +++ b/autoload/SpaceVim/lsp.vim @@ -151,7 +151,7 @@ elseif SpaceVim#layers#isLoaded('autocomplete') && get(g:, 'spacevim_autocomplet function! SpaceVim#lsp#references() abort call CocAction('jumpReferences') endfunction -elseif has('nvim-0.4.3') +elseif has('nvim-0.4.3') && $ENABLE_NVIM043LSP function! SpaceVim#lsp#show_doc() abort lua require('lsp.plugin') \ .client.request('textDocument/hover', @@ -191,6 +191,46 @@ elseif has('nvim-0.4.3') " @todo languageclient do not support refactor endfunction elseif has('nvim') + " use LanguageClient-neovim + function! SpaceVim#lsp#reg_server(ft, cmds) abort + let g:LanguageClient_serverCommands[a:ft] = copy(a:cmds) + endfunction + + function! SpaceVim#lsp#show_doc() abort + call LanguageClient_textDocument_hover() + endfunction + + function! SpaceVim#lsp#go_to_def() abort + call LanguageClient_textDocument_definition() + endfunction + + function! SpaceVim#lsp#go_to_typedef() abort + call LanguageClient_textDocument_typeDefinition() + endfunction + + function! SpaceVim#lsp#go_to_impl() abort + call LanguageClient_textDocument_implementation() + endfunction + + function! SpaceVim#lsp#rename() abort + call LanguageClient_textDocument_rename() + endfunction + + function! SpaceVim#lsp#references() abort + call LanguageClient_textDocument_references() + endfunction + + function! SpaceVim#lsp#go_to_declaration() abort + call LanguageClient_textDocument_declaration() + endfunction + + function! SpaceVim#lsp#documentSymbol() + call LanguageClient_textDocument_documentSymbol() + endfunction + + function! SpaceVim#lsp#refactor() abort + " @todo languageclient do not support refactor + endfunction else " use vim-lsp function! SpaceVim#lsp#reg_server(ft, cmds) abort diff --git a/autoload/SpaceVim/plugins/a.vim b/autoload/SpaceVim/plugins/a.vim index 78db7cdc9..b6de7ff5c 100644 --- a/autoload/SpaceVim/plugins/a.vim +++ b/autoload/SpaceVim/plugins/a.vim @@ -11,7 +11,7 @@ set cpo&vim scriptencoding utf-8 -if $SPACEVIM_LUA && has('nvim') +if $SPACEVIM_LUA && has('nvim-0.5.0') function! SpaceVim#plugins#a#alt(request_parse, ...) abort lua require("spacevim.plugin.a").alt( \ require("spacevim").eval("a:request_parse"), diff --git a/autoload/SpaceVim/plugins/projectmanager.vim b/autoload/SpaceVim/plugins/projectmanager.vim index 79677779c..aaa681ba0 100644 --- a/autoload/SpaceVim/plugins/projectmanager.vim +++ b/autoload/SpaceVim/plugins/projectmanager.vim @@ -8,7 +8,7 @@ -if $SPACEVIM_LUA && has('nvim') +if $SPACEVIM_LUA && has('nvim-0.5.0') function! SpaceVim#plugins#projectmanager#complete_project(ArgLead, CmdLine, CursorPos) abort return luaeval('require("spacevim.plugin.projectmanager").complete(' \ .'require("spacevim").eval("a:ArgLead"),'