aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorLiad Oz <liadozil@gmail.com>2023-01-20 15:47:12 +0200
committerStephan Seitz <stephan.seitz@fau.de>2023-01-23 21:56:53 +0100
commit6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc (patch)
tree211545404d2e4583aa74fdf1916fd50e247a9ff7 /lua
parentmap quarto ft to markdown parser (diff)
downloadnvim-treesitter-6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc.tar
nvim-treesitter-6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc.tar.gz
nvim-treesitter-6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc.tar.bz2
nvim-treesitter-6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc.tar.lz
nvim-treesitter-6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc.tar.xz
nvim-treesitter-6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc.tar.zst
nvim-treesitter-6fcb2e6a9a22aa111ff34a485ecc944d08a9cbcc.zip
fix: detach behaviour on buffer reload
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-treesitter/caching.lua18
1 files changed, 13 insertions, 5 deletions
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