aboutsummaryrefslogtreecommitdiffstats
path: root/home/nvim/plugins/treesitter.lua
blob: 968af11e79b1a10ab092ee50eb0526ae6905d8b3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
local function disable(lang, buf)
    local max_filesize = 100 * 1024 -- 100 KB
    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

require("nvim-treesitter.configs").setup({
    ensure_installed = {},
    sync_install = false,
    ignore_install = {},
    modules = {},
    auto_install = false,
    highlight = {
        enable = true,
        disable = disable,
        additional_vim_regex_highlighting = false,
    },
    indent = { enable = true, disable = { "rust", "lua", "python", "golang", "nix", "json", "html", "javascript" } },
    incremental_selection = {
        enable = true,
        keymaps = {
            init_selection = "<leader>vv",
            node_incremental = "+",
            scope_incremental = false,
            node_decremental = "_",
        },
    },
    textobjects = {
        select = {
            enable = true,
            lookahead = true,
            keymaps = {
                -- You can use the capture groups defined in textobjects.scm
                ["af"] = { query = "@function.outer", desc = "around a function" },
                ["if"] = { query = "@function.inner", desc = "inner part of a function" },
                ["ac"] = { query = "@class.outer", desc = "around a class" },
                ["ic"] = { query = "@class.inner", desc = "inner part of a class" },
                ["ai"] = { query = "@conditional.outer", desc = "around an if statement" },
                ["ii"] = { query = "@conditional.inner", desc = "inner part of an if statement" },
                ["al"] = { query = "@loop.outer", desc = "around a loop" },
                ["il"] = { query = "@loop.inner", desc = "inner part of a loop" },
                ["ap"] = { query = "@parameter.outer", desc = "around parameter" },
                ["ip"] = { query = "@parameter.inner", desc = "inside a parameter" },
            },
            selection_modes = {
                ["@parameter.outer"] = "v",   -- charwise
                ["@parameter.inner"] = "v",   -- charwise
                ["@function.outer"] = "v",    -- charwise
                ["@conditional.outer"] = "V", -- linewise
                ["@loop.outer"] = "V",        -- linewise
                ["@class.outer"] = "<c-v>",   -- blockwise
            },
            include_surrounding_whitespace = false,
        },
        move = {
            enable = true,
            set_jumps = true, -- whether to set jumps in the jumplist
            goto_previous_start = {
                ["[f"] = { query = "@function.outer", desc = "Previous function" },
                ["[c"] = { query = "@class.outer", desc = "Previous class" },
                ["[p"] = { query = "@parameter.inner", desc = "Previous parameter" },
            },
            goto_next_start = {
                ["]f"] = { query = "@function.outer", desc = "Next function" },
                ["]c"] = { query = "@class.outer", desc = "Next class" },
                ["]p"] = { query = "@parameter.inner", desc = "Next parameter" },
            },
        },
        swap = {
            enable = true,
            swap_next = {
                ["<leader>a"] = "@parameter.inner",
            },
            swap_previous = {
                ["<leader>A"] = "@parameter.inner",
            },
        },
    },
})