mirror of
https://github.com/neovim/neovim.git
synced 2025-12-16 03:15:39 +00:00
fix(treesitter): update folds in all relevant windows (#24230)
Problem: When using treesitter foldexpr, * :diffput/get open diff folds, and * folds are not updated in other windows that contain the updated buffer. Solution: Update folds in all windows that contain the updated buffer and use expr foldmethod.
This commit is contained in:
@@ -885,87 +885,6 @@ int x = INT_MAX;
|
||||
end)
|
||||
end)
|
||||
|
||||
it("can fold via foldexpr", function()
|
||||
insert(test_text)
|
||||
|
||||
local function get_fold_levels()
|
||||
return exec_lua([[
|
||||
local res = {}
|
||||
for i = 1, vim.api.nvim_buf_line_count(0) do
|
||||
res[i] = vim.treesitter.foldexpr(i)
|
||||
end
|
||||
return res
|
||||
]])
|
||||
end
|
||||
|
||||
exec_lua([[vim.treesitter.get_parser(0, "c")]])
|
||||
|
||||
eq({
|
||||
[1] = '>1',
|
||||
[2] = '1',
|
||||
[3] = '1',
|
||||
[4] = '1',
|
||||
[5] = '>2',
|
||||
[6] = '2',
|
||||
[7] = '2',
|
||||
[8] = '1',
|
||||
[9] = '1',
|
||||
[10] = '>2',
|
||||
[11] = '2',
|
||||
[12] = '2',
|
||||
[13] = '2',
|
||||
[14] = '2',
|
||||
[15] = '>3',
|
||||
[16] = '3',
|
||||
[17] = '3',
|
||||
[18] = '2',
|
||||
[19] = '1' }, get_fold_levels())
|
||||
|
||||
helpers.command('1,2d')
|
||||
|
||||
eq({
|
||||
[1] = '0',
|
||||
[2] = '0',
|
||||
[3] = '>1',
|
||||
[4] = '1',
|
||||
[5] = '1',
|
||||
[6] = '0',
|
||||
[7] = '0',
|
||||
[8] = '>1',
|
||||
[9] = '1',
|
||||
[10] = '1',
|
||||
[11] = '1',
|
||||
[12] = '1',
|
||||
[13] = '>2',
|
||||
[14] = '2',
|
||||
[15] = '2',
|
||||
[16] = '1',
|
||||
[17] = '0' }, get_fold_levels())
|
||||
|
||||
helpers.command('1put!')
|
||||
|
||||
eq({
|
||||
[1] = '>1',
|
||||
[2] = '1',
|
||||
[3] = '1',
|
||||
[4] = '1',
|
||||
[5] = '>2',
|
||||
[6] = '2',
|
||||
[7] = '2',
|
||||
[8] = '1',
|
||||
[9] = '1',
|
||||
[10] = '>2',
|
||||
[11] = '2',
|
||||
[12] = '2',
|
||||
[13] = '2',
|
||||
[14] = '2',
|
||||
[15] = '>3',
|
||||
[16] = '3',
|
||||
[17] = '3',
|
||||
[18] = '2',
|
||||
[19] = '1' }, get_fold_levels())
|
||||
end)
|
||||
|
||||
it('tracks the root range properly (#22911)', function()
|
||||
insert([[
|
||||
int main() {
|
||||
|
||||
Reference in New Issue
Block a user