aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua
diff options
context:
space:
mode:
authorMilad Rashidikhah <mrashidikhah32@gmail.com>2026-07-28 08:25:32 +0000
committerChristian Clason <ch.clason+github@icloud.com>2026-07-28 11:00:30 +0200
commit20ff82d9fcdeafe2cdf4824b8af1bdeeffb513b6 (patch)
treead54a3bdfbde30b19ba446bbbf33da0f00e6eae2 /runtime/lua
parent26357692c8089a2e4968cff716e412491382787a (diff)
downloadrneovim-20ff82d9fcdeafe2cdf4824b8af1bdeeffb513b6.tar.gz
rneovim-20ff82d9fcdeafe2cdf4824b8af1bdeeffb513b6.tar.bz2
rneovim-20ff82d9fcdeafe2cdf4824b8af1bdeeffb513b6.zip
fix(treesitter): clamp unbounded fold ranges
Problem: Tree-sitter uses UINT32_MAX for full-document ranges, which becomes -1 on 32-bit platforms and reaches _foldupdate as an invalid end row. Solution: Treat negative changed-range end rows as unbounded and clamp them to the buffer line count. Add a regression test that simulates the 32-bit sentinel. AI-assisted: Codex
Diffstat (limited to 'runtime/lua')
-rw-r--r--runtime/lua/vim/treesitter/_fold.lua5
1 files changed, 3 insertions, 2 deletions
diff --git a/runtime/lua/vim/treesitter/_fold.lua b/runtime/lua/vim/treesitter/_fold.lua
index 99739753e8..2d5f3da1ba 100644
--- a/runtime/lua/vim/treesitter/_fold.lua
+++ b/runtime/lua/vim/treesitter/_fold.lua
@@ -291,9 +291,10 @@ local function on_changedtree(bufnr, tree_changes)
local srow, _, erow, ecol = Range.unpack4(change)
-- If a parser doesn't have any ranges explicitly set, treesitter will
-- return a range with end_row and end_bytes with a value of UINT32_MAX,
- -- so clip end_row to the max buffer line.
+ -- which is represented as -1 on 32-bit platforms, so clip end_row to
+ -- the max buffer line.
-- TODO(lewis6991): Handle this generally
- if erow > max_erow then
+ if erow > max_erow or erow < 0 then
erow = max_erow
elseif ecol > 0 then
erow = erow + 1