summaryrefslogtreecommitdiff
path: root/plugin/20_treesitter.lua
blob: dcc7df2dabb50f89264ed092ff848f44feaa565b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
})