Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Auto completion not working with godot language server. #2955

Closed
Khelthal opened this issue Mar 9, 2021 · 9 comments
Closed

Auto completion not working with godot language server. #2955

Khelthal opened this issue Mar 9, 2021 · 9 comments

Comments

@Khelthal
Copy link

Khelthal commented Mar 9, 2021

Result from CocInfo

versions

vim version: NVIM v0.4.4
node version: v15.11.0
coc.nvim version: 0.0.80-9184dcccc4
coc.nvim directory: /home/elias/.vim/plugged/coc.nvim
term: xterm-termite
platform: linux

Log of coc.nvim

2021-03-08T22:51:54.088 INFO (pid:11142) [services] - registered service "languageserver.godot"
2021-03-08T22:51:54.094 INFO (pid:11142) [services] - godot state change: stopped => starting
2021-03-08T22:51:54.095 INFO (pid:11142) [services] - languageserver "languageserver.godot" connecting to 127.0.0.1:6008
2021-03-08T22:51:54.153 INFO (pid:11142) [plugin] - coc.nvim 0.0.80-9184dcccc4 initialized with node: v15.11.0 after 158ms
2021-03-08T22:51:54.201 INFO (pid:11142) [services] - godot state change: starting => running
2021-03-08T22:51:54.209 INFO (pid:11142) [services] - service languageserver.godot started
2021-03-08T22:51:54.883 INFO (pid:11142) [attach] - receive notification: highlight []
2021-03-08T22:51:56.413 INFO (pid:11142) [completion-complete] - Results from: languageserver.godot-1
2021-03-08T22:51:57.165 INFO (pid:11142) [attach] - receive notification: stopCompletion []
2021-03-08T22:51:57.168 INFO (pid:11142) [attach] - receive request: doKeymap [ 'iPGJzPg==0' ]
2021-03-08T22:51:57.171 INFO (pid:11142) [attach] - receive notification: stopCompletion []
2021-03-08T22:51:57.358 INFO (pid:11142) [attach] - receive request: doKeymap [ 'iPGJzPg==0' ]
2021-03-08T22:51:58.208 INFO (pid:11142) [completion-complete] - Results from: languageserver.godot-1
2021-03-08T22:52:02.573 INFO (pid:11142) [attach] - receive notification: showInfo []

Describe the bug

Im getting a problem when I try to use auto completion in the godot language server. Im using godot 3.2.3. Every time that I press Enter to select a completion, it auto-deletes and the output "[coc.nvim] Command: not found" is shown.

