fix(config): make lazyvim.json idempotent, pretty-printed and remove full paths

This commit is contained in:
Folke Lemaitre 2023-10-12 17:48:49 +02:00
parent 7d9a395565
commit 2a0b7a88ba
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
4 changed files with 59 additions and 4 deletions

View file

@ -12,6 +12,7 @@ local LazyUtil = require("lazy.core.util")
---@field extras lazyvim.util.extras
---@field inject lazyvim.util.inject
---@field news lazyvim.util.news
---@field json lazyvim.util.json
local M = {}
---@type table<string, string|string[]>

48
lua/lazyvim/util/json.lua Normal file
View file

@ -0,0 +1,48 @@
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

View file

@ -38,6 +38,7 @@ end
---@param file string
---@param opts? {plugin?:string, rtp?:boolean, when_changed?:boolean}
function M.open(file, opts)
local ref = file
opts = opts or {}
if opts.plugin then
local plugin = require("lazy.core.config").plugins[opts.plugin] --[[@as LazyPlugin?]]
@ -55,10 +56,10 @@ function M.open(file, opts)
if opts.when_changed then
local hash = M.hash(file)
if hash == Config.json.data.hashes[file] then
if hash == Config.json.data.news[ref] then
return
end
Config.json.data.hashes[file] = hash
Config.json.data.news[ref] = hash
Config.json.save()
end