return { { "nvim-treesitter/nvim-treesitter", version = false, -- last release is way too old and doesn't work on Windows build = ":TSUpdate", event = { "BufReadPost", "BufNewFile" }, dependencies = { { "nvim-treesitter/nvim-treesitter-textobjects", init = function() -- PERF: no need to load the plugin, if we only need its queries for mini.ai local plugin = require("lazy.core.config").spec.plugins["nvim-treesitter"] local opts = require("lazy.core.plugin").values(plugin, "opts", false) local enabled = false if opts.textobjects then for _, mod in ipairs({ "move", "select", "swap", "lsp_interop" }) do if opts.textobjects[mod] and opts.textobjects[mod].enable then enabled = true break end end end if not enabled then require("lazy.core.loader").disable_rtp_plugin("nvim-treesitter-textobjects") end end, }, }, keys = { { "", desc = "Increment selection" }, { "", desc = "Decrement selection", mode = "x" }, }, ---@type TSConfig opts = { highlight = { enable = true }, indent = { enable = true }, ensure_installed = { "bash", "gitignore", "html", "java", "json", "lua", "luadoc", "luap", "markdown", "markdown_inline", "python", "query", "regex", "scala", "tsx", "typescript", "vim", "vimdoc", "yaml", }, incremental_selection = { enable = true, keymaps = { init_selection = "", node_incremental = "", scope_incremental = false, node_decremental = "", }, }, }, ---@param opts TSConfig config = function(_, opts) if type(opts.ensure_installed) == "table" then ---@type table local added = {} opts.ensure_installed = vim.tbl_filter(function(lang) if added[lang] then return false end added[lang] = true return true end, opts.ensure_installed --[[@as string[] ]]) end require("nvim-treesitter.configs").setup(opts) end, }, { 'nvim-treesitter/playground', dependencies = { "nvim-treesitter/nvim-treesitter" }, cmd = { 'TSPlaygroundToggle', 'TSHighlightCapturesUnderCursor', 'TSNodeUnderCursor', } }, { "nvim-treesitter/nvim-treesitter-context", event = "VeryLazy", dependencies = { "nvim-treesitter/nvim-treesitter" }, cmd = { 'TSContextEnable', 'TSContextDisable', 'TSContextToggle' }, keys = { { "[c", function() require("treesitter-context").go_to_context() end, desc = "Go to context start" }, }, opts = { enable = true }, config = function(_, opts) require'treesitter-context'.setup(opts) vim.api.nvim_set_hl(0, 'TreesitterContext', { bg = "#555555" }) vim.api.nvim_set_hl(0, 'TreesitterContextLineNumber', { link = "Special" }) end, } }