aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r--runtime/lua/vim/treesitter/languagetree.lua24
1 files changed, 22 insertions, 2 deletions
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
index ed07e73a55..a8b62e21b9 100644
--- a/runtime/lua/vim/treesitter/languagetree.lua
+++ b/runtime/lua/vim/treesitter/languagetree.lua
@@ -1,3 +1,4 @@
+local a = vim.api
local query = require'vim.treesitter.query'
local language = require'vim.treesitter.language'
@@ -103,12 +104,14 @@ function LanguageTree:parse()
parser:set_included_ranges(ranges)
local tree, tree_changes = parser:parse(old_tree, self._source)
+ self:_do_callback('changedtree', tree_changes, tree)
table.insert(self._trees, tree)
vim.list_extend(changes, tree_changes)
end
else
local tree, tree_changes = parser:parse(old_trees[1], self._source)
+ self:_do_callback('changedtree', tree_changes, tree)
table.insert(self._trees, tree)
vim.list_extend(changes, tree_changes)
@@ -145,7 +148,6 @@ function LanguageTree:parse()
self._valid = true
- self:_do_callback('changedtree', changes)
return self._trees, changes
end
@@ -234,6 +236,24 @@ end
--
-- @param regions A list of regions this tree should manange and parse.
function LanguageTree:set_included_regions(regions)
+ -- Transform the tables from 4 element long to 6 element long (with byte offset)
+ for _, region in ipairs(regions) do
+ for i, range in ipairs(region) do
+ if type(range) == "table" and #range == 4 then
+ -- TODO(vigoux): I don't think string parsers are useful for now
+ if type(self._source) == "number" then
+ local start_row, start_col, end_row, end_col = unpack(range)
+ -- Easy case, this is a buffer parser
+ -- TODO(vigoux): proper byte computation here, and account for EOL ?
+ local start_byte = a.nvim_buf_get_offset(self.bufnr, start_row) + start_col
+ local end_byte = a.nvim_buf_get_offset(self.bufnr, end_row) + end_col
+
+ region[i] = { start_row, start_col, start_byte, end_row, end_col, end_byte }
+ end
+ end
+ end
+ end
+
self._regions = regions
-- Trees are no longer valid now that we have changed regions.
-- TODO(vigoux,steelsojka): Look into doing this smarter so we can use some of the
@@ -413,7 +433,7 @@ local function region_contains(region, range)
end
function LanguageTree:contains(range)
- for _, region in pairs(self._region) do
+ for _, region in pairs(self._regions) do
if region_contains(region, range) then
return true
end