return { { -- Highlight, edit, and navigate code 'nvim-treesitter/nvim-treesitter', dependencies = { 'nvim-treesitter/nvim-treesitter-textobjects', -- maybe try mini.ai instead? 'nvim-treesitter/nvim-treesitter-context', }, build = ':TSUpdate', main = 'nvim-treesitter.configs', -- Sets main module to use for opts config = function(_, opts) require('nvim-treesitter.configs').setup(opts) require('treesitter-context').setup(opts.context) end, opts = { auto_install = false, highlight = { enable = true }, indent = { enable = true }, incremental_selection = { enable = true, keymaps = { node_incremental = 'v', node_decremental = 'V', scope_incremental = '', }, }, textobjects = { swap = { enable = true, swap_next = { ['a'] = '@parameter.inner', }, swap_previous = { ['A'] = '@parameter.inner', }, }, select = { enable = true, -- Automatically jump forward to textobj, similar to targets.vim lookahead = true, keymaps = { -- You can use the capture groups defined in textobjects.scm ['af'] = '@function.outer', ['if'] = '@function.inner', ['ac'] = '@class.outer', -- You can optionally set descriptions to the mappings (used in the desc parameter of -- nvim_buf_set_keymap) which plugins like which-key display ['ic'] = { query = '@class.inner', desc = 'Select inner part of a class region' }, -- You can also use captures from other query groups like `locals.scm` ['as'] = { query = '@local.scope', query_group = 'locals', desc = 'Select language scope' }, -- custom ['ip'] = { query = '@parameter.inner', desc = 'Select inner parameter' }, }, -- You can choose the select mode (default is charwise 'v') -- -- Can also be a function which gets passed a table with the keys -- * query_string: eg '@function.inner' -- * method: eg 'v' or 'o' -- and should return the mode ('v', 'V', or '') or a table -- mapping query_strings to modes. selection_modes = { ['@parameter.outer'] = 'v', -- charwise ['@function.outer'] = 'V', -- linewise ['@class.outer'] = '', -- blockwise }, -- If you set this to `true` (default is `false`) then any textobject is -- extended to include preceding or succeeding whitespace. Succeeding -- whitespace has priority in order to act similarly to eg the built-in -- `ap`. -- -- Can also be a function which gets passed a table with the keys -- * query_string: eg '@function.inner' -- * selection_mode: eg 'v' -- and should return true or false include_surrounding_whitespace = true, }, }, context = { enable = true, }, }, }, }