local M = { 'nvim-treesitter/nvim-treesitter', dependencies = { 'nvim-treesitter/nvim-treesitter-textobjects', 'nvim-treesitter/nvim-treesitter-refactor', 'nvim-treesitter/nvim-treesitter-context', -- { 'yioneko/nvim-yati', tag = 'legacy' }, -- { dir = '/home/sogun/devel/nvim-yati/', } }, build = ':TSUpdate', } 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, refactor = { highlight_current_scope = { enable = false }, smart_rename = { enable = true, -- Assign keymaps to false to disable them, e.g. `smart_rename = false`. keymaps = { smart_rename = 'er', }, }, navigation = { enable = true, -- Assign keymaps to false to disable them, e.g. `goto_definition = false`. keymaps = { goto_definition = 'gd', list_definitions = 'gtD', list_definitions_toc = 'gO', goto_next_usage = ']u', goto_previous_usage = '[u', }, }, }, context = { enable = true, }, highlight = { enable = true, disable = { 'help' }, }, incremental_selection = { enable = true, init_selection = "gnn", node_incremental = "grn", scope_incremental = "grc", node_decremental = "grm", }, 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