diff --git a/autoload/ddc_vim_lsp.vim b/autoload/ddc_vim_lsp.vim index 14b1609..d7cb592 100644 --- a/autoload/ddc_vim_lsp.vim +++ b/autoload/ddc_vim_lsp.vim @@ -8,14 +8,22 @@ function! ddc_vim_lsp#_callback(server, position, id, data) abort \ 'position': a:position, \ 'response': a:data['response'], \ } - let lspitems = lsp#omni#get_vim_completion_items(l:options)['items'] + let completionResult = lsp#omni#get_vim_completion_items(l:options) + let startcol = completionResult['startcol'] + let lspitems = completionResult['items'] + let isIncomplete = ( \ type(a:data['response']['result']) == 4 \ && has_key(a:data['response']['result'], 'isIncomplete') \ ) ? \ a:data['response']['result']['isIncomplete'] : v:false - call ddc#callback(a:id, {'items': lspitems, 'isIncomplete': isIncomplete}) + call ddc#callback(a:id, { + \ 'items': lspitems, + \ 'isIncomplete': isIncomplete, + \ 'startcol': startcol, + \ 'currentcol': col('.'), + \}) endfunction function! ddc_vim_lsp#request(server_name, id) abort diff --git a/denops/@ddc-sources/vim-lsp.ts b/denops/@ddc-sources/vim-lsp.ts index fbecaef..c193911 100644 --- a/denops/@ddc-sources/vim-lsp.ts +++ b/denops/@ddc-sources/vim-lsp.ts @@ -33,11 +33,18 @@ export class Source extends BaseSource { args.onCallback(id) as Promise<{ items: DdcItem[]; isIncomplete: boolean; + startcol: number; + currentcol: number; }>, args.denops.call("ddc_vim_lsp#request", lspservers[0], id), ]); return { - items: payload.items, + items: payload.items.map((elem: DdcItem) => { + elem.word = elem.word.slice( + payload.currentcol - payload.startcol, + ); + return elem; + }), isIncomplete: payload.isIncomplete, }; }