aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter/_range.lua
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-08-10 14:21:56 +0100
committerLewis Russell <me@lewisr.dev>2023-08-12 16:11:36 +0100
commit2ca076e45fb3f1c08f6a1a374834df0701b8d778 (patch)
tree3338df585168c4e6455137757519ca0bcd211c8c /runtime/lua/vim/treesitter/_range.lua
parent5a25dcc5a4c73f50902432e32335ab073950cceb (diff)
downloadrneovim-2ca076e45fb3f1c08f6a1a374834df0701b8d778.tar.gz
rneovim-2ca076e45fb3f1c08f6a1a374834df0701b8d778.tar.bz2
rneovim-2ca076e45fb3f1c08f6a1a374834df0701b8d778.zip
feat(treesitter)!: incremental injection parsing
Problem: Treesitter highlighting is slow for large files with lots of injections. Solution: Only parse injections we are going to render during a redraw cycle. --- - `LanguageTree:parse()` will no longer parse injections by default and now requires an explicit range argument to be passed. - `TSHighlighter` now parses injections incrementally during on_win callbacks for the line range being rendered. - Plugins which require certain injections to be parsed must run `parser:parse({ start_row, end_row })` before using the tree.
Diffstat (limited to 'runtime/lua/vim/treesitter/_range.lua')
-rw-r--r--runtime/lua/vim/treesitter/_range.lua9
1 files changed, 8 insertions, 1 deletions
diff --git a/runtime/lua/vim/treesitter/_range.lua b/runtime/lua/vim/treesitter/_range.lua
index 35081c6400..8d727c3c52 100644
--- a/runtime/lua/vim/treesitter/_range.lua
+++ b/runtime/lua/vim/treesitter/_range.lua
@@ -2,6 +2,10 @@ local api = vim.api
local M = {}
+---@class Range2
+---@field [1] integer start row
+---@field [2] integer end row
+
---@class Range4
---@field [1] integer start row
---@field [2] integer start column
@@ -16,7 +20,7 @@ local M = {}
---@field [5] integer end column
---@field [6] integer end bytes
----@alias Range Range4|Range6
+---@alias Range Range2|Range4|Range6
---@private
---@param a_row integer
@@ -111,6 +115,9 @@ end
---@param r Range
---@return integer, integer, integer, integer
function M.unpack4(r)
+ if #r == 2 then
+ return r[1], 0, r[2], 0
+ end
local off_1 = #r == 6 and 1 or 0
return r[1], r[2], r[3 + off_1], r[4 + off_1]
end