aboutsummaryrefslogtreecommitdiffstats
path: root/home/nvim/plugins/treesitter.lua
blob: 0b688ec47dcb8495745d1e29f579467142912c91 (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.uv.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").setup({
	auto_install = false,
	ensure_installed = {},
	ignore_install = {},
	modules = {},
	sync_install = false,
	highlight = {
		additional_vim_regex_highlighting = false,
		disable = disable,
		enable = true,
	},
	indent = { enable = true, disable = { "rust", "lua", "python", "golang", "nix", "json", "html", "javascript" } },
	incremental_selection = {
		enable = true,
		keymaps = {
			init_selection = "<leader>vv",
			node_decremental = "_",
			node_incremental = "+",
			scope_incremental = false,
		},
	},
	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",
			},
		},
	},
})