break: remove lsp code actions (#1866)
see :help telescope.changelog-1866 for more information
This commit is contained in:
@@ -382,18 +382,6 @@ builtin.lsp_type_definitions = require("telescope.builtin.lsp").type_definitions
|
||||
---@field trim_text boolean: trim results text (default: false)
|
||||
builtin.lsp_implementations = require_on_exported_call("telescope.builtin.lsp").implementations
|
||||
|
||||
--- Lists any LSP actions for the word under the cursor which can be triggered with `<cr>`
|
||||
---@param opts table: options to pass to the picker
|
||||
---@field timeout number: timeout for the sync call (default: 10000)
|
||||
builtin.lsp_code_actions = require_on_exported_call("telescope.builtin.lsp").code_actions
|
||||
|
||||
--- Lists any LSP actions for a given range, that can be triggered with `<cr>`
|
||||
---@param opts table: options to pass to the picker
|
||||
---@field timeout number: timeout for the sync call (default: 10000)
|
||||
---@field start_line number: where the code action starts (default: handled by :'<,'>Telescope lsp_range_code_actions)
|
||||
---@field end_line number: where the code action ends (default: handled by :'<,'>Telescope lsp_range_code_actions)
|
||||
builtin.lsp_range_code_actions = require_on_exported_call("telescope.builtin.lsp").range_code_actions
|
||||
|
||||
--- Lists LSP document symbols in the current buffer
|
||||
--- - Default keymaps:
|
||||
--- - `<C-l>`: show autocompletion menu to prefilter your query by type of symbol you want to see (i.e. `:variable:`)
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
local channel = require("plenary.async.control").channel
|
||||
|
||||
local action_state = require "telescope.actions.state"
|
||||
local actions = require "telescope.actions"
|
||||
local conf = require("telescope.config").values
|
||||
local entry_display = require "telescope.pickers.entry_display"
|
||||
local finders = require "telescope.finders"
|
||||
local make_entry = require "telescope.make_entry"
|
||||
local pickers = require "telescope.pickers"
|
||||
local strings = require "plenary.strings"
|
||||
local utils = require "telescope.utils"
|
||||
|
||||
local lsp = {}
|
||||
@@ -162,211 +158,6 @@ lsp.document_symbols = function(opts)
|
||||
end)
|
||||
end
|
||||
|
||||
lsp.code_actions = function(opts)
|
||||
local params = vim.F.if_nil(opts.params, vim.lsp.util.make_range_params(opts.winnr))
|
||||
local lnum = vim.api.nvim_win_get_cursor(opts.winnr)[1]
|
||||
|
||||
params.context = {
|
||||
diagnostics = vim.lsp.diagnostic.get_line_diagnostics(opts.bufnr, lnum - 1),
|
||||
}
|
||||
|
||||
local results_lsp, err = vim.lsp.buf_request_sync(
|
||||
opts.bufnr,
|
||||
"textDocument/codeAction",
|
||||
params,
|
||||
vim.F.if_nil(opts.timeout, 10000)
|
||||
)
|
||||
|
||||
if err then
|
||||
utils.notify("builtin.lsp_code_actions", {
|
||||
msg = err,
|
||||
level = "ERROR",
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
if not results_lsp or vim.tbl_isempty(results_lsp) then
|
||||
utils.notify("builtin.lsp_document_symbols", {
|
||||
msg = "No results from textDocument/codeAction",
|
||||
level = "INFO",
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
local idx = 1
|
||||
local results = {}
|
||||
local widths = {
|
||||
idx = 0,
|
||||
command_title = 0,
|
||||
client_name = 0,
|
||||
}
|
||||
|
||||
for client_id, response in pairs(results_lsp) do
|
||||
if response.result then
|
||||
local client = vim.lsp.get_client_by_id(client_id)
|
||||
|
||||
for _, result in pairs(response.result) do
|
||||
local entry = {
|
||||
idx = idx,
|
||||
command_title = result.title:gsub("\r\n", "\\r\\n"):gsub("\n", "\\n"),
|
||||
client = client,
|
||||
client_name = client and client.name or "",
|
||||
command = result,
|
||||
}
|
||||
|
||||
for key, value in pairs(widths) do
|
||||
widths[key] = math.max(value, strings.strdisplaywidth(entry[key]))
|
||||
end
|
||||
|
||||
table.insert(results, entry)
|
||||
idx = idx + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if #results == 0 then
|
||||
utils.notify("builtin.lsp_document_symbols", {
|
||||
msg = "No code actions available",
|
||||
level = "INFO",
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
local displayer = entry_display.create {
|
||||
separator = " ",
|
||||
items = {
|
||||
{ width = widths.idx + 1 }, -- +1 for ":" suffix
|
||||
{ width = widths.command_title },
|
||||
{ width = widths.client_name },
|
||||
},
|
||||
}
|
||||
|
||||
local function make_display(entry)
|
||||
return displayer {
|
||||
{ entry.value.idx .. ":", "TelescopePromptPrefix" },
|
||||
{ entry.value.command_title },
|
||||
{ entry.value.client_name, "TelescopeResultsComment" },
|
||||
}
|
||||
end
|
||||
|
||||
-- If the text document version is 0, set it to nil instead so that Neovim
|
||||
-- won't refuse to update a buffer that it believes is newer than edits.
|
||||
-- See: https://github.com/eclipse/eclipse.jdt.ls/issues/1695
|
||||
-- Source:
|
||||
-- https://github.com/neovim/nvim-lspconfig/blob/486f72a25ea2ee7f81648fdfd8999a155049e466/lua/lspconfig/jdtls.lua#L62
|
||||
local function fix_zero_version(workspace_edit)
|
||||
if workspace_edit and workspace_edit.documentChanges then
|
||||
for _, change in pairs(workspace_edit.documentChanges) do
|
||||
local text_document = change.textDocument
|
||||
if text_document and text_document.version and text_document.version == 0 then
|
||||
text_document.version = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
return workspace_edit
|
||||
end
|
||||
|
||||
--[[
|
||||
-- actions is (Command | CodeAction)[] | null
|
||||
-- CodeAction
|
||||
-- title: String
|
||||
-- kind?: CodeActionKind
|
||||
-- diagnostics?: Diagnostic[]
|
||||
-- isPreferred?: boolean
|
||||
-- edit?: WorkspaceEdit
|
||||
-- command?: Command
|
||||
--
|
||||
-- Command
|
||||
-- title: String
|
||||
-- command: String
|
||||
-- arguments?: any[]
|
||||
--]]
|
||||
local transform_action = opts.transform_action
|
||||
or function(action)
|
||||
-- Remove 0 -version from LSP codeaction request payload.
|
||||
-- Is only run on the "java.apply.workspaceEdit" codeaction.
|
||||
-- Fixed Java/jdtls compatibility with Telescope
|
||||
-- See fix_zero_version commentary for more information
|
||||
local command = (action.command and action.command.command) or action.command
|
||||
if command ~= "java.apply.workspaceEdit" then
|
||||
return action
|
||||
end
|
||||
local arguments = (action.command and action.command.arguments) or action.arguments
|
||||
action.edit = fix_zero_version(arguments[1])
|
||||
return action
|
||||
end
|
||||
|
||||
local execute_action = opts.execute_action
|
||||
or function(action, offset_encoding)
|
||||
if action.edit or type(action.command) == "table" then
|
||||
if action.edit then
|
||||
vim.lsp.util.apply_workspace_edit(action.edit, offset_encoding)
|
||||
end
|
||||
if type(action.command) == "table" then
|
||||
vim.lsp.buf.execute_command(action.command)
|
||||
end
|
||||
else
|
||||
vim.lsp.buf.execute_command(action)
|
||||
end
|
||||
end
|
||||
|
||||
pickers.new(opts, {
|
||||
prompt_title = "LSP Code Actions",
|
||||
finder = finders.new_table {
|
||||
results = results,
|
||||
entry_maker = function(action)
|
||||
return {
|
||||
value = action,
|
||||
ordinal = action.idx .. action.command_title,
|
||||
display = make_display,
|
||||
}
|
||||
end,
|
||||
},
|
||||
attach_mappings = function(prompt_bufnr)
|
||||
actions.select_default:replace(function()
|
||||
local selection = action_state.get_selected_entry()
|
||||
actions.close(prompt_bufnr)
|
||||
local action = selection.value.command
|
||||
local client = selection.value.client
|
||||
local eff_execute = function(transformed)
|
||||
execute_action(transformed, client.offset_encoding)
|
||||
end
|
||||
if
|
||||
not action.edit
|
||||
and client
|
||||
and type(client.resolved_capabilities.code_action) == "table"
|
||||
and client.resolved_capabilities.code_action.resolveProvider
|
||||
then
|
||||
client.request("codeAction/resolve", action, function(resolved_err, resolved_action)
|
||||
if resolved_err then
|
||||
utils.notify("builtin.lsp_code_actions", {
|
||||
msg = string.format("codeAction/resolve failed: %s : %s", resolved_err.code, resolved_err.message),
|
||||
level = "ERROR",
|
||||
})
|
||||
return
|
||||
end
|
||||
if resolved_action then
|
||||
eff_execute(transform_action(resolved_action))
|
||||
else
|
||||
eff_execute(transform_action(action))
|
||||
end
|
||||
end)
|
||||
else
|
||||
eff_execute(transform_action(action))
|
||||
end
|
||||
end)
|
||||
|
||||
return true
|
||||
end,
|
||||
sorter = conf.generic_sorter(opts),
|
||||
}):find()
|
||||
end
|
||||
|
||||
lsp.range_code_actions = function(opts)
|
||||
opts.params = vim.lsp.util.make_given_range_params({ opts.start_line, 1 }, { opts.end_line, 1 }, opts.bufnr)
|
||||
lsp.code_actions(opts)
|
||||
end
|
||||
|
||||
lsp.workspace_symbols = function(opts)
|
||||
local params = { query = opts.query or "" }
|
||||
vim.lsp.buf_request(opts.bufnr, "workspace/symbol", params, function(err, server_result, _, _)
|
||||
@@ -470,7 +261,6 @@ local function check_capabilities(feature, bufnr)
|
||||
end
|
||||
|
||||
local feature_map = {
|
||||
["code_actions"] = "code_action",
|
||||
["document_symbols"] = "document_symbol",
|
||||
["references"] = "find_references",
|
||||
["definitions"] = "goto_definition",
|
||||
|
||||
@@ -223,19 +223,16 @@ function command.register_keyword(keyword)
|
||||
split_keywords[keyword] = true
|
||||
end
|
||||
|
||||
function command.load_command(start_line, end_line, count, cmd, ...)
|
||||
function command.load_command(cmd, ...)
|
||||
local args = { ... }
|
||||
if cmd == nil then
|
||||
run_command { cmd = "builtin" }
|
||||
return
|
||||
end
|
||||
|
||||
local user_opts = {}
|
||||
user_opts["cmd"] = cmd
|
||||
user_opts.opts = {
|
||||
start_line = start_line,
|
||||
end_line = end_line,
|
||||
count = count,
|
||||
local user_opts = {
|
||||
cmd = cmd,
|
||||
opts = {},
|
||||
}
|
||||
|
||||
for _, arg in ipairs(args) do
|
||||
|
||||
@@ -70,7 +70,7 @@ end
|
||||
---
|
||||
--- `local builtin = require('telescope.builtin')`
|
||||
--- `local themes = require('telescope.themes')`
|
||||
--- `builtin.lsp_code_actions(themes.get_cursor())`
|
||||
--- `builtin.lsp_references(themes.get_cursor())`
|
||||
--- </code>
|
||||
function themes.get_cursor(opts)
|
||||
opts = opts or {}
|
||||
|
||||
Reference in New Issue
Block a user