From 6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc Mon Sep 17 00:00:00 2001 From: Liad Oz Date: Fri, 20 Jan 2023 15:47:12 +0200 Subject: fix: detach behaviour on buffer reload --- lua/nvim-treesitter/caching.lua | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'lua') diff --git a/lua/nvim-treesitter/caching.lua b/lua/nvim-treesitter/caching.lua index cff0b5a1f..723dbde55 100644 --- a/lua/nvim-treesitter/caching.lua +++ b/lua/nvim-treesitter/caching.lua @@ -14,24 +14,28 @@ function M.create_buffer_cache() return rawget(tbl, key) end, }) + local loaded_buffers = {} function cache.set(type_name, bufnr, value) - if not cache.has(type_name, bufnr) then + if not loaded_buffers[bufnr] then + loaded_buffers[bufnr] = true -- Clean up the cache if the buffer is detached -- to avoid memory leaks api.nvim_buf_attach(bufnr, false, { on_detach = function() - cache.remove(type_name, bufnr) + cache.clear_buffer(bufnr) + loaded_buffers[tostring(bufnr)] = nil return true end, + on_reload = function() end, -- this is needed to prevent on_detach being called on buffer reload }) end - items[type_name][bufnr] = value + items[tostring(bufnr)][type_name] = value end function cache.get(type_name, bufnr) - return items[type_name][bufnr] + return items[tostring(bufnr)][type_name] end function cache.has(type_name, bufnr) @@ -39,7 +43,11 @@ function M.create_buffer_cache() end function cache.remove(type_name, bufnr) - items[type_name][bufnr] = nil + items[tostring(bufnr)][type_name] = nil + end + + function cache.clear_buffer(bufnr) + items[tostring(bufnr)] = nil end return cache -- cgit v1.2.3-70-g09d2