diff options
author | Lewis Russell <lewis6991@gmail.com> | 2023-02-09 15:20:47 +0000 |
---|---|---|
committer | Lewis Russell <lewis6991@gmail.com> | 2023-02-10 16:15:55 +0000 |
commit | f5bad01869df449cb1e4ae7f264bcd5c8150f606 (patch) | |
tree | 63215641698030f521cae2433f547f2c41577840 /runtime/lua/vim/treesitter/playground.lua | |
parent | fe1e6b82f4f3ff3d919d1243f37e9216781bb786 (diff) | |
download | rneovim-f5bad01869df449cb1e4ae7f264bcd5c8150f606.tar.gz rneovim-f5bad01869df449cb1e4ae7f264bcd5c8150f606.tar.bz2 rneovim-f5bad01869df449cb1e4ae7f264bcd5c8150f606.zip |
feat(treesitter): playground improvements
- Render node ranges as virtual text
- Set filettype=query. The virtual text is to avoid parsing errors.
- Make sure highlights text is always in view.
Diffstat (limited to 'runtime/lua/vim/treesitter/playground.lua')
-rw-r--r-- | runtime/lua/vim/treesitter/playground.lua | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/runtime/lua/vim/treesitter/playground.lua b/runtime/lua/vim/treesitter/playground.lua index be7764e6f0..001bc2d5bf 100644 --- a/runtime/lua/vim/treesitter/playground.lua +++ b/runtime/lua/vim/treesitter/playground.lua @@ -136,6 +136,8 @@ function TSPlayground:new(bufnr, lang) return t end +local decor_ns = api.nvim_create_namespace('ts.playground') + --- Write the contents of this Playground into {bufnr}. --- ---@param bufnr number Buffer number to write into. @@ -144,22 +146,28 @@ function TSPlayground:draw(bufnr) vim.bo[bufnr].modifiable = true local lines = {} ---@type string[] for _, item in self:iter() do - lines[#lines + 1] = table.concat({ - string.rep(' ', item.depth), - item.text, - item.lnum == item.end_lnum - and string.format(' [%d:%d-%d]', item.lnum + 1, item.col + 1, item.end_col) - or string.format( - ' [%d:%d-%d:%d]', - item.lnum + 1, - item.col + 1, - item.end_lnum + 1, - item.end_col - ), - self.opts.lang and string.format(' %s', item.lang) or '', - }) + lines[#lines + 1] = string.rep(' ', item.depth) .. item.text end api.nvim_buf_set_lines(bufnr, 0, -1, false, lines) + + api.nvim_buf_clear_namespace(bufnr, decor_ns, 0, -1) + + for i, item in self:iter() do + local range_str + if item.lnum == item.end_lnum then + range_str = string.format('[%d:%d-%d]', item.lnum + 1, item.col + 1, item.end_col) + else + range_str = + string.format('[%d:%d-%d:%d]', item.lnum + 1, item.col + 1, item.end_lnum + 1, item.end_col) + end + + local lang_str = self.opts.lang and string.format(' %s', item.lang) or '' + + api.nvim_buf_set_extmark(bufnr, decor_ns, i - 1, 0, { + virt_text = { { range_str, 'Comment' }, { lang_str, 'Title' } }, + }) + end + vim.bo[bufnr].modifiable = false end |