autoload/lsp/completion.vim | 35 ++++++++++++++++++----------------- diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim index 4ab65dd1d954b146fdbddb0ac441774240296983..26dc24a982d7a38cffd852e4a0c8e844401252d7 100644 --- a/autoload/lsp/completion.vim +++ b/autoload/lsp/completion.vim @@ -330,23 +330,30 @@ lspserver.omniCompletePending = false endif enddef -# process the completion documentation -def ShowCompletionDocumentation(cItem: any) - if cItem->empty() || cItem->type() != v:t_dict - return - endif - - # check if completion item is still selected +# Check if completion item is selected +def CheckCompletionItemSel(label: string): bool var cInfo = complete_info() if cInfo->empty() || !cInfo.pum_visible || cInfo.selected == -1 - return + return false endif - var selItem = cInfo.items->get(cInfo.selected, {}) if selItem->empty() || selItem->type() != v:t_dict || selItem.user_data->type() != v:t_dict - || selItem.user_data.label != cItem.label + || selItem.user_data.label != label + return false + endif + return true +enddef + +# Process the completion documentation +def ShowCompletionDocumentation(cItem: any) + if cItem->empty() || cItem->type() != v:t_dict + return + endif + + # check if completion item is still selected + if !CheckCompletionItemSel(cItem.label) return endif @@ -390,13 +397,7 @@ return endif # check if completion item is changed in meantime - cInfo = complete_info() - if cInfo->empty() - || !cInfo.pum_visible - || cInfo.selected == -1 - || cInfo.items[cInfo.selected]->type() != v:t_dict - || cInfo.items[cInfo.selected].user_data->type() != v:t_dict - || cInfo.items[cInfo.selected].user_data.label != cItem.label + if !CheckCompletionItemSel(cItem.label) return endif