From 9437327d5ee627ddb15bfbc88112bd77e4e3ffcf Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Sat, 21 Mar 2020 19:55:19 +0100 Subject: treesitter: use new on_bytes interface This will significantly reduce the parsing work needed e.g. when rehighlighting after every keypress in insert mode. Also add safety check for tree-sitter trying to read past the end of a line. This can happen after we sent an incorrect buffer update. --- runtime/lua/vim/treesitter/highlighter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'runtime/lua/vim/treesitter') diff --git a/runtime/lua/vim/treesitter/highlighter.lua b/runtime/lua/vim/treesitter/highlighter.lua index b261d51d4a..8944cc5256 100644 --- a/runtime/lua/vim/treesitter/highlighter.lua +++ b/runtime/lua/vim/treesitter/highlighter.lua @@ -60,7 +60,7 @@ function TSHighlighter.new(query, bufnr, ft) ft, { on_changedtree = function(...) self:on_changedtree(...) end, - on_lines = function() self.root = self.parser:parse():root() end + on_bytes = function() self.root = self.parser:parse():root() end } ) -- cgit From cf0e1bc1fe272b6948b88cfe83e84ba4214d9b9b Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Thu, 3 Sep 2020 15:36:11 +0200 Subject: wip trying to fix the highlighter --- runtime/lua/vim/treesitter/highlighter.lua | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'runtime/lua/vim/treesitter') diff --git a/runtime/lua/vim/treesitter/highlighter.lua b/runtime/lua/vim/treesitter/highlighter.lua index 8944cc5256..718088e0ad 100644 --- a/runtime/lua/vim/treesitter/highlighter.lua +++ b/runtime/lua/vim/treesitter/highlighter.lua @@ -60,14 +60,11 @@ function TSHighlighter.new(query, bufnr, ft) ft, { on_changedtree = function(...) self:on_changedtree(...) end, - on_bytes = function() self.root = self.parser:parse():root() end + on_bytes = function() self.parser:parse() end } ) self.buf = self.parser.bufnr - - local tree = self.parser:parse() - self.root = tree:root() self:set_query(query) self.edit_count = 0 self.redraw_count = 0 @@ -126,17 +123,17 @@ function TSHighlighter:set_query(query) end }) - self:on_changedtree({{self.root:range()}}) + self:on_changedtree({{self.parser:parse():root():range()}}) end function TSHighlighter:on_changedtree(changes) -- Get a fresh root - self.root = self.parser.tree:root() + local root = self.parser:parse():root() for _, ch in ipairs(changes or {}) do - a.nvim_buf_clear_namespace(self.buf, ts_hs_ns, ch[1], ch[3] + 1) + a.nvim_buf_clear_namespace(self.buf, ts_hs_ns, ch[1], ch[3]+1) - for capture, node in self.query:iter_captures(self.root, self.buf, ch[1], ch[3] + 1) do + for capture, node in self.query:iter_captures(root, self.buf, ch[1], ch[3] + 1) do local start_row, start_col, end_row, end_col = node:range() local hl = self.hl_cache[capture] if hl then -- cgit