diff options
author | Thomas Vigouroux <tomvig38@gmail.com> | 2020-07-14 21:50:57 +0200 |
---|---|---|
committer | Thomas Vigouroux <tomvig38@gmail.com> | 2020-08-13 20:30:15 +0200 |
commit | 613068071e02ddf5958fa82974373c370112c5e6 (patch) | |
tree | 53973598ca44dbde2bc4a9d947c9a6499d1295c6 /runtime/lua/vim/tshighlighter.lua | |
parent | 7f49594813287d8134c52b3a9ee8ff099d525468 (diff) | |
download | rneovim-613068071e02ddf5958fa82974373c370112c5e6.tar.gz rneovim-613068071e02ddf5958fa82974373c370112c5e6.tar.bz2 rneovim-613068071e02ddf5958fa82974373c370112c5e6.zip |
treesitter: refactor and use lua regexes
Diffstat (limited to 'runtime/lua/vim/tshighlighter.lua')
-rw-r--r-- | runtime/lua/vim/tshighlighter.lua | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/runtime/lua/vim/tshighlighter.lua b/runtime/lua/vim/tshighlighter.lua deleted file mode 100644 index 6465751ae8..0000000000 --- a/runtime/lua/vim/tshighlighter.lua +++ /dev/null @@ -1,116 +0,0 @@ -local a = vim.api - --- support reload for quick experimentation -local TSHighlighter = rawget(vim.treesitter, 'TSHighlighter') or {} -TSHighlighter.__index = TSHighlighter -local ts_hs_ns = a.nvim_create_namespace("treesitter_hl") - --- These are conventions defined by tree-sitter, though it --- needs to be user extensible also. --- TODO(bfredl): this is very much incomplete, we will need to --- go through a few tree-sitter provided queries and decide --- on translations that makes the most sense. -TSHighlighter.hl_map = { - keyword="Keyword", - string="String", - type="Type", - comment="Comment", - constant="Constant", - operator="Operator", - number="Number", - label="Label", - ["function"]="Function", - ["function.special"]="Function", -} - -function TSHighlighter.new(query, bufnr, ft) - local self = setmetatable({}, TSHighlighter) - self.parser = vim.treesitter.get_parser( - bufnr, - ft, - { - on_changedtree = function(...) self:on_changedtree(...) end, - on_lines = function() self.root = self.parser:parse():root() 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 - self.line_count = {} - a.nvim_buf_set_option(self.buf, "syntax", "") - - -- Tricky: if syntax hasn't been enabled, we need to reload color scheme - -- but use synload.vim rather than syntax.vim to not enable - -- syntax FileType autocmds. Later on we should integrate with the - -- `:syntax` and `set syntax=...` machinery properly. - if vim.g.syntax_on ~= 1 then - vim.api.nvim_command("runtime! syntax/synload.vim") - end - return self -end - -local function is_highlight_name(capture_name) - local firstc = string.sub(capture_name, 1, 1) - return firstc ~= string.lower(firstc) -end - -function TSHighlighter:get_hl_from_capture(capture) - - local name = self.query.captures[capture] - - if is_highlight_name(name) then - -- From "Normal.left" only keep "Normal" - return vim.split(name, '.', true)[1] - else - -- Default to false to avoid recomputing - return TSHighlighter.hl_map[name] - end -end - -function TSHighlighter:set_query(query) - if type(query) == "string" then - query = vim.treesitter.parse_query(self.parser.lang, query) - end - self.query = query - - self.hl_cache = setmetatable({}, { - __index = function(table, capture) - local hl = self:get_hl_from_capture(capture) - rawset(table, capture, hl) - - return hl - end - }) - - self:on_changedtree({{self.root:range()}}) -end - -function TSHighlighter:on_changedtree(changes) - -- Get a fresh root - 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]) - - for capture, node in self.query:iter_captures(changed_node, 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 - a.nvim__buf_add_decoration(self.buf, ts_hs_ns, hl, - start_row, start_col, - end_row, end_col, - {}) - end - end - end -end - -return TSHighlighter |