Adding code actions and more telescope commands
This commit is contained in:
parent
2cfc6ef50b
commit
daefec7559
137
nvim/lua/tel.lua
137
nvim/lua/tel.lua
|
@ -49,15 +49,150 @@ telescope.setup({
|
||||||
|
|
||||||
telescope.load_extension('fzf')
|
telescope.load_extension('fzf')
|
||||||
|
|
||||||
|
-- taken from https://github.com/nvim-telescope/telescope-ui-select.nvim for code actions
|
||||||
|
telescope.register_extension {
|
||||||
|
setup = function(topts)
|
||||||
|
local specific_opts = vim.F.if_nil(topts.specific_opts, {})
|
||||||
|
topts.specific_opts = nil
|
||||||
|
|
||||||
|
if #topts == 1 and topts[1] ~= nil then
|
||||||
|
topts = topts[1]
|
||||||
|
end
|
||||||
|
|
||||||
|
local pickers = require "telescope.pickers"
|
||||||
|
local finders = require "telescope.finders"
|
||||||
|
local conf = require("telescope.config").values
|
||||||
|
local actions = require "telescope.actions"
|
||||||
|
local action_state = require "telescope.actions.state"
|
||||||
|
local strings = require "plenary.strings"
|
||||||
|
local entry_display = require "telescope.pickers.entry_display"
|
||||||
|
local utils = require "telescope.utils"
|
||||||
|
|
||||||
|
__TelescopeUISelectSpecificOpts = vim.F.if_nil(
|
||||||
|
__TelescopeUISelectSpecificOpts,
|
||||||
|
vim.tbl_extend("keep", specific_opts, {
|
||||||
|
["codeaction"] = {
|
||||||
|
make_indexed = function(items)
|
||||||
|
local indexed_items = {}
|
||||||
|
local widths = {
|
||||||
|
idx = 0,
|
||||||
|
command_title = 0,
|
||||||
|
client_name = 0,
|
||||||
|
}
|
||||||
|
for idx, item in ipairs(items) do
|
||||||
|
local client = vim.lsp.get_client_by_id(item[1])
|
||||||
|
local entry = {
|
||||||
|
idx = idx,
|
||||||
|
["add"] = {
|
||||||
|
command_title = item[2].title:gsub("\r\n", "\\r\\n"):gsub("\n", "\\n"),
|
||||||
|
client_name = client and client.name or "",
|
||||||
|
},
|
||||||
|
text = item,
|
||||||
|
}
|
||||||
|
table.insert(indexed_items, entry)
|
||||||
|
widths.idx = math.max(widths.idx, strings.strdisplaywidth(entry.idx))
|
||||||
|
widths.command_title = math.max(widths.command_title, strings.strdisplaywidth(entry.add.command_title))
|
||||||
|
widths.client_name = math.max(widths.client_name, strings.strdisplaywidth(entry.add.client_name))
|
||||||
|
end
|
||||||
|
return indexed_items, widths
|
||||||
|
end,
|
||||||
|
make_displayer = function(widths)
|
||||||
|
return entry_display.create {
|
||||||
|
separator = " ",
|
||||||
|
items = {
|
||||||
|
{ width = widths.idx + 1 }, -- +1 for ":" suffix
|
||||||
|
{ width = widths.command_title },
|
||||||
|
{ width = widths.client_name },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
make_display = function(displayer)
|
||||||
|
return function(e)
|
||||||
|
return displayer {
|
||||||
|
{ e.value.idx .. ":", "TelescopePromptPrefix" },
|
||||||
|
{ e.value.add.command_title },
|
||||||
|
{ e.value.add.client_name, "TelescopeResultsComment" },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
make_ordinal = function(e)
|
||||||
|
return e.idx .. e.add["command_title"]
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
vim.ui.select = function(items, opts, on_choice)
|
||||||
|
opts = opts or {}
|
||||||
|
local prompt = vim.F.if_nil(opts.prompt, "Select one of")
|
||||||
|
if prompt:sub(-1, -1) == ":" then
|
||||||
|
prompt = prompt:sub(1, -2)
|
||||||
|
end
|
||||||
|
opts.format_item = vim.F.if_nil(opts.format_item, function(e)
|
||||||
|
return tostring(e)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- We want or here because __TelescopeUISelectSpecificOpts[x] can be either nil or even false -> {}
|
||||||
|
local sopts = __TelescopeUISelectSpecificOpts[vim.F.if_nil(opts.kind, "")] or {}
|
||||||
|
local indexed_items, widths = vim.F.if_nil(sopts.make_indexed, function(items_)
|
||||||
|
local indexed_items = {}
|
||||||
|
for idx, item in ipairs(items_) do
|
||||||
|
table.insert(indexed_items, { idx = idx, text = item })
|
||||||
|
end
|
||||||
|
return indexed_items
|
||||||
|
end)(items)
|
||||||
|
local displayer = vim.F.if_nil(sopts.make_displayer, function() end)(widths)
|
||||||
|
local make_display = vim.F.if_nil(sopts.make_display, function(_)
|
||||||
|
return function(e)
|
||||||
|
local x, _ = opts.format_item(e.value.text)
|
||||||
|
return x
|
||||||
|
end
|
||||||
|
end)(displayer)
|
||||||
|
local make_ordinal = vim.F.if_nil(sopts.make_ordinal, function(e)
|
||||||
|
return opts.format_item(e.text)
|
||||||
|
end)
|
||||||
|
pickers.new(topts, {
|
||||||
|
prompt_title = prompt,
|
||||||
|
finder = finders.new_table {
|
||||||
|
results = indexed_items,
|
||||||
|
entry_maker = function(e)
|
||||||
|
return {
|
||||||
|
value = e,
|
||||||
|
display = make_display,
|
||||||
|
ordinal = make_ordinal(e),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
attach_mappings = function(prompt_bufnr)
|
||||||
|
actions.select_default:replace(function()
|
||||||
|
local selection = action_state.get_selected_entry()
|
||||||
|
if selection == nil then
|
||||||
|
utils.__warn_no_selection "ui-select"
|
||||||
|
return
|
||||||
|
end
|
||||||
|
actions.close(prompt_bufnr)
|
||||||
|
on_choice(selection.value.text, selection.value.idx)
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
sorter = conf.generic_sorter(topts),
|
||||||
|
}):find()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
local map = vim.api.nvim_set_keymap
|
local map = vim.api.nvim_set_keymap
|
||||||
|
|
||||||
map('n', '<Leader>pf', '<Cmd>Telescope find_files<CR>', {noremap = true})
|
map('n', '<Leader>pf', '<Cmd>Telescope find_files<CR>', {noremap = true})
|
||||||
map('n', '<Leader>pb', '<Cmd>Telescope buffers<CR>', {noremap = true})
|
map('n', '<Leader>pb', '<Cmd>Telescope buffers<CR>', {noremap = true})
|
||||||
map('n', '<Leader>po', '<Cmd>Telescope lsp_document_symbols<CR>', {noremap = true})
|
map('n', '<Leader>po', '<Cmd>Telescope lsp_document_symbols<CR>', {noremap = true})
|
||||||
|
map('n', '<Leader>ps', '<Cmd>Telescope lsp_workspace_symbols<CR>', {noremap = true})
|
||||||
|
map('n', '<Leader>pd', '<Cmd>Telescope lsp_definitions<CR>', {noremap = true})
|
||||||
|
map('n', '<Leader>pr', '<Cmd>Telescope lsp_references<CR>', {noremap = true})
|
||||||
map('n', '<Leader>p', ':Telescope ', {noremap = true})
|
map('n', '<Leader>p', ':Telescope ', {noremap = true})
|
||||||
map('n', '<Leader>p ', ':Telescope ', {noremap = true})
|
map('n', '<Leader>p ', ':Telescope ', {noremap = true})
|
||||||
|
|
||||||
map('n', '<Leader>.', '<Cmd>Telescope lsp_code_actions<CR>', {noremap = true})
|
map('n', '<Leader>.', ':lua vim.lsp.buf.code_action()<CR>', {noremap = true})
|
||||||
|
|
||||||
-- vim.cmd [[
|
-- vim.cmd [[
|
||||||
-- function! s:telescope_hlsetup() abort
|
-- function! s:telescope_hlsetup() abort
|
||||||
|
|
Loading…
Reference in New Issue
Block a user