mirror of
https://github.com/folke/snacks.nvim
synced 2025-12-23 08:47:57 +00:00
feat(picker): added Snacks.picker.tags() a picker for ctags. Closes #1728
This commit is contained in:
parent
de1b7a8729
commit
42902871f5
4 changed files with 61 additions and 1 deletions
|
|
@ -849,6 +849,14 @@ M.spelling = {
|
||||||
confirm = "item_action",
|
confirm = "item_action",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Search tags file
|
||||||
|
---@class snacks.picker.tags.Config: snacks.picker.Config
|
||||||
|
M.tags = {
|
||||||
|
workspace = true, -- search tags in the workspace
|
||||||
|
finder = "vim_tags",
|
||||||
|
format = "lsp_symbol",
|
||||||
|
}
|
||||||
|
|
||||||
---@class snacks.picker.treesitter.Config: snacks.picker.Config
|
---@class snacks.picker.treesitter.Config: snacks.picker.Config
|
||||||
---@field filter table<string, string[]|boolean>? symbol kind filter
|
---@field filter table<string, string[]|boolean>? symbol kind filter
|
||||||
---@field tree? boolean show symbol tree
|
---@field tree? boolean show symbol tree
|
||||||
|
|
|
||||||
|
|
@ -313,7 +313,8 @@ function M.lsp_symbol(item, picker)
|
||||||
if item.tree and not opts.workspace then
|
if item.tree and not opts.workspace then
|
||||||
vim.list_extend(ret, M.tree(item, picker))
|
vim.list_extend(ret, M.tree(item, picker))
|
||||||
end
|
end
|
||||||
local kind = item.kind or "Unknown" ---@type string
|
local kind = item.lsp_kind or item.kind or "Unknown" ---@type string
|
||||||
|
kind = picker.opts.icons.kinds[kind] and kind or "Unknown"
|
||||||
local kind_hl = "SnacksPickerIcon" .. kind
|
local kind_hl = "SnacksPickerIcon" .. kind
|
||||||
ret[#ret + 1] = { picker.opts.icons.kinds[kind], kind_hl }
|
ret[#ret + 1] = { picker.opts.icons.kinds[kind], kind_hl }
|
||||||
ret[#ret + 1] = { " " }
|
ret[#ret + 1] = { " " }
|
||||||
|
|
|
||||||
|
|
@ -319,6 +319,56 @@ function M.spelling()
|
||||||
return items
|
return items
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@class snacks.picker.tags.Tag
|
||||||
|
---@field name string
|
||||||
|
---@field filename string
|
||||||
|
---@field cmd string
|
||||||
|
---@field kind? string
|
||||||
|
---@field static? string
|
||||||
|
|
||||||
|
---@param opts snacks.picker.tags.Config
|
||||||
|
---@type snacks.picker.finder
|
||||||
|
function M.tags(opts, ctx)
|
||||||
|
local buf = ctx.filter.current_buf
|
||||||
|
---@type snacks.picker.tags.Tag[]
|
||||||
|
local tags = vim.fn.taglist(ctx.filter.search == "" and ".*" or ctx.filter.search, vim.api.nvim_buf_get_name(buf))
|
||||||
|
local ret = {} ---@type snacks.picker.finder.Item[]
|
||||||
|
|
||||||
|
local lsp_kinds = {
|
||||||
|
c = "Class",
|
||||||
|
d = "Constant",
|
||||||
|
e = "Enum",
|
||||||
|
f = "Function",
|
||||||
|
g = "EnumMember",
|
||||||
|
l = "Variable",
|
||||||
|
m = "Method",
|
||||||
|
s = "Struct",
|
||||||
|
t = "TypeParameter",
|
||||||
|
v = "Variable",
|
||||||
|
F = "Field",
|
||||||
|
M = "Module",
|
||||||
|
n = "Namespace",
|
||||||
|
P = "Property",
|
||||||
|
S = "Struct",
|
||||||
|
T = "TypeParameter",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tag in ipairs(tags) do
|
||||||
|
---@type snacks.picker.finder.Item
|
||||||
|
local item = {
|
||||||
|
text = tag.name,
|
||||||
|
name = tag.name,
|
||||||
|
file = tag.filename,
|
||||||
|
search = tag.cmd,
|
||||||
|
kind = tag.kind,
|
||||||
|
lsp_kind = lsp_kinds[tag.kind] or "Text",
|
||||||
|
}
|
||||||
|
ret[#ret + 1] = item
|
||||||
|
end
|
||||||
|
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
---@param opts snacks.picker.undo.Config
|
---@param opts snacks.picker.undo.Config
|
||||||
---@type snacks.picker.finder
|
---@type snacks.picker.finder
|
||||||
function M.undo(opts, ctx)
|
function M.undo(opts, ctx)
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@
|
||||||
---@field search_history fun(opts?: snacks.picker.history.Config|{}): snacks.Picker
|
---@field search_history fun(opts?: snacks.picker.history.Config|{}): snacks.Picker
|
||||||
---@field smart fun(opts?: snacks.picker.smart.Config|{}): snacks.Picker
|
---@field smart fun(opts?: snacks.picker.smart.Config|{}): snacks.Picker
|
||||||
---@field spelling fun(opts?: snacks.picker.Config|{}): snacks.Picker
|
---@field spelling fun(opts?: snacks.picker.Config|{}): snacks.Picker
|
||||||
|
---@field tags fun(opts?: snacks.picker.tags.Config|{}): snacks.Picker
|
||||||
---@field treesitter fun(opts?: snacks.picker.treesitter.Config|{}): snacks.Picker
|
---@field treesitter fun(opts?: snacks.picker.treesitter.Config|{}): snacks.Picker
|
||||||
---@field undo fun(opts?: snacks.picker.undo.Config|{}): snacks.Picker
|
---@field undo fun(opts?: snacks.picker.undo.Config|{}): snacks.Picker
|
||||||
---@field zoxide fun(opts?: snacks.picker.Config|{}): snacks.Picker
|
---@field zoxide fun(opts?: snacks.picker.Config|{}): snacks.Picker
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue