diff options
| author | Kiyan Yazdani <yazdani.kiyan@protonmail.com> | 2020-05-25 11:31:24 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-25 11:31:24 +0200 |
| commit | c35d8ac4d5daae6bbf272609d9ae63c9b83a1351 (patch) | |
| tree | 436aed274a7ba512a3cec8a5e1207d788a59e7f6 /lua | |
| parent | Merge pull request #62 from theHamsta/c-locals (diff) | |
| parent | docs: document folding (diff) | |
| download | nvim-treesitter-c35d8ac4d5daae6bbf272609d9ae63c9b83a1351.tar nvim-treesitter-c35d8ac4d5daae6bbf272609d9ae63c9b83a1351.tar.gz nvim-treesitter-c35d8ac4d5daae6bbf272609d9ae63c9b83a1351.tar.bz2 nvim-treesitter-c35d8ac4d5daae6bbf272609d9ae63c9b83a1351.tar.lz nvim-treesitter-c35d8ac4d5daae6bbf272609d9ae63c9b83a1351.tar.xz nvim-treesitter-c35d8ac4d5daae6bbf272609d9ae63c9b83a1351.tar.zst nvim-treesitter-c35d8ac4d5daae6bbf272609d9ae63c9b83a1351.zip | |
Merge pull request #64 from vigoux/feature/folding
Treesitter based code folding.
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/nvim-treesitter/fold.lua | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lua/nvim-treesitter/fold.lua b/lua/nvim-treesitter/fold.lua new file mode 100644 index 000000000..6a39461a7 --- /dev/null +++ b/lua/nvim-treesitter/fold.lua @@ -0,0 +1,29 @@ +local api = vim.api +local parsers = require'nvim-treesitter.parsers' + +local M = {} + +function M.get_fold_indic(lnum) + if not parsers.has_parser() or not lnum then return '0' end + + local function smallest_multiline_containing(node, level) + for index = 0,(node:named_child_count() -1) do + local child = node:named_child(index) + local start, _, stop, _ = child:range() + + if start ~= stop and start <= (lnum -1) and stop >= (lnum -1) then + return smallest_multiline_containing(child, level + 1) + end + end + + return node, level + end + + local parser = parsers.get_parser() + + local multiline_here, level = smallest_multiline_containing(parser:parse():root(), 0) + + return tostring(level) +end + +return M |
