mirror of
https://github.com/neovim/neovim.git
synced 2024-09-17 20:58:20 -04:00
fix(treesitter): make vim.treesitter.stop() detach parser
This commit is contained in:
parent
12c9791e0f
commit
faff7681ca
@ -41,10 +41,16 @@ function M._create_parser(bufnr, lang, opts)
|
||||
local self = LanguageTree.new(bufnr, lang, opts)
|
||||
|
||||
local function bytes_cb(_, ...)
|
||||
if self:_is_destroyed() then
|
||||
return true
|
||||
end
|
||||
self:_on_bytes(...)
|
||||
end
|
||||
|
||||
local function detach_cb(_, ...)
|
||||
if self:_is_destroyed() then
|
||||
return true
|
||||
end
|
||||
if parsers[bufnr] == self then
|
||||
parsers[bufnr] = nil
|
||||
end
|
||||
@ -52,6 +58,9 @@ function M._create_parser(bufnr, lang, opts)
|
||||
end
|
||||
|
||||
local function reload_cb(_)
|
||||
if self:_is_destroyed() then
|
||||
return true
|
||||
end
|
||||
self:_on_reload()
|
||||
end
|
||||
|
||||
@ -426,6 +435,11 @@ function M.stop(bufnr)
|
||||
if M.highlighter.active[bufnr] then
|
||||
M.highlighter.active[bufnr]:destroy()
|
||||
end
|
||||
|
||||
if parsers[bufnr] then
|
||||
parsers[bufnr]:destroy()
|
||||
parsers[bufnr] = nil
|
||||
end
|
||||
end
|
||||
|
||||
--- Open a window that displays a textual representation of the nodes in the language tree.
|
||||
|
@ -86,6 +86,7 @@ local TSCallbackNames = {
|
||||
---@field private _trees table<integer, TSTree> Reference to parsed tree (one for each language).
|
||||
---Each key is the index of region, which is synced with _regions and _valid.
|
||||
---@field private _valid boolean|table<integer,boolean> If the parsed tree is valid
|
||||
---@field private _destroyed boolean If the LanguageTree has been destroyed
|
||||
---@field private _logger? fun(logtype: string, msg: string)
|
||||
---@field private _logfile? file*
|
||||
local LanguageTree = {}
|
||||
@ -534,6 +535,12 @@ function LanguageTree:destroy()
|
||||
for _, child in pairs(self._children) do
|
||||
child:destroy()
|
||||
end
|
||||
self._destroyed = true
|
||||
end
|
||||
|
||||
---@nodoc
|
||||
function LanguageTree:_is_destroyed()
|
||||
return self._destroyed
|
||||
end
|
||||
|
||||
---@param region Range6[]
|
||||
|
Loading…
Reference in New Issue
Block a user