From 90024c24aaef98065579173a75acf59c8f132af8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 28 Jun 2021 08:11:46 +0200 Subject: perf: cache has_query_files: fixes TS slowness --- lua/nvim-treesitter/query.lua | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'lua') 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) -- cgit v1.2.3-70-g09d2