summaryrefslogtreecommitdiff
path: root/lua/telescope/make_entry.lua
diff options
context:
space:
mode:
authorYorick Peterse <git@yorickpeterse.com>2022-06-12 20:29:10 +0800
committerSimon Hauser <simon.hauser@helsinki-systems.de>2022-06-30 14:01:50 +0200
commit838c32d6a86c8a4b8f3333f66e797f7cad2e3c1b (patch)
tree5a68b1e883ea75438e1763f502589df751064a5c /lua/telescope/make_entry.lua
parent3f1f5b7e5284b6c341429169e32161795def7e65 (diff)
refactor: make_entry more consistent (#1410)
drops `ignore_filename`, use `path_display= { "hidden" }` Co-authored-by: Simon Hauser <Simon-Hauser@outlook.de>
Diffstat (limited to 'lua/telescope/make_entry.lua')
-rw-r--r--lua/telescope/make_entry.lua151
1 files changed, 83 insertions, 68 deletions
diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua
index f4f0010..940973b 100644
--- a/lua/telescope/make_entry.lua
+++ b/lua/telescope/make_entry.lua
@@ -26,6 +26,21 @@ local lsp_type_highlight = {
["Variable"] = "TelescopeResultsVariable",
}
+local get_filename_fn = function()
+ local bufnr_name_cache = {}
+ return function(bufnr)
+ bufnr = vim.F.if_nil(bufnr, 0)
+ local c = bufnr_name_cache[bufnr]
+ if c then
+ return c
+ end
+
+ local n = vim.api.nvim_buf_get_name(bufnr)
+ bufnr_name_cache[bufnr] = n
+ return n
+ end
+end
+
local make_entry = {}
do
@@ -309,40 +324,49 @@ end
function make_entry.gen_from_quickfix(opts)
opts = opts or {}
+ local show_line = vim.F.if_nil(opts.show_line, true)
- local displayer = entry_display.create {
- separator = "▏",
- items = {
- { width = 8 },
- { width = 0.45 },
- { remaining = true },
- },
+ local hidden = utils.is_path_hidden(opts)
+ local items = {
+ { width = vim.F.if_nil(opts.fname_width, 30) },
+ { remaining = true },
}
+ if hidden then
+ items[1] = 8
+ end
+ if not show_line then
+ table.remove(items, 1)
+ end
- local make_display = function(entry)
- local filename = utils.transform_path(opts, entry.filename)
+ local displayer = entry_display.create { separator = "▏", items = items }
- local line_info = { table.concat({ entry.lnum, entry.col }, ":"), "TelescopeResultsLineNr" }
+ local make_display = function(entry)
+ local input = {}
+ if not hidden then
+ table.insert(input, string.format("%s:%d:%d", utils.transform_path(opts, entry.filename), entry.lnum, entry.col))
+ else
+ table.insert(input, string.format("%4d:%2d", entry.lnum, entry.col))
+ end
- if opts.trim_text then
- entry.text = entry.text:gsub("^%s*(.-)%s*$", "%1")
+ if show_line then
+ local text = entry.text
+ if opts.trim_text then
+ text = text:gsub("^%s*(.-)%s*$", "%1")
+ end
+ text = text:gsub(".* | ", "")
+ table.insert(input, text)
end
- return displayer {
- line_info,
- entry.text:gsub(".* | ", ""),
- filename,
- }
+ return displayer(input)
end
+ local get_filename = get_filename_fn()
return function(entry)
- local filename = entry.filename or vim.api.nvim_buf_get_name(entry.bufnr)
+ local filename = vim.F.if_nil(entry.filename, get_filename(entry.bufnr))
return {
- valid = true,
-
value = entry,
- ordinal = (not opts.ignore_filename and filename or "") .. " " .. entry.text,
+ ordinal = (not hidden and filename or "") .. " " .. entry.text,
display = make_display,
bufnr = entry.bufnr,
@@ -361,14 +385,22 @@ function make_entry.gen_from_lsp_symbols(opts)
local bufnr = opts.bufnr or vim.api.nvim_get_current_buf()
+ -- Default we have two columns, symbol and type(unbound)
+ -- If path is not hidden then its, filepath, symbol and type(still unbound)
+ -- If show_line is also set, type is bound to len 8
local display_items = {
- { width = opts.symbol_width or 25 }, -- symbol
- { width = opts.symbol_type_width or 8 }, -- symbol type
- { remaining = true }, -- filename{:optional_lnum+col} OR content preview
+ { width = opts.symbol_width or 25 },
+ { remaining = true },
}
- if opts.ignore_filename and opts.show_line then
- table.insert(display_items, 2, { width = 6 })
+ local hidden = utils.is_path_hidden(opts)
+ if not hidden then
+ table.insert(display_items, 1, { width = vim.F.if_nil(opts.fname_width, 30) })
+ end
+
+ if opts.show_line then
+ -- bound type to len 8 or custom
+ table.insert(display_items, #display_items, { width = opts.symbol_type_width or 8 })
end
local displayer = entry_display.create {
@@ -376,51 +408,43 @@ function make_entry.gen_from_lsp_symbols(opts)
hl_chars = { ["["] = "TelescopeBorder", ["]"] = "TelescopeBorder" },
items = display_items,
}
+ local type_highlight = vim.F.if_nil(opts.symbol_highlights or lsp_type_highlight)
local make_display = function(entry)
local msg
- -- what to show in the last column: filename or symbol information
- if opts.ignore_filename then -- ignore the filename and show line preview instead
- -- TODO: fixme - if ignore_filename is set for workspace, bufnr will be incorrect
- msg = vim.api.nvim_buf_get_lines(bufnr, entry.lnum - 1, entry.lnum, false)[1] or ""
- msg = vim.trim(msg)
- else
- local filename = utils.transform_path(opts, entry.filename)
-
- if opts.show_line then -- show inline line info
- filename = filename .. " [" .. entry.lnum .. ":" .. entry.col .. "]"
- end
- msg = filename
+ if opts.show_line then
+ msg = vim.trim(vim.F.if_nil(vim.api.nvim_buf_get_lines(bufnr, entry.lnum - 1, entry.lnum, false)[1], ""))
end
- local type_highlight = opts.symbol_highlights or lsp_type_highlight
- local display_columns = {
- entry.symbol_name,
- { entry.symbol_type:lower(), type_highlight[entry.symbol_type], type_highlight[entry.symbol_type] },
- msg,
- }
-
- if opts.ignore_filename and opts.show_line then
- table.insert(display_columns, 2, { entry.lnum .. ":" .. entry.col, "TelescopeResultsLineNr" })
+ if hidden then
+ return displayer {
+ entry.symbol_name,
+ { entry.symbol_type:lower(), type_highlight[entry.symbol_type] },
+ msg,
+ }
+ else
+ return displayer {
+ utils.transform_path(opts, entry.filename),
+ entry.symbol_name,
+ { entry.symbol_type:lower(), type_highlight[entry.symbol_type] },
+ msg,
+ }
end
-
- return displayer(display_columns)
end
+ local get_filename = get_filename_fn()
return function(entry)
- local filename = entry.filename or vim.api.nvim_buf_get_name(entry.bufnr)
+ local filename = vim.F.if_nil(entry.filename, get_filename(entry.bufnr))
local symbol_msg = entry.text
local symbol_type, symbol_name = symbol_msg:match "%[(.+)%]%s+(.*)"
-
local ordinal = ""
- if not opts.ignore_filename and filename then
+ if not hidden and filename then
ordinal = filename .. " "
end
ordinal = ordinal .. symbol_name .. " " .. (symbol_type or "unknown")
- return {
- valid = true,
+ return {
value = entry,
ordinal = ordinal,
display = make_display,
@@ -484,8 +508,6 @@ function make_entry.gen_from_buffer(opts)
local line_count = vim.api.nvim_buf_line_count(entry.bufnr)
return {
- valid = true,
-
value = bufname,
ordinal = entry.bufnr .. " : " .. bufname,
display = make_display,
@@ -537,13 +559,12 @@ function make_entry.gen_from_treesitter(opts)
return displayer(display_columns)
end
+ local get_filename = get_filename_fn()
return function(entry)
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 {
- valid = true,
-
value = entry.node,
kind = entry.kind,
ordinal = node_text .. " " .. (entry.kind or "unknown"),
@@ -551,7 +572,7 @@ function make_entry.gen_from_treesitter(opts)
node_text = node_text,
- filename = vim.api.nvim_buf_get_name(bufnr),
+ filename = get_filename(bufnr),
-- need to add one since the previewer substacts one
lnum = start_row + 1,
col = start_col,
@@ -668,7 +689,6 @@ function make_entry.gen_from_registers(_)
return function(entry)
return {
- valid = true,
value = entry,
ordinal = entry,
content = vim.fn.getreg(entry),
@@ -800,7 +820,6 @@ function make_entry.gen_from_buffer_lines(opts)
end
return {
- valid = true,
ordinal = entry.text,
display = make_display,
filename = entry.filename,
@@ -982,7 +1001,8 @@ function make_entry.gen_from_diagnostics(opts)
{ remaining = true },
}
local line_width = vim.F.if_nil(opts.line_width, 0.5)
- if not utils.is_path_hidden(opts) then
+ local hidden = utils.is_path_hidden(opts)
+ if not hidden then
table.insert(display_items, 2, { width = line_width })
end
local displayer = entry_display.create {
@@ -1000,10 +1020,6 @@ function make_entry.gen_from_diagnostics(opts)
"Diagnostic" .. entry.type,
}
- --TODO(conni2461): I dont like that this is symbol lnum:col | msg | filename
- -- i want: symbol filename:lnum:col | msg
- -- or : symbol lnum:col | msg
- -- I think this is more natural
return displayer {
line_info,
entry.text,
@@ -1014,7 +1030,7 @@ function make_entry.gen_from_diagnostics(opts)
return function(entry)
return {
value = entry,
- ordinal = ("%s %s"):format(not opts.ignore_filename and entry.filename or "", entry.text),
+ ordinal = ("%s %s"):format(not hidden and entry.filename or "", entry.text),
display = make_display,
filename = entry.filename,
type = entry.type,
@@ -1104,7 +1120,6 @@ function make_entry.gen_from_commands(_)
definition = entry.definition,
--
value = entry,
- valid = true,
ordinal = entry.name,
display = make_display,
}