From 701c734c916215c23cc17f931588d82fe7ad8a0b Mon Sep 17 00:00:00 2001 From: mattn Date: Sat, 1 Feb 2020 14:17:01 +0900 Subject: [PATCH] Check text_edits is null (#697) * Check text_edits is null Some Language Server return null * Add test for textEdit is null * Check additionalTextEdits is null --- autoload/lsp/ui/vim/completion.vim | 2 +- autoload/lsp/utils/text_edit.vim | 4 ++++ test/lsp/utils/text_edit.vimspec | 12 ++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/autoload/lsp/ui/vim/completion.vim b/autoload/lsp/ui/vim/completion.vim index e9cd7897..186b9e44 100644 --- a/autoload/lsp/ui/vim/completion.vim +++ b/autoload/lsp/ui/vim/completion.vim @@ -102,7 +102,7 @@ function! s:on_complete_done_after() abort endif " apply additionalTextEdits. - if has_key(l:completion_item, 'additionalTextEdits') + if has_key(l:completion_item, 'additionalTextEdits') && !empty(l:completion_item['additionalTextEdits']) let l:saved_mark = getpos("'a") let l:pos = getpos('.') call setpos("'a", l:pos) diff --git a/autoload/lsp/utils/text_edit.vim b/autoload/lsp/utils/text_edit.vim index 5a883a98..48fcdbb3 100644 --- a/autoload/lsp/utils/text_edit.vim +++ b/autoload/lsp/utils/text_edit.vim @@ -43,6 +43,10 @@ function! lsp#utils#text_edit#apply_text_edits(uri, text_edits) abort " ((0, 0), (0, 1), "") - remove first character 'a' " ((0, 4), (0, 5), "") - remove fifth character 'e' " ((0, 2), (0, 3), "") - remove third character 'c' + if empty(a:text_edits) + return + endif + let l:text_edits = sort(deepcopy(a:text_edits), 'sort_text_edit_desc') let l:i = 0 diff --git a/test/lsp/utils/text_edit.vimspec b/test/lsp/utils/text_edit.vimspec index 134e3ab8..02bf9ac6 100644 --- a/test/lsp/utils/text_edit.vimspec +++ b/test/lsp/utils/text_edit.vimspec @@ -587,6 +587,18 @@ Describe lsp#utils#text_edit let l:buffer_text = s:get_text() Assert Equals(l:buffer_text, ['package main', '', 'import java.util.ArrayList;', '', 'public class Main {}', '']) End + + It adds null + let l:text = ['package main', '', 'import java.util.ArrayList;', '', 'public class Main {}'] + call s:set_text(l:text) + + call lsp#utils#text_edit#apply_text_edits( + \ expand('%'), + \ v:null) + + let l:buffer_text = s:get_text() + Assert Equals(l:buffer_text, l:text + ['']) + End End End