autoload/lsp/symbol.vim | 2 +- test/clangd_tests.vim | 25 +++++++++++++++++++++++++ diff --git a/autoload/lsp/symbol.vim b/autoload/lsp/symbol.vim index bcd547a33200419de42352aa6e27c427aa5b1d16..c64e6e64bc5dd1e9cef86c039325ede2fb99453b 100644 --- a/autoload/lsp/symbol.vim +++ b/autoload/lsp/symbol.vim @@ -777,7 +777,7 @@ # Restore the cursor to the location where the command was invoked setpos('.', save_curpos) - if result > 0 + if result > 0 && symTblFiltered->len() > 0 # A symbol is selected in the popup menu # Set the previous cursor location mark. Instead of using setpos(), m' is diff --git a/test/clangd_tests.vim b/test/clangd_tests.vim index b084e8618728056f79378e1caf0f7d9ae06500a5..dc3eeee8a7ca2603f0555573f7ad07806e0710b2 100644 --- a/test/clangd_tests.vim +++ b/test/clangd_tests.vim @@ -1548,8 +1548,11 @@ g:WaitForServerFileLoad(2) redraw! cursor(4, 1) + var save_completeopt = &completeopt + set completeopt+=noselect,noinsert feedkeys("A\\\", 'xt') assert_equal(' printf(', getline('.')) + &completeopt = save_completeopt :%bw! enddef @@ -1761,6 +1764,28 @@ assert_equal([], signs) g:LspOptionsSet({autoHighlightDiags: true}) signs = sign_getplaced('%', {group: '*'})[0].signs assert_equal([1, 3], [signs->len(), signs[0].lnum]) + + :%bw! +enddef + +def g:Test_DocumentSymbol() + :silent! edit Xdocsymbol.c + sleep 200m + var lines: list =<< trim END + void DocSymFunc1(void) + { + } + END + setline(1, lines) + g:WaitForServerFileLoad(0) + redraw! + + v:errmsg = '' + :LspDocumentSymbol + sleep 50m + feedkeys("x\", 'xt') + popup_clear() + assert_equal('', v:errmsg) :%bw! enddef