summaryrefslogtreecommitdiff
path: root/plugin/20_treesitter.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/20_treesitter.lua')
-rw-r--r--plugin/20_treesitter.lua33
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
+})