LanguageServer-php-neovim icon indicating copy to clipboard operation
LanguageServer-php-neovim copied to clipboard

Undefined variable: g:LanguageClient_serverCommands

Open cprn opened this issue 7 years ago • 3 comments

Hi there,

1st of all, this wrapper is awesome and saves tons of time and this issue is really minor.

It seems the g:LanguageClient_serverCommands variable is being set too late therefore function that sets the bindings described in :help LanguageClient doesn't work and opening any buffer complains about missing variable. Calling same function after the buffer opens works fine. Can you somehow register the server commands earlier and, if not, can you recommend other general condition for detecting whether the server will run for given buffer or not?

Testing vimrc (please note the if statement):

" modeline {
" vim:set ft=vim sw=4 ts=4 sts=4 et tw=78 foldmarker={,} foldlevel=0 foldmethod=marker nowrap:
" }

" vim-plug + plugins {
    call plug#begin('~/tmp/testvim')
    Plug 'autozimu/LanguageClient-neovim',  {'branch': 'next', 'do': 'bash install.sh'}
    Plug 'roxma/LanguageServer-php-neovim', {'for': 'php', 'do': 'php ~/bin/composer install && php ~/bin/composer run-script parse-stubs'}
    call plug#end()
" }

" copied from `:help LanguageClient` {
    function LC_maps()
      if has_key(g:LanguageClient_serverCommands, &filetype)
        nnoremap <buffer> <silent> K :call LanguageClient#textDocument_hover()<cr>
        nnoremap <buffer> <silent> gd :call LanguageClient#textDocument_definition()<CR>
        nnoremap <buffer> <silent> <leader>rn :call LanguageClient#textDocument_rename()<CR>
      endif
    endfunction

    autocmd FileType * call LC_maps()
" }

Error message:

Error detected while processing function LC_maps:
line    1:
E121: Undefined variable: g:LanguageClient_serverCommands
E116: Invalid arguments for function has_key
E15: Invalid expression: has_key(g:LanguageClient_serverCommands, &filetype)
Press ENTER or type command to continue

Calling it after the buffer opens works fine:

:call LC_maps()

I'll cross post this issue on LanguageClient tracker as I'm not sure where it belongs. Maybe they can just change documentation or the way server commands register.

cprn avatar Oct 16 '18 15:10 cprn

You may need to add let g:LanguageClient_serverCommands = {} in your vimrc

roxma avatar Oct 17 '18 09:10 roxma

An empty dictionary? Doesn't LanguageClient_registerServerCommands() create it? After the buffer opens same condition works perfectly fine and I'm not setting g:LanguageClient_serverCommands anywhere myself.

cprn avatar Oct 17 '18 11:10 cprn

Doesn't LanguageClient_registerServerCommands() create it?

It does. But the code is executed in ftplugin/php.vim, which may not be executed before autocmd FileType * call LC_maps(). Read :help ftplugin for more information.

roxma avatar Oct 18 '18 03:10 roxma