return { "nvim-treesitter/nvim-treesitter", event = { "BufReadPost", "BufNewFile" }, config = function() local ts = require("nvim-treesitter") ts.setup({ ensure_installed = { "python", "go", "kotlin", "dart", "lua", "bash", "json", "yaml", "markdown", "vim", "vimdoc", }, sync_install = false, auto_install = true, highlight = { enable = true, additional_vim_regex_highlighting = false, }, }) pcall(vim.treesitter.language.register, "html", "gotmpl") vim.api.nvim_create_autocmd("FileType", { group = vim.api.nvim_create_augroup("TreesitterOnDemand", { clear = true }), callback = function(args) local ft = args.match local lang = vim.treesitter.language.get_lang(ft) or ft local installed = ts.get_installed and ts.get_installed() or {} if not vim.list_contains(installed, lang) then pcall(function() local ok = ts.install(lang) if ok and ok.wait then ok:wait() end end) end pcall(vim.treesitter.start, args.buf, lang) end, desc = "enable nvim-treesitter and install parser if not installed", }) end, }