2024-04-11 15:24:21 +02:00

70 lines
2.2 KiB
Lua

local json = require"jsonfly.json"
local finders = require "telescope.finders"
local pickers = require "telescope.pickers"
local conf = require("telescope.config").values
local make_entry = require "telescope.make_entry"
local function get_recursive_keys(t)
local keys = {}
for k, raw_value in pairs(t) do
table.insert(keys, {key = k, entry = raw_value})
local v = raw_value.value
if type(v) == "table" then
local sub_keys = get_recursive_keys(v)
for _, sub_key in ipairs(sub_keys) do
table.insert(keys, {key = k .. "." .. sub_key.key, entry = sub_key.entry})
end
end
end
return keys
end
return require"telescope".register_extension {
setup = function() end,
exports = {
jsonfly = function(opts)
opts = opts or {}
local current_buf = vim.api.nvim_get_current_buf()
local filename = vim.api.nvim_buf_get_name(current_buf)
local content_lines = vim.api.nvim_buf_get_lines(current_buf, 0, -1, false)
local content = table.concat(content_lines, "\n")
local parsed = json:decode(content)
local keys = get_recursive_keys(parsed)
-- print(vim.inspect(keys))
pickers.new(opts, {
prompt_title = "colors",
finder = finders.new_table {
results = keys,
entry_maker = function(entry)
return make_entry.set_default_entry_mt({
value = vim.inspect(entry.entry[0]),
ordinal = entry.key,
display = entry.key,
bufnr = current_buf,
filename = filename,
lnum = entry.entry.newlines + 1,
col = 2,
start = 2,
finish = 8,
indicator = 0,
extra = 0,
}, opts)
end,
},
previewer = conf.grep_previewer(opts),
sorter = conf.generic_sorter(opts),
}):find()
end
}
}