mirror of
https://github.com/neovim/neovim.git
synced 2026-04-25 08:44:06 +00:00
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.
This commit is contained in:
committed by
Lewis Russell
parent
5a25dcc5a4
commit
2ca076e45f
@@ -1,6 +1,6 @@
|
||||
---@meta
|
||||
|
||||
---@class TSNode
|
||||
---@class TSNode: userdata
|
||||
---@field id fun(self: TSNode): integer
|
||||
---@field tree fun(self: TSNode): TSTree
|
||||
---@field range fun(self: TSNode, include_bytes: false?): integer, integer, integer, integer
|
||||
@@ -51,7 +51,7 @@ function TSNode:_rawquery(query, captures, start, end_, opts) end
|
||||
---@field parse fun(self: TSParser, tree: TSTree?, source: integer|string, include_bytes: boolean?): TSTree, integer[]
|
||||
---@field reset fun(self: TSParser)
|
||||
---@field included_ranges fun(self: TSParser, include_bytes: boolean?): integer[]
|
||||
---@field set_included_ranges fun(self: TSParser, ranges: Range6[])
|
||||
---@field set_included_ranges fun(self: TSParser, ranges: (Range6|TSNode)[])
|
||||
---@field set_timeout fun(self: TSParser, timeout: integer)
|
||||
---@field timeout fun(self: TSParser): integer
|
||||
---@field _set_logger fun(self: TSParser, lex: boolean, parse: boolean, cb: TSLoggerCallback)
|
||||
@@ -61,7 +61,8 @@ function TSNode:_rawquery(query, captures, start, end_, opts) end
|
||||
---@field root fun(self: TSTree): TSNode
|
||||
---@field edit fun(self: TSTree, _: integer, _: integer, _: integer, _: integer, _: integer, _: integer, _: integer, _: integer, _:integer)
|
||||
---@field copy fun(self: TSTree): TSTree
|
||||
---@field included_ranges fun(self: TSTree, include_bytes: boolean?): integer[]
|
||||
---@field included_ranges fun(self: TSTree, include_bytes: true): Range6[]
|
||||
---@field included_ranges fun(self: TSTree, include_bytes: false): Range4[]
|
||||
|
||||
---@return integer
|
||||
vim._ts_get_language_version = function() end
|
||||
|
||||
Reference in New Issue
Block a user