return { { 'nvim-treesitter/nvim-treesitter', event = { 'BufReadPre', 'BufNewFile' }, build = ':TSUpdate', dependencies = { 'windwp/nvim-ts-autotag', }, config = function() -- import nvim-treesitter plugin local treesitter = require 'nvim-treesitter.configs' -- configure treesitter treesitter.setup { -- enable syntax highlighting modules = {}, ignore_install = {}, sync_install = false, auto_install = true, highlight = { enable = true, }, -- enable indentation indent = { enable = true }, -- enable autotagging (w/ nvim-ts-autotag plugin) autotag = { enable = true, }, -- ensure these language parsers are installed ensure_installed = { 'json', 'javascript', 'typescript', 'tsx', 'yaml', 'html', 'css', 'prisma', 'markdown', 'markdown_inline', 'graphql', 'bash', 'lua', 'vim', 'dockerfile', 'gitignore', 'query', 'vimdoc', 'c', }, incremental_selection = { enable = true, keymaps = { init_selection = '', node_incremental = '', scope_incremental = false, node_decremental = '', }, }, textobjects = { 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 = '@scope', query_group = 'locals', desc = 'Select language scope' }, }, selection_modes = { ['@parameter.outer'] = 'v', -- charwise ['@function.outer'] = 'V', -- linewise ['@class.outer'] = '', -- blockwise }, include_surrounding_whitespace = true, }, }, } end, }, { 'nvim-treesitter/nvim-treesitter-textobjects', build = ':TSUpdate', }, }