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 config diffs.ConflictConfig
|
||||
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 maps = {
|
||||
|
|
|
|||
|
|
@ -693,6 +693,48 @@ describe('merge', function()
|
|||
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()
|
||||
it('parse_file_line returns status for unmerged files', function()
|
||||
local fugitive = require('diffs.fugitive')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue