local base_colors = require('color').base_colors return { { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', dependencies = { { 'nvim-treesitter/playground' }, { 'JoosepAlviste/nvim-ts-context-commentstring' }, { 'm-demare/hlargs.nvim' }, { 'nvim-treesitter/nvim-treesitter-context' }, { 'nvim-treesitter/nvim-treesitter-textobjects' }, { 'mrjones2014/nvim-ts-rainbow' }, { 'yioneko/nvim-yati' }, }, event = { 'BufRead', 'BufNewFile', 'InsertEnter' }, cmd = { 'TSHighlightCapturesUnderCursor' }, config = function() require('nvim-treesitter.configs').setup({ ensure_installed = { 'typescript', 'tsx', -- NOTE: Minified JS files are too slow when opened, so they are not used -- 'javascript', 'graphql', 'jsdoc', 'ruby', 'python', 'lua', 'vim', 'json', 'yaml', 'toml', 'markdown', 'markdown_inline', 'bash', 'html', 'css', 'comment', 'regex', }, highlight = { enable = true, disable = function(lang, bufnr) local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(bufnr)) if ok and stats and stats.size > 1024 * 1024 then vim.notify('File too large: tree-sitter disabled.', vim.log.levels.WARN) return true end local ok = true ok = pcall(function() vim.treesitter.get_parser(bufnr, lang):parse() end) and ok ok = pcall(function() vim.treesitter.get_query(lang, 'highlights') end) and ok if not ok then return true end return false end, additional_vim_regex_highlighting = false, }, playground = { enable = true, }, textobjects = { select = { enable = true, -- NOTE: Not yet supported for jsx attributes -- keymaps = { -- ['ax'] = '@tag.attribute', -- ['ix'] = '@tag.attribute', -- }, }, }, context_commentstring = { enable = true, enable_autocmd = false, }, rainbow = { enable = true, }, yati = { enable = true, }, matchup = { enable = true, disable_virtual_text = true, }, }) require('treesitter-context').setup() end, }, { 'David-Kunz/treesitter-unit', dependencies = { { 'nvim-treesitter/nvim-treesitter' }, }, event = { 'ModeChanged' }, config = function() vim.keymap.set({ 'x' }, 'iu', [[:lua require('treesitter-unit').select()]]) vim.keymap.set({ 'x' }, 'au', [[:lua require('treesitter-unit').select(true)]]) vim.keymap.set({ 'o' }, 'iu', [[:lua require('treesitter-unit').select()]]) vim.keymap.set({ 'o' }, 'au', [[:lua require('treesitter-unit').select(true)]]) end, }, { 'm-demare/hlargs.nvim', dependencies = { { 'nvim-treesitter/nvim-treesitter' }, }, event = { 'BufRead' }, config = function() require('hlargs').setup() end, }, { 'mfussenegger/nvim-treehopper', dependencies = { { 'nvim-treesitter/nvim-treesitter' }, { 'm-demare/hlargs.nvim' }, }, keys = { { 'zf', mode = { 'n' } }, }, init = function() vim.api.nvim_create_autocmd({ 'ColorScheme' }, { pattern = { 'gruvbox-material' }, callback = function() vim.api.nvim_set_hl(0, 'TSNodeKey', { fg = base_colors.yellow, underline = true, bold = true }) end, }) end, config = function() vim.keymap.set({ 'n' }, 'zf', function() require('hlargs').disable() pcall(function() require('tsht').nodes() vim.cmd([[normal! zf]]) end) require('hlargs').enable() end) end, }, { 'bennypowers/nvim-regexplainer', dependencies = { { 'nvim-treesitter/nvim-treesitter' }, { 'MunifTanjim/nui.nvim' }, }, event = { 'BufRead' }, config = function() require('regexplainer').setup({ auto = true, popup = { border = { padding = { 0, 0 }, style = 'rounded', }, }, }) end, }, }