commit baabc3598745889b69c9c63934e83cad1df8fa31
parent a59b052857ca43997b9e8be0a1d5c870ce172807
Author: Riley Bruins <ribru17@hotmail.com>
Date: Thu, 22 May 2025 12:11:28 -0700
fix(treesitter): properly clip nested injections
Diffstat:
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
@@ -897,7 +897,7 @@ local function clip_regions(region1, region2)
end
-- Advance the range that ends earlier
- if Range.cmp_pos.le(r1[3], r1[4], r2[3], r2[4]) then
+ if Range.cmp_pos.le(r1[4], r1[5], r2[4], r2[5]) then
i = i + 1
else
j = j + 1
diff --git a/test/functional/treesitter/parser_spec.lua b/test/functional/treesitter/parser_spec.lua
@@ -854,6 +854,35 @@ int x = INT_MAX;
end)
end)
+ it('properly clips nested injections #34098', function()
+ insert([=[
+ ```lua
+ vim.cmd([[
+ set noswapfile
+ set noswapfile
+ set noswapfile
+ ]])
+ ```
+ ]=])
+
+ local result = exec_lua(function()
+ local parser = vim.treesitter.get_parser(0, 'markdown')
+ parser:parse(true)
+
+ return parser._children.lua._children.vim:included_regions()
+ end)
+
+ local expected = {
+ {
+ { 1, 10, 17, 2, 0, 18 },
+ { 2, 0, 18, 3, 0, 33 },
+ { 3, 0, 33, 4, 0, 48 },
+ { 4, 0, 48, 5, 0, 63 },
+ },
+ }
+ eq(expected, result)
+ end)
+
describe('when getting the language for a range', function()
before_each(function()
insert([[