aboutsummaryrefslogtreecommitdiff
path: root/test/functional/treesitter
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2025-02-16 00:07:08 +0100
committerChristian Clason <ch.clason+github@icloud.com>2025-02-19 19:11:55 +0100
commitbc1018a8d3eeeade9b3fad147a9d9a819985d69d (patch)
treef6914bad1ab76bfeacfdc7f2b597658cfd3b2d84 /test/functional/treesitter
parenta0b52e7cb3d211e30c21464c4a4f4acecd6418c9 (diff)
downloadrneovim-bc1018a8d3eeeade9b3fad147a9d9a819985d69d.tar.gz
rneovim-bc1018a8d3eeeade9b3fad147a9d9a819985d69d.tar.bz2
rneovim-bc1018a8d3eeeade9b3fad147a9d9a819985d69d.zip
fix(treesitter): avoid computing fold levels for empty buffer
Problem: Computing fold levels for an empty buffer (somehow) breaks the parser state, resulting in a broken highlighter and foldexpr. Cached foldexpr parser is invalid after filetype has changed. Solution: Avoid computing fold levels for empty buffer. Clear cached foldinfos upon `FileType`.
Diffstat (limited to 'test/functional/treesitter')
-rw-r--r--test/functional/treesitter/fold_spec.lua24
1 files changed, 17 insertions, 7 deletions
diff --git a/test/functional/treesitter/fold_spec.lua b/test/functional/treesitter/fold_spec.lua
index ac58df4bba..1212212d62 100644
--- a/test/functional/treesitter/fold_spec.lua
+++ b/test/functional/treesitter/fold_spec.lua
@@ -811,17 +811,19 @@ t2]])
]]
-- foldexpr will return '0' for all lines
- local levels = get_fold_levels() ---@type integer[]
- eq(19, #levels)
- for lnum, level in ipairs(levels) do
- eq('0', level, string.format("foldlevel[%d] == %s; expected '0'", lnum, level))
+ local function expect_no_folds()
+ local levels = get_fold_levels() ---@type integer[]
+ eq(19, #levels)
+ for lnum, level in ipairs(levels) do
+ eq('0', level, string.format("foldlevel[%d] == %s; expected '0'", lnum, level))
+ end
end
+ expect_no_folds()
-- reload buffer as c filetype to simulate new parser being found
feed('GA// vim: ft=c<Esc>')
command([[write | edit]])
-
- eq({
+ local foldlevels = {
[1] = '>1',
[2] = '1',
[3] = '1',
@@ -841,6 +843,14 @@ t2]])
[17] = '3',
[18] = '2',
[19] = '1',
- }, get_fold_levels())
+ }
+ eq(foldlevels, get_fold_levels())
+
+ -- only changing filetype should change the parser again
+ command('set ft=some_filetype_without_treesitter_parser')
+ expect_no_folds()
+
+ command('set ft=c')
+ eq(foldlevels, get_fold_levels())
end)
end)