diff --git a/autoload/LanguageClient.vim b/autoload/LanguageClient.vim index c76b2a18..07fac5be 100644 --- a/autoload/LanguageClient.vim +++ b/autoload/LanguageClient.vim @@ -786,12 +786,15 @@ function! s:SkipSendingMessage() abort return v:false endif - return &buftype !=# '' || &filetype ==# '' || expand('%') ==# '' + let l:commands = get(g:, 'LanguageClient_serverCommands', {}) + let l:has_command = has_key(l:commands, &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 diff --git a/plugin/LanguageClient.vim b/plugin/LanguageClient.vim index d094899b..d3a18460 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