From baabc3598745889b69c9c63934e83cad1df8fa31 Mon Sep 17 00:00:00 2001 From: Riley Bruins Date: Thu, 22 May 2025 12:11:28 -0700 Subject: [PATCH] fix(treesitter): properly clip nested injections --- runtime/lua/vim/treesitter/languagetree.lua | 2 +- test/functional/treesitter/parser_spec.lua | 29 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua index d5deb7452d..d560302f8c 100644 --- 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 index 510eacb958..c2d46cdda8 100644 --- 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([[