feat: Add entry_index for entry_makers

cleanup
This commit is contained in:
TJ DeVries
2021-11-19 12:30:58 -05:00
committed by Simon Hauser
parent 546947d442
commit 8f56fede21
3 changed files with 115 additions and 68 deletions

View File

@@ -281,7 +281,7 @@ git.branches = function(opts)
entry.value = entry.name
entry.ordinal = entry.name
entry.display = make_display
return entry
return make_entry.set_default_entry_mt(entry, opts)
end,
},
previewer = previewers.git_branch_log.new(opts),

View File

@@ -70,13 +70,13 @@ internal.builtin = function(opts)
finder = finders.new_table {
results = objs,
entry_maker = function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry,
text = entry.text,
display = entry.text,
ordinal = entry.text,
filename = entry.filename,
}
}, opts)
end,
},
previewer = previewers.builtin.new(opts),
@@ -221,11 +221,11 @@ internal.planets = function(opts)
finder = finders.new_table {
results = acceptable_files,
entry_maker = function(line)
return {
return make_entry.set_default_entry_mt({
ordinal = line,
display = line,
filename = base_directory .. "/data/memes/planets/" .. line,
}
}, opts)
end,
},
previewer = previewers.cat.new(opts),
@@ -298,11 +298,11 @@ internal.symbols = function(opts)
finder = finders.new_table {
results = results,
entry_maker = function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry,
ordinal = entry[1] .. " " .. entry[2],
display = entry[1] .. " " .. entry[2],
}
}, opts)
end,
},
sorter = conf.generic_sorter(opts),
@@ -399,14 +399,14 @@ internal.quickfixhistory = function(opts)
end
local entry_maker = opts.make_entry
or function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry.title or "Untitled",
ordinal = entry.title or "Untitled",
display = entry.title or "Untitled",
nr = entry.nr,
id = entry.id,
items = entry.items,
}
}, opts)
end
local qf_entry_maker = make_entry.gen_from_quickfix(opts)
pickers.new(opts, {
@@ -690,13 +690,13 @@ internal.help_tags = function(opts)
finder = finders.new_table {
results = tags,
entry_maker = function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry.name .. "@" .. entry.lang,
display = entry.name,
ordinal = entry.name,
filename = entry.filename,
cmd = entry.cmd,
}
}, opts)
end,
},
previewer = previewers.help.new(opts),
@@ -1189,10 +1189,8 @@ internal.autocommands = function(opts)
return false
end
local val = selection.value
local output = vim.fn.execute(
"verb autocmd " .. val.group_name .. " " .. val.event .. " " .. val.pattern,
"silent"
)
local group_name = val.group_name ~= "<anonymous>" or ""
local output = vim.fn.execute("verb autocmd " .. group_name .. " " .. val.event .. " " .. val.pattern, "silent")
for line in output:gmatch "[^\r\n]+" do
local source_file = line:match "Last set from (.*) line %d*$" or line:match "Last set from (.*)$"
if source_file and source_file ~= "Lua" then

View File

