diff options
author | Mathias Fußenegger <mfussenegger@users.noreply.github.com> | 2021-09-26 23:40:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-26 23:40:28 +0200 |
commit | 73280a7987dac01be77f787ab4a5880babdee391 (patch) | |
tree | 7d53f91efeb1afc1ccda7c2be9735fc6c0add47c /runtime/lua/vim/lsp/buf.lua | |
parent | c217766f7c32f17598563b16ef260322ce80bfc9 (diff) | |
download | rneovim-73280a7987dac01be77f787ab4a5880babdee391.tar.gz rneovim-73280a7987dac01be77f787ab4a5880babdee391.tar.bz2 rneovim-73280a7987dac01be77f787ab4a5880babdee391.zip |
feat(lsp): allow subset of CodeActionContext as arg to code_action methods (#15793)
This makes it easier to filter the code actions. For example:
vim.lsp.buf.code_action { only = 'refactor' }
Diffstat (limited to 'runtime/lua/vim/lsp/buf.lua')
-rw-r--r-- | runtime/lua/vim/lsp/buf.lua | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua index 054f7aee04..96a710ee82 100644 --- a/runtime/lua/vim/lsp/buf.lua +++ b/runtime/lua/vim/lsp/buf.lua @@ -466,14 +466,24 @@ local function code_action_request(params) end) end ---- Selects a code action from the input list that is available at the current +--- Selects a code action available at the current --- cursor position. --- ----@param context: (table, optional) Valid `CodeActionContext` object +---@param context table|nil `CodeActionContext` of the LSP specification: +--- - diagnostics: (table|nil) +--- LSP `Diagnostic[]`. Inferred from the current +--- position if not provided. +--- - only: (string|nil) +--- LSP `CodeActionKind` used to filter the code actions. +--- Most language servers support values like `refactor` +--- or `quickfix`. ---@see https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction function M.code_action(context) validate { context = { context, 't', true } } - context = context or { diagnostics = vim.lsp.diagnostic.get_line_diagnostics() } + context = context or {} + if not context.diagnostics then + context.diagnostics = vim.lsp.diagnostic.get_line_diagnostics() + end local params = util.make_range_params() params.context = context code_action_request(params) @@ -481,14 +491,25 @@ end --- Performs |vim.lsp.buf.code_action()| for a given range. --- ----@param context: (table, optional) Valid `CodeActionContext` object +--- +---@param context table|nil `CodeActionContext` of the LSP specification: +--- - diagnostics: (table|nil) +--- LSP `Diagnostic[]`. Inferred from the current +--- position if not provided. +--- - only: (string|nil) +--- LSP `CodeActionKind` used to filter the code actions. +--- Most language servers support values like `refactor` +--- or `quickfix`. ---@param start_pos ({number, number}, optional) mark-indexed position. ---Defaults to the start of the last visual selection. ---@param end_pos ({number, number}, optional) mark-indexed position. ---Defaults to the end of the last visual selection. function M.range_code_action(context, start_pos, end_pos) validate { context = { context, 't', true } } - context = context or { diagnostics = vim.lsp.diagnostic.get_line_diagnostics() } + context = context or {} + if not context.diagnostics then + context.diagnostics = vim.lsp.diagnostic.get_line_diagnostics() + end local params = util.make_given_range_params(start_pos, end_pos) params.context = context code_action_request(params) |