Add function to parse jj diff output
This commit is contained in:
parent
9a58ea573b
commit
5c75ec687c
@ -39,6 +39,48 @@ local function _get_jj_diff_for_buffer()
|
|||||||
return diff_output
|
return diff_output
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Parse jj diff output
|
||||||
|
local function _parse_diff_output(diff_output)
|
||||||
|
local added_lines = {}
|
||||||
|
local changed_lines = {}
|
||||||
|
local deleted_lines = {}
|
||||||
|
|
||||||
|
local current_line_num = 0
|
||||||
|
local lines = vim.split(diff_output, "\n", { plain = true })
|
||||||
|
local prev_line_was_deleted = false
|
||||||
|
|
||||||
|
for _, line in ipairs(lines) do
|
||||||
|
if line:match("^@@ .- +(%d+)") then
|
||||||
|
-- Extract new_start_line from hunk header
|
||||||
|
local _, _, new_start_line_str = line:find("^@@ .- +(%d+)")
|
||||||
|
current_line_num = tonumber(new_start_line_str) - 1
|
||||||
|
prev_line_was_deleted = false
|
||||||
|
elseif line:match("^[ ]") then
|
||||||
|
current_line_num = current_line_num + 1
|
||||||
|
prev_line_was_deleted = false
|
||||||
|
elseif line:match("^[+]") then
|
||||||
|
current_line_num = current_line_num + 1
|
||||||
|
if prev_line_was_deleted then
|
||||||
|
table.insert(changed_lines, current_line_num)
|
||||||
|
else
|
||||||
|
table.insert(added_lines, current_line_num)
|
||||||
|
end
|
||||||
|
prev_line_was_deleted = false
|
||||||
|
elseif line:match("^[-]") then
|
||||||
|
-- For deleted lines, we mark the line *before* the deletion as changed,
|
||||||
|
-- or if it's the first line, we can't mark it.
|
||||||
|
-- This is a simplification for now.
|
||||||
|
if current_line_num > 0 then
|
||||||
|
table.insert(deleted_lines, current_line_num)
|
||||||
|
end
|
||||||
|
prev_line_was_deleted = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return added_lines, changed_lines, deleted_lines
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function M.setup(opts)
|
function M.setup(opts)
|
||||||
opts = opts or {}
|
opts = opts or {}
|
||||||
_define_signs() -- Call to define signs
|
_define_signs() -- Call to define signs
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user