]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Add support for specifying a range to the LspCodeAction command
authorYegappan Lakshmanan <yegappan@yahoo.com>
Fri, 11 Nov 2022 16:07:52 +0000 (08:07 -0800)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Fri, 11 Nov 2022 16:07:52 +0000 (08:07 -0800)
autoload/lsp/lsp.vim
autoload/lsp/lspserver.vim
plugin/lsp.vim
test/unit_tests.vim

index e9025ce91f3a3aa47b1d51e6d310acf39a9af939..da4e56d9f45f0f6424dd70b894a11f3f1deb4666 100644 (file)
@@ -861,14 +861,14 @@ enddef
 
 # Perform a code action
 # Uses LSP "textDocument/codeAction" request
-export def CodeAction()
+export def CodeAction(line1: number, line2: number)
   var lspserver: dict<any> = CurbufGetServerChecked()
   if lspserver->empty()
     return
   endif
 
   var fname: string = @%
-  lspserver.codeAction(fname)
+  lspserver.codeAction(fname, line1, line2)
 enddef
 
 # Perform a workspace wide symbol lookup
index 4dd7fc37cd38a882c5d5de9c0a04409dcb64b5ae..2d8094236b3a8febc3e1203dac4536f61db10720 100644 (file)
@@ -1277,7 +1277,8 @@ enddef
 
 # Request: "textDocument/codeAction"
 # Param: CodeActionParams
-def CodeAction(lspserver: dict<any>, fname_arg: string)
+def CodeAction(lspserver: dict<any>, fname_arg: string, line1: number,
+               line2: number)
   # Check whether LSP server supports code action operation
   if !lspserver.caps->has_key('codeActionProvider')
        || (lspserver.caps.codeActionProvider->type() == v:t_bool
@@ -1291,15 +1292,16 @@ def CodeAction(lspserver: dict<any>, fname_arg: string)
   var fname: string = fnamemodify(fname_arg, ':p')
   var bnr: number = fname_arg->bufnr()
   var r: dict<dict<number>> = {
-                 start: {line: line('.') - 1, character: charcol('.') - 1},
-                 end: {line: line('.') - 1, character: charcol('.') - 1}}
+                 start: {line: line1 - 1, character: 0},
+                 end: {line: line2 - 1, character: charcol([line2, '$']) - 1}}
   params->extend({textDocument: {uri: util.LspFileToUri(fname)}, range: r})
   var d: list<dict<any>> = []
-  var lnum = line('.')
-  var diagInfo: dict<any> = diag.GetDiagByLine(lspserver, bnr, lnum)
-  if !diagInfo->empty()
-    d->add(diagInfo)
-  endif
+  for lnum in range(line1, line2)
+    var diagInfo: dict<any> = diag.GetDiagByLine(lspserver, bnr, lnum)
+    if !diagInfo->empty()
+      d->add(diagInfo)
+    endif
+  endfor
   params->extend({context: {diagnostics: d, triggerKind: 1}})
 
   var reply = lspserver.rpc('textDocument/codeAction', params)
index 936fdc3bc22c5e618304f2c18d6caad12a489a98..4e06d0f385e927d6ee5d4681d235c30075f8c447 100644 (file)
@@ -102,7 +102,7 @@ command! -nargs=0 -bar -range=% LspFormat lsp.TextDocFormat(<range>, <line1>, <l
 command! -nargs=0 -bar LspOutgoingCalls lsp.OutgoingCalls()
 command! -nargs=0 -bar LspIncomingCalls lsp.IncomingCalls()
 command! -nargs=0 -bar LspRename lsp.Rename()
-command! -nargs=0 -bar LspCodeAction lsp.CodeAction()
+command! -nargs=0 -bar -range LspCodeAction lsp.CodeAction(<line1>, <line2>)
 command! -nargs=? -bar LspSymbolSearch lsp.SymbolSearch(<q-args>)
 command! -nargs=0 -bar LspHover lsp.Hover()
 command! -nargs=0 -bar LspSelectionExpand lsp.SelectionExpand()
index 9f4593b238c8930d5fbbf1956d3435ccdc876645..46f92e658d84d6cb97db9334d3b110d339935a0a 100644 (file)
@@ -25,7 +25,7 @@ var lspServers = [{
       args: ['--background-index', '--clang-tidy']
   }]
 call LspAddServer(lspServers)
-echomsg system($'{lspServers[0].path} --version')
+echomsg systemlist($'{lspServers[0].path} --version')
 
 g:LSPTest = true