return { 'nvim-treesitter/nvim-treesitter', dependencies = { 'nvim-treesitter/nvim-treesitter-textobjects', { 'nvim-treesitter/nvim-treesitter-context', opts = {} }, -- TODO: Fork this and add CMake support -- TODO: Add shell support (sh/bash/zsh if/for/while/etc) 'RRethy/nvim-treesitter-endwise', }, build = ':TSUpdate', config = function() require('nvim-treesitter').setup() require('nvim-treesitter.configs').setup({ sync_install = false, highlight = { enable = true }, indent = { enable = false }, -- List of languages that must be available ensure_installed = { 'asm', 'bash', 'c', 'cmake', 'cpp', 'css', 'csv', 'cuda', 'diff', 'disassembly', 'dockerfile', 'dot', 'doxygen', 'git_config', 'git_rebase', 'gitattributes', 'gitignore', 'glsl', 'go', 'gpg', 'hlsl', 'html', 'ini', 'javascript', 'jq', 'json', 'julia', 'llvm', 'lua', 'make', 'markdown', 'meson', 'ninja', 'objc', 'objdump', 'printf', 'proto', 'python', 'query', 'regex', 'requirements', 'rst', 'ssh_config', 'strace', 'tmux', 'toml', 'vim', 'vimdoc', 'xml', 'yaml', }, -- After opening statements insert end statements endwise = { enable = true }, -- Text objects using Tree-sitter groups textobjects = { select = { enable = true, lookahead = true, -- include_surrounding_whitespace = true, keymaps = { -- Class text objects ['ac'] = '@class.outer', ['ic'] = '@class.inner', -- Function text objects ['af'] = '@function.outer', ['if'] = '@function.inner', -- Parameter/argument text objects ['a,'] = '@parameter.outer', ['i,'] = '@parameter.inner', -- Comment text objects ['a/'] = '@comment.outer', ['i/'] = '@comment.inner', }, }, }, }) end }