mirror of
https://github.com/Myzel394/jsonfly.nvim.git
synced 2025-06-18 04:05:26 +02:00
feat: Add waterfall key style
This commit is contained in:
parent
06c8a420e8
commit
539a0b79a5
14
README.md
14
README.md
@ -104,6 +104,20 @@ require"telescope".setup {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Example: Waterfall keys
|
||||||
|
|
||||||
|
<img src="docs/waterfall_keys.png">
|
||||||
|
|
||||||
|
```lua
|
||||||
|
require"telescope".setup {
|
||||||
|
extensions = {
|
||||||
|
jsonfly = {
|
||||||
|
subkeys_display = "waterfall"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
- JSON parsing is done with [Jeffrey Friedl's JSON library](http://regex.info/blog/lua/json)
|
- JSON parsing is done with [Jeffrey Friedl's JSON library](http://regex.info/blog/lua/json)
|
||||||
|
BIN
docs/waterfall_keys.png
Normal file
BIN
docs/waterfall_keys.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 141 KiB |
@ -8,6 +8,7 @@
|
|||||||
---@field prompt_title string - Title for the prompt, Default: "JSON(fly)"
|
---@field prompt_title string - Title for the prompt, Default: "JSON(fly)"
|
||||||
---@field highlights Highlights - Highlight groups for different types
|
---@field highlights Highlights - Highlight groups for different types
|
||||||
---@field jump_behavior "key_start"|"value_start" - Behavior for jumping to the location, "key_start" == Jump to the start of the key, "value_start" == Jump to the start of the value, Default: "key_start"
|
---@field jump_behavior "key_start"|"value_start" - Behavior for jumping to the location, "key_start" == Jump to the start of the key, "value_start" == Jump to the start of the value, Default: "key_start"
|
||||||
|
---@field subkeys_display "normal"|"waterfall" - Display subkeys in a normal or waterfall style, Default: "normal"
|
||||||
---
|
---
|
||||||
---@class Highlights
|
---@class Highlights
|
||||||
---@field number string - Highlight group for numbers, Default: "@number.json"
|
---@field number string - Highlight group for numbers, Default: "@number.json"
|
||||||
@ -85,6 +86,24 @@ local function create_display_preview(value, opts)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param key string
|
||||||
|
---@param replacement string
|
||||||
|
---@return string
|
||||||
|
---Replaces all previous keys with the replacement
|
||||||
|
---Example: replace_previous_keys("a.b.c", "x") => "xxx.c"
|
||||||
|
local function replace_previous_keys(key, replacement)
|
||||||
|
for i = #key, 1, -1 do
|
||||||
|
if key:sub(i, i) == "." then
|
||||||
|
local len = i - 1
|
||||||
|
local before = replacement:rep(len)
|
||||||
|
|
||||||
|
return before .. "." .. key:sub(i + 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return key
|
||||||
|
end
|
||||||
|
|
||||||
---@type Options
|
---@type Options
|
||||||
local opts = {
|
local opts = {
|
||||||
key_max_length = 50,
|
key_max_length = 50,
|
||||||
@ -101,6 +120,7 @@ local opts = {
|
|||||||
other = "@label.json",
|
other = "@label.json",
|
||||||
},
|
},
|
||||||
jump_behavior = "key_start",
|
jump_behavior = "key_start",
|
||||||
|
subkeys_display = "normal",
|
||||||
}
|
}
|
||||||
|
|
||||||
return require"telescope".register_extension {
|
return require"telescope".register_extension {
|
||||||
@ -140,11 +160,13 @@ return require"telescope".register_extension {
|
|||||||
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.entry.value, opts)
|
||||||
|
|
||||||
|
local key = opts.subkeys_display == "normal" and entry.key or replace_previous_keys(entry.key, " ")
|
||||||
|
|
||||||
return displayer {
|
return displayer {
|
||||||
{ depth, "TelescopeResultsNumber"},
|
{ depth, "TelescopeResultsNumber"},
|
||||||
{
|
{
|
||||||
truncate_overflow(
|
truncate_overflow(
|
||||||
entry.key,
|
key,
|
||||||
opts.key_max_length,
|
opts.key_max_length,
|
||||||
opts.overflow_marker
|
opts.overflow_marker
|
||||||
),
|
),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user