From 4e66029526f45129fc42f24b8a19b4e75cce3935 Mon Sep 17 00:00:00 2001 From: lighttiger2505 Date: Wed, 10 Jun 2020 07:22:35 +0900 Subject: [PATCH] Update get lsp omni completion items See https://github.com/lighttiger2505/deoplete-vim-lsp/issues/18 --- autoload/deoplete_vim_lsp.vim | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/autoload/deoplete_vim_lsp.vim b/autoload/deoplete_vim_lsp.vim index 3281376..a6a7354 100644 --- a/autoload/deoplete_vim_lsp.vim +++ b/autoload/deoplete_vim_lsp.vim @@ -9,36 +9,33 @@ func! deoplete_vim_lsp#request(server_name, opt, ctx) abort endfunc function! s:completor(server_name, opt, ctx) abort + let l:position = lsp#get_position() call lsp#send_request(a:server_name, { \ 'method': 'textDocument/completion', \ 'params': { \ 'textDocument': lsp#get_text_document_identifier(), - \ 'position': lsp#get_position(), + \ 'position': l:position, \ }, - \ 'on_notification': function('s:handle_completion', [a:server_name, a:opt, a:ctx]), + \ 'on_notification': function('s:handle_completion', [a:server_name, l:position, a:opt, a:ctx]), \ }) endfunction -function! s:handle_completion(server_name, opt, ctx, data) abort +function! s:handle_completion(server_name, position, opt, ctx, data) abort if lsp#client#is_error(a:data) || !has_key(a:data, 'response') || !has_key(a:data['response'], 'result') return endif - " for register vim-lsp managed user data - let l:result = a:data['response']['result'] - if type(l:result) == type([]) - let l:items = copy(l:result) - elseif type(l:result) == type({}) - let l:items = copy(l:result['items']) - else - let l:items = [] - endif + let l:options = { + \ 'server': a:server_name, + \ 'position': a:position, + \ 'response': a:data['response'], + \ } + let g:deoplete#source#vim_lsp#_items = lsp#omni#get_vim_completion_items(l:options)['items'] - " pass to deoplete reference variable and call completion - let g:deoplete#source#vim_lsp#_items = map(l:items, 'lsp#omni#get_vim_completion_item(v:val, a:server_name)') let g:deoplete#source#vim_lsp#_done = 1 let l:ctx = a:ctx let g:deoplete#source#vim_lsp#_context = l:ctx + if index(['i', 'ic', 'ix'], mode()) >= 0 call deoplete#auto_complete() endif