| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | local M = {}M.config = function()  O.treesitter = {    ensure_installed = {}, -- one of "all", "maintained" (parsers with maintainers), or a list of languages    ignore_install = {},    matchup = {      enable = false, -- mandatory, false will disable the whole extension      -- disable = { "c", "ruby" },  -- optional, list of language that will be disabled    },    highlight = {      enable = true, -- false will disable the whole extension      additional_vim_regex_highlighting = true,      disable = { "latex" },    },    context_commentstring = {      enable = false,      config = { css = "// %s" },    },    -- indent = {enable = true, disable = {"python", "html", "javascript"}},    -- TODO seems to be broken    indent = { enable = { "javascriptreact" } },    autotag = { enable = false },    textobjects = {      swap = {        enable = false,        -- swap_next = textobj_swap_keymaps,      },      -- move = textobj_move_keymaps,      select = {        enable = false,        -- keymaps = textobj_sel_keymaps,      },    },    textsubjects = {      enable = false,      keymaps = { ["."] = "textsubjects-smart", [";"] = "textsubjects-big" },    },    playground = {      enable = false,      disable = {},      updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code      persist_queries = false, -- Whether the query persists across vim sessions      keybindings = {        toggle_query_editor = "o",        toggle_hl_groups = "i",        toggle_injected_languages = "t",        toggle_anonymous_nodes = "a",        toggle_language_display = "I",        focus_language = "f",        unfocus_language = "F",        update = "R",        goto_node = "<cr>",        show_help = "?",      },    },    rainbow = {      enable = false,      extended_mode = true, -- Highlight also non-parentheses delimiters, boolean or table: lang -> boolean      max_file_lines = 1000, -- Do not enable for files with more than 1000 lines, int    },  }  -- -- TODO refactor treesitter  -- -- @usage pass a table with your desired languages  -- treesitter = {  --   ensure_installed = "all",  --   ignore_install = { "haskell" },  --   highlight = { enabled = true },  --   -- The below are for treesitter-textobjects plugin  --   textobj_prefixes = {  --     goto_next = "]", -- Go to next  --     goto_previous = "[", -- Go to previous  --     inner = "i", -- Select inside  --     outer = "a", -- Selct around  --     swap = "<leader>a", -- Swap with next  --   },  --   textobj_suffixes = {  --     -- Start and End respectively for the goto keys  --     -- for other keys it only uses the first  --     ["function"] = { "f", "F" },  --     ["class"] = { "m", "M" },  --     ["parameter"] = { "a", "A" },  --     ["block"] = { "k", "K" },  --     ["conditional"] = { "i", "I" },  --     ["call"] = { "c", "C" },  --     ["loop"] = { "l", "L" },  --     ["statement"] = { "s", "S" },  --     ["comment"] = { "/", "?" },  --   },  --   -- The below is for treesitter hint textobjects plugin  --   hint_labels = { "h", "j", "f", "d", "n", "v", "s", "l", "a" },  -- },endM.setup = function()  -- TODO: refacor this whole file and treesitter in general  -- if not package.loaded['nvim-treesitter'] then return end  --  -- Custom parsers  -- local parser_config = require("nvim-treesitter.parsers").get_parser_configs()  -- parser_config.make = {  --     install_info = {  --         url = "https://github.com/alemuller/tree-sitter-make", -- local path or git repo  --         files = {"src/parser.c"},  --         requires_generate_from_grammar = true  --     }  -- }  -- parser_config.just = {  --     install_info = {  --         url = "~/dev/tree-sitter-just", -- local path or git repo  --         files = {"src/parser.c"}  --     }  --     -- filetype = "just", -- if filetype does not agrees with parser name  --     -- used_by = {"bar", "baz"} -- additional filetypes that use this parser  -- }  -- Custom text objects  -- local textobj_prefixes = O.treesitter.textobj_prefixes  -- local textobj_suffixes = O.treesitter.textobj_suffixes  -- local textobj_sel_keymaps = {}  -- local textobj_swap_keymaps = {}  -- local textobj_move_keymaps = {  --   enable = O.plugin.ts_textobjects,  --   set_jumps = true, -- whether to set jumps in the jumplist  --   goto_next_start = {},  --   goto_next_end = {},  --   goto_previous_start = {},  --   goto_previous_end = {},  -- }  -- for obj, suffix in pairs(textobj_suffixes) do  --   if textobj_prefixes["goto_next"] ~= nil then  --     textobj_move_keymaps["goto_next_start"][textobj_prefixes["goto_next"] .. suffix[1]] = "@" .. obj .. ".outer"  --     textobj_move_keymaps["goto_next_end"][textobj_prefixes["goto_next"] .. suffix[2]] = "@" .. obj .. ".outer"  --   end  --   if textobj_prefixes["goto_previous"] ~= nil then  --     textobj_move_keymaps["goto_previous_start"][textobj_prefixes["goto_previous"] .. suffix[2]] = "@" .. obj .. ".outer"  --     textobj_move_keymaps["goto_previous_end"][textobj_prefixes["goto_previous"] .. suffix[1]] = "@" .. obj .. ".outer"  --   end  --  --   if textobj_prefixes["inner"] ~= nil then  --     textobj_sel_keymaps[textobj_prefixes["inner"] .. suffix[1]] = "@" .. obj .. ".inner"  --   end  --   if textobj_prefixes["outer"] ~= nil then  --     textobj_sel_keymaps[textobj_prefixes["outer"] .. suffix[1]] = "@" .. obj .. ".outer"  --   end  --  --   if textobj_prefixes["swap"] ~= nil then  --     textobj_swap_keymaps[textobj_prefixes["swap"] .. suffix[1]] = "@" .. obj .. ".outer"  --   end  -- end  -- vim.g.ts_hint_textobject_keys = O.treesitter.hint_labels -- Requires https://github.com/mfussenegger/nvim-ts-hint-textobject/pull/2  --  -- -- Add which key menu entries  -- local status, wk = pcall(require, "which-key")  -- if status then  --   local normal = {  --     mode = "n", -- Normal mode  --   }  --   local operators = {  --     mode = "o", -- Operator mode  --   }  --   wk.register(textobj_sel_keymaps, operators)  --   wk.register({  --     ["m"] = "Hint Objects",  --     ["."] = "Textsubject",  --     [";"] = "Textsubject-big",  --   }, operators)  --   wk.register(textobj_swap_keymaps, normal)  --   wk.register({  --     [textobj_prefixes["swap"]] = "Swap",  --     -- [textobj_prefixes["goto_next"]] = "Jump [",  --     -- [textobj_prefixes["goto_previous"]] = "Jump ]"  --   }, normal)  --   wk.register(textobj_move_keymaps["goto_next_start"], normal)  --   wk.register(textobj_move_keymaps["goto_next_end"], normal)  --   wk.register(textobj_move_keymaps["goto_previous_start"], normal)  --   wk.register(textobj_move_keymaps["goto_previous_end"], normal)  -- end  local status_ok, treesitter_configs = pcall(require, "nvim-treesitter.configs")  if not status_ok then    return  end  treesitter_configs.setup(O.treesitter)endreturn M
 |