aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorFolke Lemaitre <folke.lemaitre@gmail.com>2021-06-28 08:11:46 +0200
committerThomas Vigouroux <tomvig38@gmail.com>2021-06-28 16:17:23 +0200
commit90024c24aaef98065579173a75acf59c8f132af8 (patch)
tree886635f4a1217bcc48d32572e6b3517b819d6475 /lua
parentfix typo in query (diff)
downloadnvim-treesitter-90024c24aaef98065579173a75acf59c8f132af8.tar
nvim-treesitter-90024c24aaef98065579173a75acf59c8f132af8.tar.gz
nvim-treesitter-90024c24aaef98065579173a75acf59c8f132af8.tar.bz2
nvim-treesitter-90024c24aaef98065579173a75acf59c8f132af8.tar.lz
nvim-treesitter-90024c24aaef98065579173a75acf59c8f132af8.tar.xz
nvim-treesitter-90024c24aaef98065579173a75acf59c8f132af8.tar.zst
nvim-treesitter-90024c24aaef98065579173a75acf59c8f132af8.zip
perf: cache has_query_files: fixes TS slowness
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-treesitter/query.lua14
1 files changed, 12 insertions, 2 deletions
diff --git a/lua/nvim-treesitter/query.lua b/lua/nvim-treesitter/query.lua
index 397d733f4..377356c5c 100644
--- a/lua/nvim-treesitter/query.lua
+++ b/lua/nvim-treesitter/query.lua
@@ -61,9 +61,16 @@ local function runtime_queries(lang, query_name)
return api.nvim_get_runtime_file(string.format('queries/%s/%s.scm', lang, query_name), true) or {}
end
+local query_files_cache = {}
function M.has_query_files(lang, query_name)
- local files = runtime_queries(lang, query_name)
- return files and #files > 0
+ if not query_files_cache[lang] then
+ query_files_cache[lang] = {}
+ end
+ if query_files_cache[lang][query_name] == nil then
+ local files = runtime_queries(lang, query_name)
+ query_files_cache[lang][query_name] = files and #files > 0
+ end
+ return query_files_cache[lang][query_name]
end
do
@@ -94,11 +101,14 @@ do
function M.invalidate_query_cache(lang, query_name)
if lang and query_name then
cache[lang][query_name] = nil
+ query_files_cache[lang][query_name] = nil
elseif lang and not query_name then
+ query_files_cache[lang] = nil
for query_name, _ in pairs(cache[lang]) do
M.invalidate_query_cache(lang, query_name)
end
elseif not lang and not query_name then
+ query_files_cache = {}
for lang, _ in pairs(cache) do
for query_name, _ in pairs(cache[lang]) do
M.invalidate_query_cache(lang, query_name)