Merge pull request #13973 from chentau/on_bytes_undofile

New versions of neovim will not read undofiles written by nvim before this merge (there will be an error message about incopmatible version). Nvim 0.4 (or an master up to bda12927be ) can be used to recover older undofiles, so if you worried about unsaved changes lurking around in undofiles it would make sense to keep such version around somewhere to recover them.

This is a necessary change to keep tree-sitter and plugins dependent on byte-level buffer change events fully working with undo states from a undofile. If there is a clear demand we might implement reading of the old format. Such recovered buffers will not be be fully functional with plugins relying on buffer updates or tree-sitter, however.
This commit is contained in:
Björn Linse
2021-03-03 09:45:06 +01:00
committed by GitHub
2 changed files with 162 additions and 6 deletions

View File

@@ -666,8 +666,62 @@ describe('lua: nvim_buf_attach on_bytes', function()
}
end)
it("sends events when undoing with undofile", function()
write_file("Xtest-undofile", dedent([[
12345
hello world
]]))
command("e! Xtest-undofile")
command("set undodir=. | set undofile")
local ns = helpers.request('nvim_create_namespace', "ns1")
meths.buf_set_extmark(0, ns, 0, 0, {})
eq({"12345", "hello world"}, meths.buf_get_lines(0, 0, -1, true))
-- splice
feed("gg0d2l")
eq({"345", "hello world"}, meths.buf_get_lines(0, 0, -1, true))
-- move
command(".m+1")
eq({"hello world", "345"}, meths.buf_get_lines(0, 0, -1, true))
-- reload undofile and undo changes
command("w")
command("set noundofile")
command("bw!")
command("e! Xtest-undofile")
command("set undofile")
local check_events = setup_eventcheck(verify, nil)
feed("u")
eq({"345", "hello world"}, meths.buf_get_lines(0, 0, -1, true))
check_events {
{ "test1", "bytes", 2, 6, 1, 0, 12, 1, 0, 4, 0, 0, 0 },
{ "test1", "bytes", 2, 6, 0, 0, 0, 0, 0, 0, 1, 0, 4 }
}
feed("u")
eq({"12345", "hello world"}, meths.buf_get_lines(0, 0, -1, true))
check_events {
{ "test1", "bytes", 2, 8, 0, 0, 0, 0, 0, 0, 0, 2, 2 }
}
command("bw!")
end)
teardown(function()
os.remove "Xtest-reload"
os.remove "Xtest-undofile"
os.remove ".Xtest-undofile.un~"
end)
end