From f9c99b57a6bb119d12f3a6376833906903302949 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Fri, 11 Nov 2022 08:07:52 -0800 Subject: [PATCH] Add support for specifying a range to the LspCodeAction command --- autoload/lsp/lsp.vim | 4 ++-- autoload/lsp/lspserver.vim | 18 ++++++++++-------- plugin/lsp.vim | 2 +- test/unit_tests.vim | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index e9025ce..da4e56d 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -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 = CurbufGetServerChecked() if lspserver->empty() return endif var fname: string = @% - lspserver.codeAction(fname) + lspserver.codeAction(fname, line1, line2) enddef # Perform a workspace wide symbol lookup diff --git a/autoload/lsp/lspserver.vim b/autoload/lsp/lspserver.vim index 4dd7fc3..2d80942 100644 --- a/autoload/lsp/lspserver.vim +++ b/autoload/lsp/lspserver.vim @@ -1277,7 +1277,8 @@ enddef # Request: "textDocument/codeAction" # Param: CodeActionParams -def CodeAction(lspserver: dict, fname_arg: string) +def CodeAction(lspserver: dict, 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, fname_arg: string) var fname: string = fnamemodify(fname_arg, ':p') var bnr: number = fname_arg->bufnr() var r: dict> = { - 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> = [] - var lnum = line('.') - var diagInfo: dict = diag.GetDiagByLine(lspserver, bnr, lnum) - if !diagInfo->empty() - d->add(diagInfo) - endif + for lnum in range(line1, line2) + var diagInfo: dict = 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) diff --git a/plugin/lsp.vim b/plugin/lsp.vim index 936fdc3..4e06d0f 100644 --- a/plugin/lsp.vim +++ b/plugin/lsp.vim @@ -102,7 +102,7 @@ command! -nargs=0 -bar -range=% LspFormat lsp.TextDocFormat(, , , ) command! -nargs=? -bar LspSymbolSearch lsp.SymbolSearch() command! -nargs=0 -bar LspHover lsp.Hover() command! -nargs=0 -bar LspSelectionExpand lsp.SelectionExpand() diff --git a/test/unit_tests.vim b/test/unit_tests.vim index 9f4593b..46f92e6 100644 --- a/test/unit_tests.vim +++ b/test/unit_tests.vim @@ -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 -- 2.48.1