diff options
Diffstat (limited to 'plugin/20_treesitter.lua')
| -rw-r--r-- | plugin/20_treesitter.lua | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/plugin/20_treesitter.lua b/plugin/20_treesitter.lua new file mode 100644 index 0000000..dcc7df2 --- /dev/null +++ b/plugin/20_treesitter.lua @@ -0,0 +1,33 @@ +local disabled = { latex = true, tex = true } +local ft_lang_map = {} + +vim.api.nvim_create_autocmd("FileType", { + group = vim.api.nvim_create_augroup("treesitter_highlight_group", { clear = true }), + callback = function(ev) + local buf = ev.buf + if not vim.api.nvim_buf_is_loaded(buf) then return end + + local ft = vim.bo[buf].filetype + if disabled[ft] then return end + + if ft_lang_map[ft] then + vim.treesitter.language.register(ft_lang_map[ft], ft) + ft_lang_map[ft] = nil + end + + local parser = vim.treesitter.get_parser(buf, nil, { error = false }) + if parser == nil then + disabled[ft] = true + return + end + + if not vim.treesitter.highlighter.active[buf] then + vim.treesitter.highlighter.new(parser) + end + + if vim.treesitter.query.get(ft, "folds") then + vim.wo.foldmethod = "expr" + vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" + end + end +}) |