Reproduce the bug

  • Create file mini.vim with:

    call plug#begin('~/.vim/plugged')
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    Plug 'habamax/vim-godot'
    call plug#end()
    
    " Config
    set completeopt=menuone,noinsert,noselect
    "highlight Pmenu ctermbg=gray guibg=gray
    set number
    set nowrap
    set tabstop=2
    set shiftwidth=2
    set expandtab
    set encoding=UTF-8
    
    " Coc
    " TextEdit might fail if hidden is not set.
    set hidden
    
    " Some servers have issues with backup files, see #649.
    set nobackup
    set nowritebackup
    
    " Give more space for displaying messages.
    set cmdheight=2
    
    " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
    " delays and poor user experience.
    set updatetime=300
    
    " Don't pass messages to |ins-completion-menu|.
    set shortmess+=c
    
    " Always show the signcolumn, otherwise it would shift the text each time
    " diagnostics appear/become resolved.
    if has("patch-8.1.1564")
      " Recently vim can merge signcolumn and number column into one
      set signcolumn=number
    else
      set signcolumn=yes
    endif
    
    " Use tab for trigger completion with characters ahead and navigate.
    " NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
    " other plugin before putting this into your config.
    inoremap <silent><expr> <TAB>
          \ pumvisible() ? "\<C-n>" :
          \ <SID>check_back_space() ? "\<TAB>" :
          \ coc#refresh()
    inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
    
    function! s:check_back_space() abort
      let col = col('.') - 1
      return !col || getline('.')[col - 1]  =~# '\s'
    endfunction
    
    " Use <c-space> to trigger completion.
    if has('nvim')
      inoremap <silent><expr> <c-space> coc#refresh()
    else
      inoremap <silent><expr> <c-@> coc#refresh()
    endif
    
    " Make <CR> auto-select the first completion item and notify coc.nvim to
    " format on enter, <cr> could be remapped by other vim plugin
    inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
                                  \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
    
    " Use `[g` and `]g` to navigate diagnostics
    " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
    nmap <silent> [g <Plug>(coc-diagnostic-prev)
    nmap <silent> ]g <Plug>(coc-diagnostic-next)
    
    " GoTo code navigation.
    nmap <silent> gd <Plug>(coc-definition)
    nmap <silent> gy <Plug>(coc-type-definition)
    nmap <silent> gi <Plug>(coc-implementation)
    nmap <silent> gr <Plug>(coc-references)
    
    " Use K to show documentation in preview window.
    nnoremap <silent> K :call <SID>show_documentation()<CR>
    
    function! s:show_documentation()
      if (index(['vim','help'], &filetype) >= 0)
        execute 'h '.expand('<cword>')
      elseif (coc#rpc#ready())
        call CocActionAsync('doHover')
      else
        execute '!' . &keywordprg . " " . expand('<cword>')
      endif
    endfunction
    
    " Highlight the symbol and its references when holding the cursor.
    autocmd CursorHold * silent call CocActionAsync('highlight')
    
    " Symbol renaming.
    nmap <leader>rn <Plug>(coc-rename)
    
    " Formatting selected code.
    xmap <leader>f  <Plug>(coc-format-selected)
    nmap <leader>f  <Plug>(coc-format-selected)
    
    augroup mygroup
      autocmd!
      " Setup formatexpr specified filetype(s).
      autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
      " Update signature help on jump placeholder.
      autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
    augroup end
    
    " Applying codeAction to the selected region.
    " Example: `<leader>aap` for current paragraph
    xmap <leader>a  <Plug>(coc-codeaction-selected)
    nmap <leader>a  <Plug>(coc-codeaction-selected)
    
    " Remap keys for applying codeAction to the current buffer.
    nmap <leader>ac  <Plug>(coc-codeaction)
    " Apply AutoFix to problem on the current line.
    nmap <leader>qf  <Plug>(coc-fix-current)
    
    " Map function and class text objects
    " NOTE: Requires 'textDocument.documentSymbol' support from the language server.
    xmap if <Plug>(coc-funcobj-i)
    omap if <Plug>(coc-funcobj-i)
    xmap af <Plug>(coc-funcobj-a)
    omap af <Plug>(coc-funcobj-a)
    xmap ic <Plug>(coc-classobj-i)
    omap ic <Plug>(coc-classobj-i)
    xmap ac <Plug>(coc-classobj-a)
    omap ac <Plug>(coc-classobj-a)
    
    " Remap <C-f> and <C-b> for scroll float windows/popups.
    if has('nvim-0.4.0') || has('patch-8.2.0750')
      nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
      nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
      inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
      inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
      vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
      vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
    endif
    
    " Use CTRL-S for selections ranges.
    " Requires 'textDocument/selectionRange' support of language server.
    nmap <silent> <C-s> <Plug>(coc-range-select)
    xmap <silent> <C-s> <Plug>(coc-range-select)
    
    " Add `:Format` command to format current buffer.
    command! -nargs=0 Format :call CocAction('format')
    
    " Add `:Fold` command to fold current buffer.
    command! -nargs=? Fold :call     CocAction('fold', <f-args>)
    
    " Add `:OR` command for organize imports of the current buffer.
    command! -nargs=0 OR   :call     CocAction('runCommand', 'editor.action.organizeImport')
    
    " Add (Neo)Vim's native statusline support.
    " NOTE: Please see `:h coc-status` for integrations with external plugins that
    " provide custom statusline: lightline.vim, vim-airline.
    set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
    
    " Mappings for CoCList
    " Show all diagnostics.
    nnoremap <silent><nowait> <space>a  :<C-u>CocList diagnostics<cr>
    " Manage extensions.
    nnoremap <silent><nowait> <space>e  :<C-u>CocList extensions<cr>
    " Show commands.
    nnoremap <silent><nowait> <space>c  :<C-u>CocList commands<cr>
    " Find symbol of current document.
    nnoremap <silent><nowait> <space>o  :<C-u>CocList outline<cr>
    " Search workspace symbols.
    nnoremap <silent><nowait> <space>s  :<C-u>CocList -I symbols<cr>
    " Do default action for next item.
    nnoremap <silent><nowait> <space>j  :<C-u>CocNext<CR>
    " Do default action for previous item.
    nnoremap <silent><nowait> <space>k  :<C-u>CocPrev<CR>
    " Resume latest coc list.
    nnoremap <silent><nowait> <space>p  :<C-u>CocListResume<CR>
  • Start neovim with command: vim -u mini.vim

  • Try to use auto completion with a godot file (.gd)

  • The configuration of the godot language server:

    {
      "suggest.maxCompleteItemCount": 10,
      "suggest.defaultSortMethod": "alphabetical",
      "languageserver": {
        "godot": {
            "host": "127.0.0.1",
            "filetypes": ["gdscript"],
            "port": 6008,
            "trace.server": "verbose"
        }
      }
    }

Screenshots

2021-03-08-225813_1920x1080_scrot

2021-03-08-225817_1920x1080_scrot

@chemzqm
Copy link
Member

chemzqm commented Mar 9, 2021

Please provide verbose output from language server.

@fannheyward
Copy link
Member

@chemzqm
Copy link
Member

chemzqm commented Mar 9, 2021

Seems the server send command that not exists, should be fixed by d09f354

Kavantix pushed a commit to Kavantix/coc.nvim that referenced this issue Mar 12, 2021
@avahe-kellenberger
Copy link

I'm having a very similar issue, but the only output in my CocInfo after I attempt a completion is:

2021-04-08T14:38:52.066 INFO (pid:1300958) [attach] - receive notification: highlight []
2021-04-08T14:38:53.181 INFO (pid:1300958) [attach] - receive notification: highlight []
2021-04-08T14:38:53.574 INFO (pid:1300958) [attach] - receive notification: highlight []
2021-04-08T14:38:55.587 INFO (pid:1300958) [attach] - receive notification: highlight []
2021-04-08T14:38:58.513 INFO (pid:1300958) [attach] - receive notification: highlight []
2021-04-08T14:38:59.501 INFO (pid:1300958) [completion-complete] - Results from: languageserver.godot
2021-04-08T14:39:01.856 INFO (pid:1300958) [attach] - receive notification: highlight []
2021-04-08T14:39:03.852 INFO (pid:1300958) [attach] - receive notification: showInfo []

I'm not sure why this would be deleting the suggestion.
Afterward, I can escape to normal mode and u to bring back the completion text that was erased.

@Khelthal
Copy link
Author

Khelthal commented Apr 8, 2021

Try adding this to your init.vim

inoremap <expr> <CR> complete_info().selected != -1 ?
            \ &filetype == "gdscript3" ? (coc#expandable() ?  "\<C-y>" : "\<C-y><Esc>a") : "\<C-y>"
            \ : "\<C-g>u\<CR>"

@avahe-kellenberger
Copy link

Found out after digging through plugins,
it's somehow caused by tmsvg/pear-tree.

@julkip
Copy link

julkip commented May 26, 2021

I am having the same issue using VIM 8.2.2859. I am not using the tmsvg/pear-tree Plugin, but I still have the same issue.
Adding the inoremap to my .vimrc does work for this issue, but creates a whole new issue, that I cannot press Enter at all while in Insert-mode.

@julkip
Copy link

julkip commented May 27, 2021

Funnily enough, when i use neovim 0.4.4 the error still occurs and adding inoremap to my init.vim doesn't help at all, but the Insert-Mode Enter key is also not borked…

@ChenHuaYou
Copy link

Try adding this to your init.vim

inoremap <expr> <CR> complete_info().selected != -1 ?
            \ &filetype == "gdscript3" ? (coc#expandable() ?  "\<C-y>" : "\<C-y><Esc>a") : "\<C-y>"
            \ : "\<C-g>u\<CR>"

many thanks, this work for me

inoremap complete_info().selected != -1 ?
\ &filetype == "gdscript" ? (coc#expandable() ? "<C-y>" : "<C-y>a") : "<C-y>"
\ : "<C-g>u<CR>"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants