return { "nvim-treesitter/nvim-treesitter", event = { "BufReadPre", "BufNewFile" }, build = ":TSUpdate", dependencies = { { "nvim-treesitter/nvim-treesitter-context", opts = { max_lines = 2, -- How many lines the window should span. Values <= 0 mean no limit. multiline_threshold = 3, -- Maximum number of lines to show for a single context trim_scope = "inner", -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer' } }, "nvim-treesitter/nvim-treesitter-textobjects", }, config = function() require("nvim-treesitter.configs").setup({ ensure_installed = { "vim", "vimdoc", "bash", "lua", "c", "cpp", "c_sharp", "rust", "cmake", "make", "yaml", "ninja", "gitignore", "markdown", "markdown_inline", "hyprlang", "json", "html", "hlsl", "glsl", "gdshader", "gdscript", "dockerfile", "dart", "go", "zig", "css", "regex", "dap_repl", "muttrc", "python", "latex", "typst", "ruby", "svelte", "typescript", }, sync_install = false, -- This can be updated to a list of languages instead of defaulting to true highlight = { enable = true, additional_vim_regex_highlighting = false, }, indent = { enable = true }, incremental_selection = { enable = true, keymaps = { init_selection = "", node_incremental = "", scope_incremental = false, node_decremental = "", }, }, textobjects = { select = { enable = true, lookahead = true, keymaps = { ["ic"] = { query = "@class.inner" }, ["ac"] = { query = "@class.outer" }, ["ii"] = { query = "@conditional.inner" }, ["ai"] = { query = "@conditional.outer" }, ["if"] = { query = "@function.inner" }, ["af"] = { query = "@function.outer" }, ["il"] = { query = "@loop.inner" }, ["al"] = { query = "@loop.outer" }, ["ia"] = { query = "@attribute.inner" }, ["aa"] = { query = "@attribute.outer" }, }, }, }, }) end }