From: shane.xb.qian Date: Mon, 20 Mar 2023 04:58:28 +0000 (+0800) Subject: feature: adding 'LspDiagThis' X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=61bb8966e0f57413a45657af16af5788f81baaa0;p=vim-lsp.git feature: adding 'LspDiagThis' // jump to the diag msg in this/current line // start from current column of current line Signed-off-by: shane.xb.qian --- diff --git a/README.md b/README.md index 43e529c..b65626e 100644 --- a/README.md +++ b/README.md @@ -148,12 +148,13 @@ Command|Description -------|----------- :LspCodeAction|Apply the code action supplied by the language server to the diagnostic in the current line. :LspDiagCurrent|Display the diagnostic message for the current line -:LspDiagFirst|Display the first diagnostic message for the current buffer +:LspDiagFirst|Jump to the first diagnostic message for the current buffer :LspDiagHighlightDisable|Disable diagnostic message highlights :LspDiagHighlightEnable|Enable diagnostic message highlights :LspDiagNext|Jump to the next diagnostic message after the current position :LspDiagPrev|Jump to the previous diagnostic message before the current position :LspDiagShow|Display the diagnostics messages from the language server for the current buffer in a new location list. +:LspDiagThis|Jump to the current diagnostic message in the current line :LspFold|Fold the current file :LspFormat|Format a range of lines in the current file using the language server. The **shiftwidth** and **expandtab** values set for the current buffer are used when format is applied. The default range is the entire file. :LspGotoDeclaration|Go to the declaration of the keyword under cursor diff --git a/autoload/lsp/diag.vim b/autoload/lsp/diag.vim index ebe379c..559217c 100644 --- a/autoload/lsp/diag.vim +++ b/autoload/lsp/diag.vim @@ -350,11 +350,12 @@ export def LspDiagsJump(lspserver: dict, which: string): void # Find the entry just before the current line (binary search) var curlnum: number = line('.') var curcol: number = charcol('.') - for diag in (which == 'next') ? diags : diags->copy()->reverse() + for diag in (which == 'next' || which == 'this') ? diags : diags->copy()->reverse() var lnum = diag.range.start.line + 1 var col = diag.range.start.character + 1 - if (which == 'next' && (lnum > curlnum || lnum == curlnum && col > curcol)) + if (which == 'next' && (lnum > curlnum || lnum == curlnum && col > curcol)) || (which == 'prev' && (lnum < curlnum || lnum == curlnum && col < curcol)) + || (which == 'this' && (lnum == curlnum && col > curcol)) setcursorcharpos(lnum, col) return endif diff --git a/doc/lsp.txt b/doc/lsp.txt index d26b6b4..f1fd209 100644 --- a/doc/lsp.txt +++ b/doc/lsp.txt @@ -84,6 +84,8 @@ The following commands are provided: buffer before the current current position. :LspDiagShow Display the diagnostics messages from the language server for the current buffer in a location list. +:LspDiagThis Jump to the current diagnostic message for the current + buffer in the current line (start from current column). :LspFold Fold the current file :LspFormat Format a range of lines in the current file using the language server. The default range is the entire file. @@ -396,6 +398,10 @@ can map these commands to keys and make it easier to invoke them. can use the Vim location list commands to browse the list. + *:LspDiagThis* +:LspDiagThis Jumps to the location of the diagnostic message in + the current line (start from current column). + *:LspFold* :LspFold Create folds for the current buffer. @@ -765,8 +771,10 @@ the current file in a |location-list-window|. You can use the |:LspDiagFirst| command to jump to the line with the first diagnostic message, the |:LspDiagNext| command to jump to the next nearest line with the diagnostic message, the |:LspDiagPrev| command to jump to the previous nearest line with -the diagnostic message. You can use the |:LspDiagCurrent| command to display -the entire diagnostic message from the language server for the current line. +the diagnostic message, the |:LspDiagThis| command to jump to the diagnostic +message in the current line. You can use the |:LspDiagCurrent| command to +display the entire diagnostic message from the language server for the current +line. By default, the lines with a diagnostic message have a sign placed on them and are highlighted. You can temporarily disable them for the current Vim session diff --git a/plugin/lsp.vim b/plugin/lsp.vim index f2f4aab..0329114 100644 --- a/plugin/lsp.vim +++ b/plugin/lsp.vim @@ -85,6 +85,7 @@ command! -nargs=0 -bar LspDiagHighlightEnable lsp.DiagHighlightEnable() command! -nargs=0 -bar LspDiagNext lsp.JumpToDiag('next') command! -nargs=0 -bar LspDiagPrev lsp.JumpToDiag('prev') command! -nargs=0 -bar LspDiagShow lsp.ShowDiagnostics() +command! -nargs=0 -bar LspDiagThis lsp.JumpToDiag('this') command! -nargs=0 -bar LspFold lsp.FoldDocument() command! -nargs=0 -bar -range=% LspFormat lsp.TextDocFormat(, , ) command! -nargs=0 -bar LspGotoDeclaration lsp.GotoDeclaration(v:false, ) @@ -149,6 +150,7 @@ if has('gui_running') anoremenu L&sp.Diagnostics.First :LspDiagFirst anoremenu L&sp.Diagnostics.Next :LspDiagNext anoremenu L&sp.Diagnostics.Prev :LspDiagPrev + anoremenu L&sp.Diagnostics.This :LspDiagThis if &mousemodel =~ 'popup' anoremenu PopUp.L&sp.Go\ to\ Definition diff --git a/test/clangd_tests.vim b/test/clangd_tests.vim index e38d233..f405a86 100644 --- a/test/clangd_tests.vim +++ b/test/clangd_tests.vim @@ -244,6 +244,9 @@ def g:Test_LspDiag() assert_equal([3, 14], [line('.'), col('.')]) output = execute('LspDiagCurrent')->split("\n") assert_equal("Expected ';' at end of declaration (fix available)", output[0]) + :normal! 0 + :LspDiagThis + assert_equal([3, 14], [line('.'), col('.')]) :LspDiagNext assert_equal([5, 2], [line('.'), col('.')]) :LspDiagNext