mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
perf(treesitter): smarter languagetree invalidation
Problem:
Treesitter injections are slow because all injected trees are invalidated on every change.
Solution:
Implement smarter invalidation to avoid reparsing injected regions.
- In on_bytes, try and update self._regions as best we can. This PR just offsets any regions after the change.
- Add valid flags for each region in self._regions.
- Call on_bytes recursively for all children.
- We still need to run the query every time for the top level tree. I don't know how to avoid this. However, if the new injection ranges don't change, then we re-use the old trees and avoid reparsing children.
This should result in roughly a 2-3x reduction in tree parsing when the comment injections are enabled.
This commit is contained in:
@@ -291,7 +291,7 @@ local types = { 'integer', 'number', 'string', 'table', 'list', 'boolean', 'func
|
||||
local tagged_types = { 'TSNode', 'LanguageTree' }
|
||||
|
||||
-- Document these as 'table'
|
||||
local alias_types = { 'Range' }
|
||||
local alias_types = { 'Range4', 'Range6' }
|
||||
|
||||
--! \brief run the filter
|
||||
function TLua2DoX_filter.readfile(this, AppStamp, Filename)
|
||||
|
||||
Reference in New Issue
Block a user