mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-21 16:39:06 +02:00
49 lines
1.2 KiB
Lua
49 lines
1.2 KiB
Lua
|
local Util = require("lazyvim.util")
|
||
|
|
||
|
---@class lazyvim.util.json
|
||
|
local M = {}
|
||
|
|
||
|
---@param value any
|
||
|
---@param indent string
|
||
|
local function encode(value, indent)
|
||
|
local t = type(value)
|
||
|
|
||
|
if t == "string" then
|
||
|
return string.format("%q", value)
|
||
|
elseif t == "number" or t == "boolean" then
|
||
|
return tostring(value)
|
||
|
elseif t == "table" then
|
||
|
local is_list = Util.is_list(value)
|
||
|
local parts = {}
|
||
|
local next_indent = indent .. " "
|
||
|
|
||
|
if is_list then
|
||
|
---@diagnostic disable-next-line: no-unknown
|
||
|
for _, v in ipairs(value) do
|
||
|
local e = encode(v, next_indent)
|
||
|
if e then
|
||
|
table.insert(parts, next_indent .. e)
|
||
|
end
|
||
|
end
|
||
|
return "[\n" .. table.concat(parts, ",\n") .. "\n" .. indent .. "]"
|
||
|
else
|
||
|
local keys = vim.tbl_keys(value)
|
||
|
table.sort(keys)
|
||
|
---@diagnostic disable-next-line: no-unknown
|
||
|
for _, k in ipairs(keys) do
|
||
|
local e = encode(value[k], next_indent)
|
||
|
if e then
|
||
|
table.insert(parts, next_indent .. string.format("%q", k) .. ": " .. e)
|
||
|
end
|
||
|
end
|
||
|
return "{\n" .. table.concat(parts, ",\n") .. "\n" .. indent .. "}"
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function M.encode(value)
|
||
|
return encode(value, "")
|
||
|
end
|
||
|
|
||
|
return M
|