local M = { 'nvim-treesitter/nvim-treesitter', dependencies = { 'nvim-treesitter/playground', 'nvim-treesitter/nvim-treesitter-textobjects', -- { 'yioneko/nvim-yati', tag = 'legacy' }, -- { dir = '/home/sogun/devel/nvim-yati/', } }, event = 'BufRead', keys = { { 'dp', 'TSPlaygroundToggle', desc = 'TSPlaygroundToggle' } }, -- cmd {{{ cmd = { 'TSBufDisable', 'TSBufEnable', 'TSBufToggle', 'TSCaptureUnderCursor', 'TSConfigInfo', 'TSDisable', 'TSEditQuery', 'TSEditQueryUserAfter', 'TSEnable', 'TSHighlightCapturesUnderCursor', 'TSInstall', 'TSInstallFromGrammar', 'TSInstallInfo', 'TSInstallSync', 'TSModuleInfo', 'TSNodeUnderCursor', 'TSPlaygroundToggle', 'TSTextobjectBuiltinF', 'TSTextobjectBuiltinT', 'TSTextobjectBuiltinf', 'TSTextobjectBuiltint', 'TSTextobjectGotoNextEnd', 'TSTextobjectGotoNextStart', 'TSTextobjectGotoPreviousEnd', 'TSTextobjectGotoPreviousStart', 'TSTextobjectPeekDefinitionCode', 'TSTextobjectRepeatLastMove', 'TSTextobjectRepeatLastMoveNext', 'TSTextobjectRepeatLastMoveOpposite', 'TSTextobjectRepeatLastMovePrevious', 'TSTextobjectSelect', 'TSTextobjectSwapNext', 'TSTextobjectSwapPrevious', 'TSToggle', 'TSUninstall', 'TSUpdate', 'TSUpdateSync', }, -- }}} } function M.init() local aug = vim.api.nvim_create_augroup('treesitterUpdate', { clear = true }) vim.api.nvim_create_autocmd('User', { pattern = { 'LazySync' }, group = aug, command = 'TSUpdate', }) end function M.config() local ts_parsers = require 'nvim-treesitter.parsers'.get_parser_configs() -- ts_parsers.xml = { -- install_info = { -- url = 'https://github.com/dorgnarg/tree-sitter-xml', -- local path or git repo -- files = { 'src/parser.c' }, -- -- optional entries: -- branch = 'main', -- default branch in case of git repo if different from master -- generate_requires_npm = false, -- if stand-alone parser without npm dependencies -- requires_generate_from_grammar = true, -- if folder contains pre-generated src/parser.c -- }, -- filetype = 'xml', -- if filetype does not match the parser name -- } ts_parsers.just = { install_info = { url = 'https://github.com/IndianBoy42/tree-sitter-just', -- local path or git repo files = { 'src/parser.c', 'src/scanner.c' }, -- optional entries: branch = 'main', -- default branch in case of git repo if different from master }, } require 'nvim-treesitter.configs'.setup { ensure_installed = 'all', -- one of "all", "maintained" (parsers with maintainers), or a list of languages ignore_install = {}, auto_install = true, sync_install = false, highlight = { enable = true, disable = { 'help' }, }, playground = { enable = true }, -- yati = { enable = true }, incremental_selection = { enable = true, keymaps = { init_selection = 'gnn', node_incremental = '+', scope_incremental = 'grc', node_decremental = '-', }, }, indent = { disable = { 'php' }, -- php indent SUCKS A LOT enable = true, }, textobjects = { swap = { enable = true, swap_next = { ['ep'] = '@parameter.inner', }, swap_previous = { ['eP'] = '@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 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 of false include_surrounding_whitespace = true, }, }, } end return M