Problem: `lib.lua` used `[diffs]` and `debug.lua`/`init.lua` used `[diffs.nvim]` (no colon) while the rest of the codebase used `[diffs.nvim]:`. Solution: Normalize all `vim.notify` prefixes to `[diffs.nvim]:` for consistency with `log.lua` and the other modules.
70 lines
1.9 KiB
Lua
70 lines
1.9 KiB
Lua
local M = {}
|
|
|
|
local ns = vim.api.nvim_create_namespace('diffs')
|
|
|
|
function M.dump()
|
|
local bufnr = vim.api.nvim_get_current_buf()
|
|
local marks = vim.api.nvim_buf_get_extmarks(bufnr, ns, 0, -1, { details = true })
|
|
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
|
|
|
|
local by_line = {}
|
|
for _, mark in ipairs(marks) do
|
|
local id, row, col, details = mark[1], mark[2], mark[3], mark[4]
|
|
local entry = {
|
|
id = id,
|
|
row = row,
|
|
col = col,
|
|
end_row = details.end_row,
|
|
end_col = details.end_col,
|
|
hl_group = details.hl_group,
|
|
priority = details.priority,
|
|
hl_eol = details.hl_eol,
|
|
line_hl_group = details.line_hl_group,
|
|
number_hl_group = details.number_hl_group,
|
|
virt_text = details.virt_text,
|
|
}
|
|
local key = tostring(row)
|
|
if not by_line[key] then
|
|
by_line[key] = { text = lines[row + 1] or '', marks = {} }
|
|
end
|
|
table.insert(by_line[key].marks, entry)
|
|
end
|
|
|
|
local all_ns_marks = vim.api.nvim_buf_get_extmarks(bufnr, -1, 0, -1, { details = true })
|
|
local non_diffs = {}
|
|
for _, mark in ipairs(all_ns_marks) do
|
|
local details = mark[4]
|
|
if details.ns_id ~= ns then
|
|
table.insert(non_diffs, {
|
|
ns_id = details.ns_id,
|
|
row = mark[2],
|
|
col = mark[3],
|
|
end_row = details.end_row,
|
|
end_col = details.end_col,
|
|
hl_group = details.hl_group,
|
|
priority = details.priority,
|
|
})
|
|
end
|
|
end
|
|
|
|
local result = {
|
|
bufnr = bufnr,
|
|
buf_name = vim.api.nvim_buf_get_name(bufnr),
|
|
ns_id = ns,
|
|
total_diffs_marks = #marks,
|
|
total_all_marks = #all_ns_marks,
|
|
non_diffs_marks = non_diffs,
|
|
lines = by_line,
|
|
}
|
|
|
|
local state_dir = vim.fn.stdpath('state')
|
|
local path = state_dir .. '/diffs_debug.json'
|
|
local f = io.open(path, 'w')
|
|
if f then
|
|
f:write(vim.json.encode(result))
|
|
f:close()
|
|
vim.notify('[diffs.nvim]: debug dump: ' .. path, vim.log.levels.INFO)
|
|
end
|
|
end
|
|
|
|
return M
|