mirror of
https://github.com/neovim/neovim.git
synced 2026-04-19 22:10:45 +00:00
perf(treesitter): cache queries strongly
**Problem:** Query parsing uses a weak cache which is invalidated frequently **Solution:** Make the cache strong, and invalidate it manually when necessary (that is, when `rtp` is changed or `query.set()` is called) Co-authored-by: Christian Clason <c.clason@uni-graz.at>
This commit is contained in:
committed by
Christian Clason
parent
40bf23adaf
commit
3fdc430241
@@ -262,6 +262,7 @@ local explicit_queries = setmetatable({}, {
|
||||
---@param query_name string Name of the query (e.g., "highlights")
|
||||
---@param text string Query text (unparsed).
|
||||
function M.set(lang, query_name, text)
|
||||
M.get:clear(lang, query_name)
|
||||
explicit_queries[lang][query_name] = M.parse(lang, text)
|
||||
end
|
||||
|
||||
@@ -284,7 +285,15 @@ M.get = memoize('concat-2', function(lang, query_name)
|
||||
end
|
||||
|
||||
return M.parse(lang, query_string)
|
||||
end)
|
||||
end, false)
|
||||
|
||||
api.nvim_create_autocmd('OptionSet', {
|
||||
pattern = { 'runtimepath' },
|
||||
group = api.nvim_create_augroup('ts_query_cache_reset', { clear = true }),
|
||||
callback = function()
|
||||
M.get:clear()
|
||||
end,
|
||||
})
|
||||
|
||||
--- Parses a {query} string and returns a `Query` object (|lua-treesitter-query|), which can be used
|
||||
--- to search the tree for the query patterns (via |Query:iter_captures()|, |Query:iter_matches()|),
|
||||
@@ -316,7 +325,7 @@ M.parse = memoize('concat-2', function(lang, query)
|
||||
assert(language.add(lang))
|
||||
local ts_query = vim._ts_parse_query(lang, query)
|
||||
return Query.new(lang, ts_query)
|
||||
end)
|
||||
end, false)
|
||||
|
||||
--- Implementations of predicates that can optionally be prefixed with "any-".
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user