mirror of
https://github.com/Myzel394/jsonfly.nvim.git
synced 2025-06-18 12:15:25 +02:00
chore: Improve types
This commit is contained in:
parent
81592e724a
commit
c405ae3301
@ -387,7 +387,7 @@ local function grok_object(self, text, start, options)
|
|||||||
---- Add start position so we can quickly jump to it
|
---- Add start position so we can quickly jump to it
|
||||||
VALUE[key] = {
|
VALUE[key] = {
|
||||||
value = new_val,
|
value = new_val,
|
||||||
newlines = newlines or 0,
|
line_number = (newlines or 0) + 1,
|
||||||
key_start = relative_start + 1,
|
key_start = relative_start + 1,
|
||||||
value_start = get_relative_i(text, i),
|
value_start = get_relative_i(text, i),
|
||||||
}
|
}
|
||||||
@ -440,7 +440,7 @@ local function grok_array(self, text, start, options)
|
|||||||
-- can't table.insert(VALUE, val) here because it's a no-op if val is nil
|
-- can't table.insert(VALUE, val) here because it's a no-op if val is nil
|
||||||
VALUE[VALUE_INDEX] = {
|
VALUE[VALUE_INDEX] = {
|
||||||
value = val,
|
value = val,
|
||||||
newlines = newlines or 0,
|
line_number = (newlines or 0) + 1,
|
||||||
value_start = relative_start,
|
value_start = relative_start,
|
||||||
key_start = relative_start,
|
key_start = relative_start,
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
---- Documentation for jsonfly ----
|
||||||
--- Type definitions
|
--- Type definitions
|
||||||
---@class Options
|
---@class Options
|
||||||
---@field key_max_length number - Length for the key column, 0 for no column-like display, Default: 50
|
---@field key_max_length number - Length for the key column, 0 for no column-like display, Default: 50
|
||||||
@ -17,6 +18,18 @@
|
|||||||
---@field null string - Highlight group for null values, Default: "@constant.builtin.json"
|
---@field null string - Highlight group for null values, Default: "@constant.builtin.json"
|
||||||
---@field other string - Highlight group for other types, Default: "@label.json"
|
---@field other string - Highlight group for other types, Default: "@label.json"
|
||||||
|
|
||||||
|
---- Types below are for internal use only ----
|
||||||
|
--
|
||||||
|
---@class EntryPosition
|
||||||
|
---@field line_number number
|
||||||
|
---@field key_start number
|
||||||
|
---@field value_start number
|
||||||
|
--
|
||||||
|
---@class Entry
|
||||||
|
---@field key string
|
||||||
|
---@field value Entry|table|number|string|boolean|nil
|
||||||
|
---@field position EntryPosition
|
||||||
|
|
||||||
local json = require"jsonfly.json"
|
local json = require"jsonfly.json"
|
||||||
local finders = require "telescope.finders"
|
local finders = require "telescope.finders"
|
||||||
local pickers = require "telescope.pickers"
|
local pickers = require "telescope.pickers"
|
||||||
@ -24,16 +37,6 @@ local conf = require("telescope.config").values
|
|||||||
local make_entry = require "telescope.make_entry"
|
local make_entry = require "telescope.make_entry"
|
||||||
local entry_display = require "telescope.pickers.entry_display"
|
local entry_display = require "telescope.pickers.entry_display"
|
||||||
|
|
||||||
---@class InputEntry
|
|
||||||
---@field value InputEntry|table|number|string|boolean|nil
|
|
||||||
---@field newlines number
|
|
||||||
---@field key_start number
|
|
||||||
---@field value_start number
|
|
||||||
--
|
|
||||||
---@class Entry
|
|
||||||
---@field key string
|
|
||||||
---@field entry InputEntry
|
|
||||||
--
|
|
||||||
---@param t table
|
---@param t table
|
||||||
---@return Entry[]
|
---@return Entry[]
|
||||||
local function get_entries_from_lua_json(t)
|
local function get_entries_from_lua_json(t)
|
||||||
@ -42,14 +45,32 @@ local function get_entries_from_lua_json(t)
|
|||||||
--@type k string
|
--@type k string
|
||||||
--@type raw_value InputEntry
|
--@type raw_value InputEntry
|
||||||
for k, raw_value in pairs(t) do
|
for k, raw_value in pairs(t) do
|
||||||
table.insert(keys, {key = k, entry = raw_value})
|
---@type Entry
|
||||||
|
local entry = {
|
||||||
|
key = k,
|
||||||
|
value = raw_value,
|
||||||
|
position = {
|
||||||
|
line_number = raw_value.newlines,
|
||||||
|
key_start = raw_value.key_start,
|
||||||
|
value_start = raw_value.value_start,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
table.insert(keys, entry)
|
||||||
|
|
||||||
local v = raw_value.value
|
local v = raw_value.value
|
||||||
|
|
||||||
if type(v) == "table" then
|
if type(v) == "table" then
|
||||||
local sub_keys = get_entries_from_lua_json(v)
|
local sub_keys = get_entries_from_lua_json(v)
|
||||||
|
|
||||||
for _, sub_key in ipairs(sub_keys) do
|
for _, sub_key in ipairs(sub_keys) do
|
||||||
table.insert(keys, {key = k .. "." .. sub_key.key, entry = sub_key.entry})
|
---@type Entry
|
||||||
|
local entry = {
|
||||||
|
key = k .. "." .. sub_key.key,
|
||||||
|
value = sub_key,
|
||||||
|
position = sub_key.position,
|
||||||
|
}
|
||||||
|
|
||||||
|
table.insert(keys, entry)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -114,17 +135,25 @@ local function get_entries_from_lsp_symbols(symbols)
|
|||||||
|
|
||||||
if symbol.kind == 2 then
|
if symbol.kind == 2 then
|
||||||
local sub_keys = get_entries_from_lsp_symbols(symbol.children)
|
local sub_keys = get_entries_from_lsp_symbols(symbol.children)
|
||||||
|
|
||||||
for _, sub_key in ipairs(sub_keys) do
|
for _, sub_key in ipairs(sub_keys) do
|
||||||
table.insert(keys, {key = key .. "." .. sub_key.key, entry = sub_key.entry})
|
---@type Entry
|
||||||
|
local entry = {
|
||||||
|
key = key .. "." .. sub_key.key,
|
||||||
|
value = sub_key.value,
|
||||||
|
position = sub_key.position,
|
||||||
|
}
|
||||||
|
|
||||||
|
table.insert(keys, entry)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@type Entry
|
---@type Entry
|
||||||
local entry = {
|
local entry = {
|
||||||
key = key,
|
key = key,
|
||||||
entry = {
|
|
||||||
value = parse_lsp_value(symbol),
|
value = parse_lsp_value(symbol),
|
||||||
newlines = symbol.range["end"].line,
|
position = {
|
||||||
|
line_number = symbol.range["end"].line,
|
||||||
key_start = symbol.range.start.character,
|
key_start = symbol.range.start.character,
|
||||||
value_start = symbol.selectionRange.start.character,
|
value_start = symbol.selectionRange.start.character,
|
||||||
}
|
}
|
||||||
@ -255,11 +284,13 @@ return require"telescope".register_extension {
|
|||||||
local _, raw_depth = entry.key:gsub("%.", ".")
|
local _, raw_depth = entry.key:gsub("%.", ".")
|
||||||
local depth = (raw_depth or 0) + 1
|
local depth = (raw_depth or 0) + 1
|
||||||
|
|
||||||
|
print(vim.inspect(entry))
|
||||||
|
|
||||||
return make_entry.set_default_entry_mt({
|
return make_entry.set_default_entry_mt({
|
||||||
value = current_buf,
|
value = current_buf,
|
||||||
ordinal = entry.key,
|
ordinal = entry.key,
|
||||||
display = function(_)
|
display = function(_)
|
||||||
local preview, hl_group_key = create_display_preview(entry.entry.value, opts)
|
local preview, hl_group_key = create_display_preview(entry.value, opts)
|
||||||
|
|
||||||
local key = opts.subkeys_display == "normal" and entry.key or replace_previous_keys(entry.key, " ")
|
local key = opts.subkeys_display == "normal" and entry.key or replace_previous_keys(entry.key, " ")
|
||||||
|
|
||||||
@ -286,11 +317,11 @@ return require"telescope".register_extension {
|
|||||||
|
|
||||||
bufnr = current_buf,
|
bufnr = current_buf,
|
||||||
filename = filename,
|
filename = filename,
|
||||||
lnum = entry.entry.newlines + 1,
|
lnum = entry.position.line_number,
|
||||||
col = opts.jump_behavior == "key_start"
|
col = opts.jump_behavior == "key_start"
|
||||||
and entry.entry.key_start
|
and entry.position.key_start
|
||||||
-- Use length ("#" operator) as vim jumps to the bytes, not characters
|
-- Use length ("#" operator) as vim jumps to the bytes, not characters
|
||||||
or entry.entry.value_start
|
or entry.position.value_start
|
||||||
}, opts)
|
}, opts)
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user