@@ -41,8 +41,40 @@ local get_filename_fn = function()
end
end
local handle_entry_index = function(opts, t, k)
local override = ((opts or {}).entry_index or {})[k]
if not override then
return
end
local val, save = override(t, opts)
if save then
rawset(t, k, val)
end
return val
end
local make_entry = {}
make_entry.set_default_entry_mt = function(tbl, opts)
return setmetatable({}, {
__index = function(t, k)
local override = handle_entry_index(opts, t, k)
if override then
return override
end
-- Only hit tbl once
local val = tbl[k]
if val then
rawset(t, k, val)
end
return val
end,
})
end
do
local lookup_keys = {
display = 1,
@@ -50,13 +82,18 @@ do
value = 1,
}
function make_entry.gen_from_string(opts)
local mt_string_entry = {
__index = function(t, k)
local override = handle_entry_index(opts, t, k)
if override then
return override
end
return rawget(t, rawget(lookup_keys, k))
end,
}
function make_entry.gen_from_string()
return function(line)
return setmetatable({
line,
@@ -97,6 +134,11 @@ do
end
mt_file_entry.__index = function(t, k)
local override = handle_entry_index(opts, t, k)
if override then
return override
end
local raw = rawget(mt_file_entry, k)
if raw then
return raw
@@ -220,6 +262,11 @@ do
end,
__index = function(t, k)
local override = handle_entry_index(opts, t, k)
if override then
return override
end
local raw = rawget(mt_vimgrep_entry, k)
if raw then
return raw
@@ -272,13 +319,13 @@ function make_entry.gen_from_git_stash(opts)
local _, branch_name = string.match(splitted[2], "^([WIP on|On]+) (.+)")
local commit_info = splitted[3]
return {
return make_entry.set_default_entry_mt({
value = stash_idx,
ordinal = commit_info,
branch_name = branch_name,
commit_info = commit_info,
display = make_display,
}
}, opts)
end
end
@@ -312,13 +359,13 @@ function make_entry.gen_from_git_commits(opts)
msg = "<empty commit message>"
end
return {
return make_entry.set_default_entry_mt({
value = sha,
ordinal = sha .. " " .. msg,
msg = msg,
display = make_display,
current_file = opts.current_file,
}
}, opts)
end
end
@@ -364,7 +411,7 @@ function make_entry.gen_from_quickfix(opts)
return function(entry)
local filename = vim.F.if_nil(entry.filename, get_filename(entry.bufnr))
return {
return make_entry.set_default_entry_mt({
value = entry,
ordinal = (not hidden and filename or "") .. " " .. entry.text,
display = make_display,
@@ -376,7 +423,7 @@ function make_entry.gen_from_quickfix(opts)
text = entry.text,
start = entry.start,
finish = entry.finish,
}
}, opts)
end
end
@@ -443,8 +490,7 @@ function make_entry.gen_from_lsp_symbols(opts)
ordinal = filename .. " "
end
ordinal = ordinal .. symbol_name .. " " .. (symbol_type or "unknown")
return {
return make_entry.set_default_entry_mt({
value = entry,
ordinal = ordinal,
display = make_display,
@@ -456,7 +502,7 @@ function make_entry.gen_from_lsp_symbols(opts)
symbol_type = symbol_type,
start = entry.start,
finish = entry.finish,
}
}, opts)
end
end
@@ -508,7 +554,7 @@ function make_entry.gen_from_buffer(opts)
local indicator = entry.flag .. hidden .. readonly .. changed
local line_count = vim.api.nvim_buf_line_count(entry.bufnr)
return {
return make_entry.set_default_entry_mt({
value = bufname,
ordinal = entry.bufnr .. " : " .. bufname,
display = make_display,
@@ -518,7 +564,7 @@ function make_entry.gen_from_buffer(opts)
-- account for potentially stale lnum as getbufinfo might not be updated or from resuming buffers picker
lnum = entry.info.lnum ~= 0 and math.max(math.min(entry.info.lnum, line_count), 1) or 1,
indicator = indicator,
}
}, opts)
end
end
@@ -565,7 +611,7 @@ function make_entry.gen_from_treesitter(opts)
local ts_utils = require "nvim-treesitter.ts_utils"
local start_row, start_col, end_row, _ = ts_utils.get_node_range(entry.node)
local node_text = vim.treesitter.get_node_text(entry.node, bufnr)
return {
return make_entry.set_default_entry_mt({
value = entry.node,
kind = entry.kind,
ordinal = node_text .. " " .. (entry.kind or "unknown"),
@@ -580,7 +626,7 @@ function make_entry.gen_from_treesitter(opts)
text = node_text,
start = start_row,
finish = end_row,
}
}, opts)
end
end
@@ -595,14 +641,12 @@ function make_entry.gen_from_packages(opts)
end
return function(module_name)
local entry = {
return make_entry.set_default_entry_mt({
valid = module_name ~= "",
value = module_name,
ordinal = module_name,
}
entry.display = make_display(module_name)
return entry
display = make_display(module_name),
}, opts)
end
end
@@ -644,21 +688,21 @@ function make_entry.gen_from_apropos(opts)
cmd = vim.split(cmd, ",")[1]
return keyword
and sections[section]
and {
and make_entry.set_default_entry_mt({
value = cmd,
description = desc,
ordinal = cmd,
display = make_display,
section = section,
keyword = keyword,
}
}, opts)
or nil
end
end
function make_entry.gen_from_marks(_)
function make_entry.gen_from_marks(opts)
return function(item)
return {
return make_entry.set_default_entry_mt({
value = item.line,
ordinal = item.line,
display = item.line,
@@ -666,11 +710,11 @@ function make_entry.gen_from_marks(_)
col = item.col,
start = item.lnum,
filename = item.filename,
}
}, opts)
end
end
function make_entry.gen_from_registers(_)
function make_entry.gen_from_registers(opts)
local displayer = entry_display.create {
separator = " ",
hl_chars = { ["["] = "TelescopeBorder", ["]"] = "TelescopeBorder" },
@@ -689,12 +733,12 @@ function make_entry.gen_from_registers(_)
end
return function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry,
ordinal = entry,
content = vim.fn.getreg(entry),
display = make_display,
}
}, opts)
end
end
@@ -727,7 +771,7 @@ function make_entry.gen_from_keymaps(opts)
end
return function(entry)
return {
return make_entry.set_default_entry_mt({
mode = entry.mode,
lhs = get_lhs(entry),
desc = get_desc(entry),
@@ -736,22 +780,22 @@ function make_entry.gen_from_keymaps(opts)
value = entry,
ordinal = entry.mode .. " " .. get_lhs(entry) .. " " .. get_desc(entry),
display = make_display,
}
}, opts)
end
end
function make_entry.gen_from_highlights()
function make_entry.gen_from_highlights(opts)
local make_display = function(entry)
local display = entry.value
return display, { { { 0, #display }, display } }
end
return function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry,
display = make_display,
ordinal = entry,
}
}, opts)
end
end
@@ -772,12 +816,12 @@ function make_entry.gen_from_picker(opts)
end
return function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry,
text = entry.prompt_title,
ordinal = string.format("%s %s", entry.prompt_title, vim.F.if_nil(entry.default_text, "")),
display = make_display,
}
}, opts)
end
end
@@ -820,17 +864,17 @@ function make_entry.gen_from_buffer_lines(opts)
return
end
return {
return make_entry.set_default_entry_mt({
ordinal = entry.text,
display = make_display,
filename = entry.filename,
lnum = entry.lnum,
text = entry.text,
}
}, opts)
end
end
function make_entry.gen_from_vimoptions()
function make_entry.gen_from_vimoptions(opts)
local displayer = entry_display.create {
separator = "",
hl_chars = { ["["] = "TelescopeBorder", ["]"] = "TelescopeBorder" },
@@ -871,7 +915,7 @@ function make_entry.gen_from_vimoptions()
entry.ordinal = entry.ordinal .. " " .. utils.display_termcodes(tostring(o.default))
end
return entry
return make_entry.set_default_entry_mt(entry, opts)
end
end
@@ -927,6 +971,11 @@ function make_entry.gen_from_ctags(opts)
local mt = {}
mt.__index = function(t, k)
local override = handle_entry_index(opts, t, k)
if override then
return override
end
if k == "path" then
local retpath = Path:new({ t.filename }):absolute()
if not vim.loop.fs_access(retpath, "R", nil) then
@@ -1036,7 +1085,7 @@ function make_entry.gen_from_diagnostics(opts)
end
return function(entry)
return {
return make_entry.set_default_entry_mt({
value = entry,
ordinal = ("%s %s"):format(not hidden and entry.filename or "", entry.text),
display = make_display,
@@ -1045,11 +1094,11 @@ function make_entry.gen_from_diagnostics(opts)
lnum = entry.lnum,
col = entry.col,
text = entry.text,
}
}, opts)
end
end
function make_entry.gen_from_autocommands(_)
function make_entry.gen_from_autocommands(opts)
local displayer = entry_display.create {
separator = "",
items = {
@@ -1071,7 +1120,7 @@ function make_entry.gen_from_autocommands(_)
return function(entry)
local group_name = vim.F.if_nil(entry.group_name, "<anonymous>")
return {
return make_entry.set_default_entry_mt({
value = {
event = entry.event,
group_name = group_name,
@@ -1081,11 +1130,11 @@ function make_entry.gen_from_autocommands(_)
--
ordinal = entry.event .. " " .. group_name .. " " .. entry.pattern .. " " .. entry.command,
display = make_display,
}
}, opts)
end
end
function make_entry.gen_from_commands(_)
function make_entry.gen_from_commands(opts)
local displayer = entry_display.create {
separator = "",
items = {
@@ -1118,7 +1167,7 @@ function make_entry.gen_from_commands(_)
end
return function(entry)
return {
return make_entry.set_default_entry_mt({
name = entry.name,
bang = entry.bang,
nargs = entry.nargs,
@@ -1128,7 +1177,7 @@ function make_entry.gen_from_commands(_)
value = entry,
ordinal = entry.name,
display = make_display,
}
}, opts)
end
end
@@ -1187,13 +1236,13 @@ function make_entry.gen_from_git_status(opts)
end
local mod, file = string.match(entry, "(..).*%s[->%s]?(.+)")
return {
return setmetatable({
value = file,
status = mod,
ordinal = entry,
display = make_display,
path = Path:new({ opts.cwd, file }):absolute(),
}
}, opts)
end
end