From fd933ce1a0e9d03caafbcc9b01dff487cedd6d0d Mon Sep 17 00:00:00 2001 From: Martin Asquino Date: Thu, 29 Oct 2020 18:55:27 +0000 Subject: [PATCH 1/2] Do not send requests/notifications for buffers without a configured server command --- autoload/LanguageClient.vim | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/autoload/LanguageClient.vim b/autoload/LanguageClient.vim index c76b2a186..6710d326c 100644 --- a/autoload/LanguageClient.vim +++ b/autoload/LanguageClient.vim @@ -789,12 +789,26 @@ function! s:SkipSendingMessage() abort return &buftype !=# '' || &filetype ==# '' || expand('%') ==# '' endfunction +function! s:ServerCommandForFiletype(filetype) abort + let s:commands = get(g:, 'LanguageClient_serverCommands', {}) + if !has_key(s:commands, a:filetype) + return v:null + endif + + return s:commands[a:filetype] +endfunction + function! LanguageClient#Call(method, params, callback, ...) abort if s:SkipSendingMessage() " call s:Debug('Skip sending message') return endif + if s:ServerCommandForFiletype(&filetype) is v:null + echo '[LC] Server not configured for ' . &filetype . ', skipping request' + return + endif + let l:id = s:id let s:id = s:id + 1 if a:callback is v:null @@ -825,6 +839,10 @@ function! LanguageClient#Notify(method, params) abort return endif + if s:ServerCommandForFiletype(&filetype) is v:null + return + endif + let l:params = a:params if type(params) == s:TYPE.dict let l:params = extend({ From b2b7c978c721e960fc1c4ca701b829c0795ef529 Mon Sep 17 00:00:00 2001 From: Martin Asquino Date: Thu, 29 Oct 2020 20:04:16 +0000 Subject: [PATCH 2/2] Do not enable autocmds for unhandled filetypes --- autoload/LanguageClient.vim | 23 ++++----------------- plugin/LanguageClient.vim | 40 ++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/autoload/LanguageClient.vim b/autoload/LanguageClient.vim index 6710d326c..07fac5bee 100644 --- a/autoload/LanguageClient.vim +++ b/autoload/LanguageClient.vim @@ -786,29 +786,18 @@ function! s:SkipSendingMessage() abort return v:false endif - return &buftype !=# '' || &filetype ==# '' || expand('%') ==# '' -endfunction - -function! s:ServerCommandForFiletype(filetype) abort - let s:commands = get(g:, 'LanguageClient_serverCommands', {}) - if !has_key(s:commands, a:filetype) - return v:null - endif + let l:commands = get(g:, 'LanguageClient_serverCommands', {}) + let l:has_command = has_key(l:commands, &filetype) - return s:commands[a:filetype] + return !l:has_command || &buftype !=# '' || &filetype ==# '' || expand('%') ==# '' endfunction function! LanguageClient#Call(method, params, callback, ...) abort if s:SkipSendingMessage() - " call s:Debug('Skip sending message') + echo '[LC] Server not configured for filetype ' . &filetype return endif - if s:ServerCommandForFiletype(&filetype) is v:null - echo '[LC] Server not configured for ' . &filetype . ', skipping request' - return - endif - let l:id = s:id let s:id = s:id + 1 if a:callback is v:null @@ -839,10 +828,6 @@ function! LanguageClient#Notify(method, params) abort return endif - if s:ServerCommandForFiletype(&filetype) is v:null - return - endif - let l:params = a:params if type(params) == s:TYPE.dict let l:params = extend({ diff --git a/plugin/LanguageClient.vim b/plugin/LanguageClient.vim index d094899b3..d3a184609 100644 --- a/plugin/LanguageClient.vim +++ b/plugin/LanguageClient.vim @@ -153,25 +153,31 @@ endfunction command! -nargs=* LanguageClientStart :call LanguageClient#startServer() command! LanguageClientStop call LanguageClient#shutdown() -augroup languageClient +function! s:ConfigureAutocmds() + let l:commands = get(g:, 'LanguageClient_serverCommands', {}) + if !has_key(l:commands, &filetype) + " skip setting autocmds if the filetype doesn't have a configured server command + return + endif + + call LanguageClient#handleFileType() + augroup languageClient autocmd! - autocmd FileType * call LanguageClient#handleFileType() - autocmd BufNewFile * call LanguageClient#handleBufNewFile() - autocmd BufEnter * call LanguageClient#handleBufEnter() - autocmd BufWritePost * call LanguageClient#handleBufWritePost() - autocmd BufDelete * call LanguageClient#handleBufDelete() - autocmd TextChanged * call LanguageClient#handleTextChanged() - autocmd TextChangedI * call LanguageClient#handleTextChanged() + autocmd BufNewFile call LanguageClient#handleBufNewFile() + autocmd BufEnter call LanguageClient#handleBufEnter() + autocmd BufWritePost call LanguageClient#handleBufWritePost() + autocmd BufDelete call LanguageClient#handleBufDelete() + autocmd TextChanged call LanguageClient#handleTextChanged() + autocmd TextChangedI call LanguageClient#handleTextChanged() if exists('##TextChangedP') - autocmd TextChangedP * call LanguageClient#handleTextChanged() + autocmd TextChangedP call LanguageClient#handleTextChanged() endif - autocmd CursorMoved * call LanguageClient#handleCursorMoved() - autocmd VimLeavePre * call LanguageClient#handleVimLeavePre() - - autocmd CompleteDone * call LanguageClient#handleCompleteDone() + autocmd CursorMoved call LanguageClient#handleCursorMoved() + autocmd VimLeavePre call LanguageClient#handleVimLeavePre() + autocmd CompleteDone call LanguageClient#handleCompleteDone() if get(g:, 'LanguageClient_signatureHelpOnCompleteDone', 0) - autocmd CompleteDone * + autocmd CompleteDone \ call LanguageClient#textDocument_signatureHelp({}, 's:HandleOutputNothing') endif @@ -192,4 +198,10 @@ augroup languageClient nnoremap (lcn-format-sync) :call LanguageClient_textDocument_formatting_sync() nnoremap (lcn-diagnostics-next) :call LanguageClient_diagnosticsNext() nnoremap (lcn-diagnostics-prev) :call LanguageClient_diagnosticsPrevious() + augroup END +endfunction + +augroup languageClient_fileType + autocmd! + autocmd FileType * call s:ConfigureAutocmds() augroup END