From ee1d7be40b080bdf1487b9e1b33a1ecfd2f9b34a Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Thu, 27 Oct 2022 22:04:13 -0700 Subject: [PATCH] When displaying the diag popup, validate the line number. Add a test for LspDiagsUpdated autocmd --- autoload/lsp/diag.vim | 6 ++++++ test/unit_tests.vim | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/autoload/lsp/diag.vim b/autoload/lsp/diag.vim index 7be31eb..acd64a5 100644 --- a/autoload/lsp/diag.vim +++ b/autoload/lsp/diag.vim @@ -210,6 +210,12 @@ def ShowDiagInPopup(diag: dict) var dlnum = diag.range.start.line + 1 var ltext = getline(dlnum) var dlcol = byteidx(ltext, diag.range.start.character + 1) + + var lastline = line('$') + if dlnum > lastline + # The line number is outside the last line in the file. + dlnum = lastline + endif if dlcol < 1 # The column is outside the last character in line. dlcol = ltext->len() + 1 diff --git a/test/unit_tests.vim b/test/unit_tests.vim index 5185de4..f59c671 100644 --- a/test/unit_tests.vim +++ b/test/unit_tests.vim @@ -814,6 +814,30 @@ def Test_LspTagFunc() delete('Xtest.c') enddef +# Test for the LspDiagsUpdated autocmd +def Test_LspDiagsUpdated_Autocmd() + g:LspAutoCmd = 0 + autocmd_add([{event: 'User', pattern: 'LspDiagsUpdated', cmd: 'g:LspAutoCmd = g:LspAutoCmd + 1'}]) + silent! edit Xtest.c + sleep 200m + var lines: list =<< trim END + void aFunc(void) + { + return; + } + END + setline(1, lines) + :sleep 1 + WaitForDiags(0) + setline(3, ' return:') + WaitForDiags(1) + setline(3, ' return;') + WaitForDiags(0) + :%bw! + autocmd_delete([{event: 'User', pattern: 'LspDiagsUpdated'}]) + assert_equal(3, g:LspAutoCmd) +enddef + def LspRunTests() :set nomore :set debug=beep -- 2.48.1