Files
telescope.nvim/scratch/clason_finders.lua
TJ DeVries b5d7f48e70 doc: Update information about popup.nvim (#1103)
* doc: Update information about popup.nvim

* fixup: Got rest of popup.nvim mentions
2021-08-11 08:59:56 -04:00

141 lines
3.9 KiB
Lua

vim.cmd [[packadd! plenary.nvim]]
vim.cmd [[packadd! telescope.nvim]]
local finders = require "telescope.finders"
local previewers = require "telescope.previewers"
local pickers = require "telescope.pickers"
local sorters = require "telescope.sorters"
local utils = require "telescope.utils"
local rgargs = { "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", "--smart-case" }
-- grep typed string in current directory (live, not fuzzy!)
finders.rg_live = function(opts)
local live_grepper = finders.new {
fn_command = function(_, prompt)
if not prompt or prompt == "" then
return nil
end
return {
command = "rg",
args = vim.tbl_flatten { rgargs, prompt },
}
end,
}
pickers.new(opts, {
prompt = "Live Grep",
finder = live_grepper,
previewer = previewers.vimgrep,
}):find()
end
-- fuzzy grep string in current directory (slow!)
finders.rg = function(opts)
opts = opts or {}
local search = opts.search or ""
pickers.new(opts, {
prompt = "Find Word",
finder = finders.new_oneshot_job(vim.tbl_flatten { "rg", rgargs, search }),
previewer = previewers.vimgrep,
sorter = sorters.get_norcalli_sorter(),
}):find()
end
-- fuzzy find files in current directory (may be slow in root dir)
finders.fd = function(opts)
pickers.new(opts, {
prompt = "Find Files",
finder = finders.new_oneshot_job { "fd" },
previewer = previewers.bat,
sorter = sorters.get_fuzzy_file(),
}):find()
end
-- fuzzy find in references to symbol under cursor
finders.lsp_references = function(opts)
local params = vim.lsp.util.make_position_params()
params.context = { includeDeclaration = false }
local results_lsp, err = vim.lsp.buf_request_sync(0, "textDocument/references", params)
if err then
vim.api.nvim_err_writeln("Error when finding references: " .. err)
return
end
local locations = {}
for _, server_results in pairs(results_lsp) do
vim.list_extend(locations, vim.lsp.util.locations_to_items(server_results.result) or {})
end
local results = utils.quickfix_items_to_entries(locations)
if vim.tbl_isempty(results) then
return
end
pickers.new(opts, {
prompt = "LSP References",
finder = finders.new_table(results),
previewer = previewers.qflist,
sorter = sorters.get_norcalli_sorter(),
}):find()
end
-- fuzzy find in document symbols
finders.lsp_document_symbols = function(opts)
local params = vim.lsp.util.make_position_params()
local results_lsp, err = vim.lsp.buf_request_sync(0, "textDocument/documentSymbol", params)
if err then
vim.api.nvim_err_writeln("Error when finding document symbols: " .. err)
return
end
local locations = {}
for _, server_results in pairs(results_lsp) do
vim.list_extend(locations, vim.lsp.util.symbols_to_items(server_results.result, 0) or {})
end
local results = utils.quickfix_items_to_entries(locations)
if vim.tbl_isempty(results) then
return
end
pickers.new(opts, {
prompt = "LSP Document Symbols",
finder = finders.new_table(results),
previewer = previewers.qflist,
sorter = sorters.get_norcalli_sorter(),
}):find()
end
-- fuzzy find in all workspace symbols (may need longer timeout!)
finders.lsp_workspace_symbols = function(opts)
local params = { query = "" }
local results_lsp, err = vim.lsp.buf_request_sync(0, "workspace/symbol", params, 1000)
if err then
vim.api.nvim_err_writeln("Error when finding symbols: " .. err)
return
end
local locations = {}
for _, server_results in pairs(results_lsp) do
vim.list_extend(locations, vim.lsp.util.symbols_to_items(server_results.result, 0) or {})
end
local results = utils.quickfix_items_to_entries(locations)
if vim.tbl_isempty(results) then
return
end
pickers.new(opts, {
prompt = "LSP Workspace Symbols",
finder = finders.new_table(results),
previewer = previewers.qflist,
sorter = sorters.get_norcalli_sorter(),
}):find()
end
return finders