if vim.g.did_load_treesitter_plugin then return end vim.g.did_load_treesitter_plugin = true local configs = require('nvim-treesitter.configs') vim.g.skip_ts_context_comment_string_module = true ---@diagnostic disable-next-line: missing-fields configs.setup { -- ensure_installed = 'all', -- auto_install = false, -- Do not automatically install missing parsers when entering buffer highlight = { enable = true, disable = function(_, buf) local max_filesize = 100 * 1024 -- 100 KiB local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf)) if ok and stats and stats.size > max_filesize then return true end end, }, textobjects = { select = { enable = true, -- Automatically jump forward to textobject, similar to targets.vim lookahead = true, keymaps = { ['af'] = '@function.outer', ['if'] = '@function.inner', ['ac'] = '@class.outer', ['ic'] = '@class.inner', ['aC'] = '@call.outer', ['iC'] = '@call.inner', ['a#'] = '@comment.outer', ['i#'] = '@comment.outer', ['ai'] = '@conditional.outer', ['ii'] = '@conditional.outer', ['al'] = '@loop.outer', ['il'] = '@loop.inner', ['aP'] = '@parameter.outer', ['iP'] = '@parameter.inner', }, selection_modes = { ['@parameter.outer'] = 'v', -- charwise ['@function.outer'] = 'V', -- linewise ['@class.outer'] = '', -- blockwise }, }, swap = { enable = true, swap_next = { ['a'] = '@parameter.inner', }, swap_previous = { ['A'] = '@parameter.inner', }, }, move = { enable = true, set_jumps = true, -- whether to set jumps in the jumplist goto_next_start = { [']m'] = '@function.outer', [']P'] = '@parameter.outer', }, goto_next_end = { [']m'] = '@function.outer', [']P'] = '@parameter.outer', }, goto_previous_start = { ['[m'] = '@function.outer', ['[P'] = '@parameter.outer', }, goto_previous_end = { ['[m'] = '@function.outer', ['[P'] = '@parameter.outer', }, }, nsp_interop = { enable = true, peek_definition_code = { ['df'] = '@function.outer', ['dF'] = '@class.outer', }, }, }, } require('treesitter-context').setup { max_lines = 3, } require('ts_context_commentstring').setup() -- Tree-sitter based folding -- vim.opt.foldmethod = 'expr' vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'