aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter/languagetree.lua
diff options
context:
space:
mode:
authorJaehwang Jung <tomtomjhj@gmail.com>2023-09-16 23:43:22 +0900
committerLewis Russell <me@lewisr.dev>2023-09-16 17:02:26 +0100
commit7e5ce42977d7b2f223ca57e0237db778b8e424ea (patch)
tree14f4c4038331d1c23a692a55ca7004dd3d4a4172 /runtime/lua/vim/treesitter/languagetree.lua
parentf40a109716d7f748dd9e9f70b57e4d0bb285518b (diff)
downloadrneovim-7e5ce42977d7b2f223ca57e0237db778b8e424ea.tar.gz
rneovim-7e5ce42977d7b2f223ca57e0237db778b8e424ea.tar.bz2
rneovim-7e5ce42977d7b2f223ca57e0237db778b8e424ea.zip
fix(treesitter): properly combine injection.combined regions
Problem: It doesn't make much sense to flatten each region (= list of ranges). This coincidentally worked for region with a single range. Solution: Custom function for combining regions.
Diffstat (limited to 'runtime/lua/vim/treesitter/languagetree.lua')
-rw-r--r--runtime/lua/vim/treesitter/languagetree.lua19
1 files changed, 14 insertions, 5 deletions
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
index 4dd5a18396..b555ee231b 100644
--- a/runtime/lua/vim/treesitter/languagetree.lua
+++ b/runtime/lua/vim/treesitter/languagetree.lua
@@ -788,6 +788,19 @@ function LanguageTree:_get_injection(match, metadata)
return lang, combined, ranges
end
+--- Can't use vim.tbl_flatten since a range is just a table.
+---@param regions Range6[][]
+---@return Range6[]
+local function combine_regions(regions)
+ local result = {} ---@type Range6[]
+ for _, region in ipairs(regions) do
+ for _, range in ipairs(region) do
+ result[#result + 1] = range
+ end
+ end
+ return result
+end
+
--- Gets language injection points by language.
---
--- This is where most of the injection processing occurs.
@@ -833,11 +846,7 @@ function LanguageTree:_get_injections()
for _, entry in pairs(patterns) do
if entry.combined then
- ---@diagnostic disable-next-line:no-unknown
- local regions = vim.tbl_map(function(e)
- return vim.tbl_flatten(e)
- end, entry.regions)
- table.insert(result[lang], regions)
+ table.insert(result[lang], combine_regions(entry.regions))
else
for _, ranges in pairs(entry.regions) do
table.insert(result[lang], ranges)