fix(merge): clear resolved state on buffer re-read
Problem: resolved_hunks and virtual text persisted when a diff buffer was re-read, showing stale (resolved) markers for hunks that were no longer resolved. Solution: clear resolved_hunks[bufnr] and the merge namespace at the top of setup_keymaps so each buffer init starts fresh.
This commit is contained in:
parent
910be50201
commit
e40bc055b4
2 changed files with 45 additions and 0 deletions
|
|
@ -343,6 +343,9 @@ end
|
||||||
---@param bufnr integer
|
---@param bufnr integer
|
||||||
---@param config diffs.ConflictConfig
|
---@param config diffs.ConflictConfig
|
||||||
function M.setup_keymaps(bufnr, config)
|
function M.setup_keymaps(bufnr, config)
|
||||||
|
resolved_hunks[bufnr] = nil
|
||||||
|
vim.api.nvim_buf_clear_namespace(bufnr, ns, 0, -1)
|
||||||
|
|
||||||
local km = config.keymaps
|
local km = config.keymaps
|
||||||
|
|
||||||
local maps = {
|
local maps = {
|
||||||
|
|
|
||||||
|
|
@ -693,6 +693,48 @@ describe('merge', function()
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('setup_keymaps', function()
|
||||||
|
it('clears resolved state on re-init', function()
|
||||||
|
local working_path = '/tmp/diffs_test_reinit.lua'
|
||||||
|
local w_bufnr = create_working_buffer({
|
||||||
|
'<<<<<<< HEAD',
|
||||||
|
'local x = 1',
|
||||||
|
'=======',
|
||||||
|
'local x = 2',
|
||||||
|
'>>>>>>> feature',
|
||||||
|
}, working_path)
|
||||||
|
|
||||||
|
local d_bufnr = create_diff_buffer({
|
||||||
|
'diff --git a/file.lua b/file.lua',
|
||||||
|
'--- a/file.lua',
|
||||||
|
'+++ b/file.lua',
|
||||||
|
'@@ -1,1 +1,1 @@',
|
||||||
|
'-local x = 1',
|
||||||
|
'+local x = 2',
|
||||||
|
}, working_path)
|
||||||
|
vim.api.nvim_set_current_buf(d_bufnr)
|
||||||
|
vim.api.nvim_win_set_cursor(0, { 5, 0 })
|
||||||
|
|
||||||
|
local cfg = default_config()
|
||||||
|
merge.resolve_ours(d_bufnr, cfg)
|
||||||
|
assert.is_true(merge.is_resolved(d_bufnr, 1))
|
||||||
|
|
||||||
|
local extmarks =
|
||||||
|
vim.api.nvim_buf_get_extmarks(d_bufnr, merge.get_namespace(), 0, -1, { details = true })
|
||||||
|
assert.is_true(#extmarks > 0)
|
||||||
|
|
||||||
|
merge.setup_keymaps(d_bufnr, cfg)
|
||||||
|
|
||||||
|
assert.is_false(merge.is_resolved(d_bufnr, 1))
|
||||||
|
extmarks =
|
||||||
|
vim.api.nvim_buf_get_extmarks(d_bufnr, merge.get_namespace(), 0, -1, { details = true })
|
||||||
|
assert.are.equal(0, #extmarks)
|
||||||
|
|
||||||
|
helpers.delete_buffer(d_bufnr)
|
||||||
|
helpers.delete_buffer(w_bufnr)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
describe('fugitive integration', function()
|
describe('fugitive integration', function()
|
||||||
it('parse_file_line returns status for unmerged files', function()
|
it('parse_file_line returns status for unmerged files', function()
|
||||||
local fugitive = require('diffs.fugitive')
|
local fugitive = require('diffs.fugitive')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue