diff options
author | Thomas Vigouroux <tomvig38@gmail.com> | 2020-09-21 14:53:32 +0200 |
---|---|---|
committer | Thomas Vigouroux <tomvig38@gmail.com> | 2020-10-12 18:23:14 +0200 |
commit | bdbc56f931a68bad65e0ba5a3fe3968403995da2 (patch) | |
tree | 7e5608474459a6bbb49c33b65d557d45985692c4 /runtime/lua/vim/treesitter/highlighter.lua | |
parent | d198aa511a90713aea9939e145c34a5b2e828e4d (diff) | |
download | rneovim-bdbc56f931a68bad65e0ba5a3fe3968403995da2.tar.gz rneovim-bdbc56f931a68bad65e0ba5a3fe3968403995da2.tar.bz2 rneovim-bdbc56f931a68bad65e0ba5a3fe3968403995da2.zip |
treesitter: allow custom parser for highlighter
Also allow to get parser ranges.
This will be useful for language injection, allowing us to tweak the
parser's ranges on the fly.
Update runtime/lua/vim/treesitter.lua
Co-authored-by: Paul Burlumi <paul@burlumi.com>
Diffstat (limited to 'runtime/lua/vim/treesitter/highlighter.lua')
-rw-r--r-- | runtime/lua/vim/treesitter/highlighter.lua | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/runtime/lua/vim/treesitter/highlighter.lua b/runtime/lua/vim/treesitter/highlighter.lua index 47114a306f..f2dd7d1eae 100644 --- a/runtime/lua/vim/treesitter/highlighter.lua +++ b/runtime/lua/vim/treesitter/highlighter.lua @@ -56,21 +56,14 @@ TSHighlighter.hl_map = { ["include"] = "Include", } -function TSHighlighter.new(bufnr, ft, query) - if bufnr == nil or bufnr == 0 then - bufnr = a.nvim_get_current_buf() - end - +function TSHighlighter.new(parser, query) local self = setmetatable({}, TSHighlighter) - self.parser = vim.treesitter.get_parser( - bufnr, - ft, - { - on_changedtree = function(...) self:on_changedtree(...) end, - } - ) - - self.buf = self.parser.bufnr + + self.parser = parser + parser:register_cbs { + on_changedtree = function(...) self:on_changedtree(...) end + } + self:set_query(query) self.edit_count = 0 self.redraw_count = 0 @@ -79,7 +72,7 @@ function TSHighlighter.new(bufnr, ft, query) a.nvim_buf_set_option(self.buf, "syntax", "") -- TODO(bfredl): can has multiple highlighters per buffer???? - TSHighlighter.active[bufnr] = self + TSHighlighter.active[parser.bufnr] = self -- Tricky: if syntax hasn't been enabled, we need to reload color scheme -- but use synload.vim rather than syntax.vim to not enable @@ -119,13 +112,6 @@ end function TSHighlighter:set_query(query) if type(query) == "string" then query = vim.treesitter.parse_query(self.parser.lang, query) - elseif query == nil then - query = vim.treesitter.get_query(self.parser.lang, 'highlights') - - if query == nil then - a.nvim_err_writeln("No highlights.scm query found for " .. self.parser.lang) - query = vim.treesitter.parse_query(self.parser.lang, "") - end end self.query = query @@ -139,7 +125,7 @@ function TSHighlighter:set_query(query) end }) - a.nvim__buf_redraw_range(self.buf, 0, a.nvim_buf_line_count(self.buf)) + a.nvim__buf_redraw_range(self.parser.bufnr, 0, a.nvim_buf_line_count(self.parser.bufnr)) end function TSHighlighter._on_line(_, _win, buf, line) |