mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
fix(treesitter): injected lang ranges may cross capture boundaries #32549
Problem: treesitter injected language ranges sometimes cross over the capture boundaries when `@combined`. Solution: Clip child regions to not spill out of parent regions within languagetree.lua, and only apply highlights within those regions in highlighter.lua. Co-authored-by: Cormac Relf <web@cormacrelf.net>
This commit is contained in:
@@ -114,6 +114,19 @@ function M.intercepts(r1, r2)
|
||||
return true
|
||||
end
|
||||
|
||||
---@private
|
||||
---@param r1 Range6
|
||||
---@param r2 Range6
|
||||
---@return Range6?
|
||||
function M.intersection(r1, r2)
|
||||
if not M.intercepts(r1, r2) then
|
||||
return nil
|
||||
end
|
||||
local rs = M.cmp_pos.le(r1[1], r1[2], r2[1], r2[2]) and r2 or r1
|
||||
local re = M.cmp_pos.ge(r1[4], r1[5], r2[4], r2[5]) and r2 or r1
|
||||
return { rs[1], rs[2], rs[3], re[4], re[5], re[6] }
|
||||
end
|
||||
|
||||
---@private
|
||||
---@param r Range
|
||||
---@return integer, integer, integer, integer
|
||||
|
||||
Reference in New Issue
Block a user