diff options
author | Thomas Vigouroux <tomvig38@gmail.com> | 2020-09-02 09:21:53 +0200 |
---|---|---|
committer | Thomas Vigouroux <tomvig38@gmail.com> | 2020-09-09 16:00:19 +0200 |
commit | 1ff064126de389a655a064f235a7a02138d3602c (patch) | |
tree | 9437586c27ab75b961a5e6e098220cfb574de18a | |
parent | 59712f6dbecfd9a7ccd021115170d1c9313b0969 (diff) | |
download | rneovim-1ff064126de389a655a064f235a7a02138d3602c.tar.gz rneovim-1ff064126de389a655a064f235a7a02138d3602c.tar.bz2 rneovim-1ff064126de389a655a064f235a7a02138d3602c.zip |
treesitter: revert wrong optimization in highlights
-rw-r--r-- | runtime/lua/vim/treesitter/highlighter.lua | 7 | ||||
-rw-r--r-- | test/functional/lua/treesitter_spec.lua | 22 |
2 files changed, 24 insertions, 5 deletions
diff --git a/runtime/lua/vim/treesitter/highlighter.lua b/runtime/lua/vim/treesitter/highlighter.lua index 1acf888821..b261d51d4a 100644 --- a/runtime/lua/vim/treesitter/highlighter.lua +++ b/runtime/lua/vim/treesitter/highlighter.lua @@ -134,12 +134,9 @@ function TSHighlighter:on_changedtree(changes) self.root = self.parser.tree:root() for _, ch in ipairs(changes or {}) do - -- Try to be as exact as possible - local changed_node = self.root:descendant_for_range(ch[1], ch[2], ch[3], ch[4]) + 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]) - - for capture, node in self.query:iter_captures(changed_node, self.buf, ch[1], ch[3] + 1) do + for capture, node in self.query:iter_captures(self.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 diff --git a/test/functional/lua/treesitter_spec.lua b/test/functional/lua/treesitter_spec.lua index 5bca42a4fc..fb5d5b4e17 100644 --- a/test/functional/lua/treesitter_spec.lua +++ b/test/functional/lua/treesitter_spec.lua @@ -445,6 +445,28 @@ static int nlua_schedule(lua_State *const lstate) | ]]} + feed("5Goc<esc>dd") + screen:expect{grid=[[ + {2:/// Schedule Lua callback on main loop's event queue} | + {3:static} {3:int} {11:nlua_schedule}({3:lua_State} *{3:const} lstate) | + { | + {4:if} ({11:lua_type}(lstate, {5:1}) != {5:LUA_TFUNCTION} | + || {6:lstate} != {6:lstate}) { | + {11:^lua_pushliteral}(lstate, {5:"vim.schedule: expected function"}); | + {4:return} {11:lua_error}(lstate); | + } | + | + {7:LuaRef} cb = {11:nlua_ref}(lstate, {5:1}); | + | + multiqueue_put(main_loop.events, {11:nlua_schedule_event}, | + {5:1}, ({3:void} *)({3:ptrdiff_t})cb); | + {4:return} {5:0}; | + } | + {1:~ }| + {1:~ }| + | + ]]} + feed('7Go*/<esc>') screen:expect{grid=[[ {2:/// Schedule Lua callback on main loop's event queue} | |