dotfiles

custom linux config files managed with gnu stow

dotfiles

neovim/.config/nvim/lua/plugins/treesitter.lua


return {
	"nvim-treesitter/nvim-treesitter",
	dependencies = {
		-- shows treesitter context in end of parenthesis
		"haringsrob/nvim_context_vt",
		"RRethy/nvim-treesitter-textsubjects",
		"nvim-treesitter/nvim-treesitter-textobjects",
	},
	event = { "BufReadPost", "BufNewFile" },
	config = function()
		local treesitter = require("nvim-treesitter.configs")

		treesitter.setup({
			ensure_installed = {
				"typescript",
				"javascript",
				"html",
				"tsx",
				"lua",
				"json",
				"rust",
				"css",
				"scss",
				"ruby",
				"php",
				"dockerfile",
				"bash",
				"python",
				"graphql",
				"regex",
				"yaml",
				"go",
				"terraform",
				"vim",
				"markdown",
				"markdown_inline",
				"regex",
			},
			highlight = {
				enable = true,
			},
			matchup = {
				enable = true,
			},
			incremental_selection = {
				enable = true,
				keymaps = {
					init_selection = "zi",
					node_incremental = "zi",
					scope_incremental = "zo",
					node_decremental = "zd"
				},
			},
			-- textobjects = {
				--   select = {
					--     enable = true,
					--     lookahead = true,
					--     keymaps = {
						--       ["af"] = "@function.outer",
						--       ["if"] = "@function.inner",
						--       ["ac"] = "@class.outer",
						--       ["ic"] = "@class.inner",
						--
						--       -- xml attribute
						--       ["ax"] = "@attribute.outer",
						--       ["ix"] = "@attribute.inner",
						--
						--       -- json
						--       ["ak"] = "@key.outer",
						--       ["ik"] = "@key.inner",
						--       ["av"] = "@value.outer",
						--       ["iv"] = "@value.inner",
						--     },
						--   },
						swap = {
							enable = true,
							swap_next = {
								["<leader>rp"] = "@parameter.inner",
							},
							swap_previous = {
								["<leader>rP"] = "@parameter.inner",
							},
						},
						--   move = {
							--     enable = true,
							--     set_jumps = true, -- whether to set jumps in the jumplist
							--     goto_next_start = {
								--       ["]m"] = "@function.outer",
								--       ["]]"] = "@class.outer",
								--     },
								--     goto_next_end = {
									--       ["]M"] = "@function.outer",
									--       ["]["] = "@class.outer",
									--     },
									--     goto_previous_start = {
										--       ["[m"] = "@function.outer",
										--       ["[["] = "@class.outer",
										--     },
										--     goto_previous_end = {
											--       ["[M"] = "@function.outer",
											--       ["[]"] = "@class.outer",
											--     },
											--   },
											-- },
											textsubjects = {
												enable = true,
												keymaps = {
													["."] = "textsubjects-smart",
													[";"] = "textsubjects-container-outer",
													['i;'] = 'textsubjects-container-inner',
												},
											},
										})

										local r = require("utils.remaps")

										r.which_key("<leader>dt", "Treesitter")

										r.noremap("n", "<leader>dtp", function()
											vim.treesitter.inspect_tree({ command = "botright 60vnew" })
										end, "Treesitter playground")

										r.noremap("n", "<leader>dtt", "<cmd>TSHighlightCapturesUnderCursor<CR>", "Shows highlight colors under cursor")

										r.map_virtual("zi", "Init selection")
										r.map_virtual("zi", "Expand node")
										r.map_virtual("zo", "Expand scope")
										r.map_virtual("zd", "Decrement scope")

										-- r.map_virtual("af", "Function outer motion")
										-- r.map_virtual("if", "Function inner motion")
										-- r.map_virtual("ac", "Class outer motion")
										-- r.map_virtual("ic", "Class inner motion")
										--
										-- r.map_virtual("ax", "Attribute (html, xml) outer motion")
										-- r.map_virtual("ix", "Attribute (html, xml) inner motion")
										--
										-- r.map_virtual("ak", "Json key outer motion")
										-- r.map_virtual("ik", "Json key inner motion")
										--
										-- r.map_virtual("av", "Json value outer motion")
										-- r.map_virtual("iv", "Json value inner motion")
										--
										-- r.which_key("fp", "parameters")
										--
										r.map_virtual("<leader>rp", "Swap parameter to next")
										r.map_virtual("<leader>rP", "Swap parameter to previous")
										--
										-- r.map_virtual("]m", "Go to next function (start)")
											-- r.map_virtual("]M", "Go to next function (end)")
											--
											-- r.map_virtual("]]", "Go to next class (start)")
											-- r.map_virtual("][", "Go to next class (end)")
											--
											-- r.map_virtual("[m", "Go to previous function (start)")
												-- r.map_virtual("[M", "Go to previous function (end)")
												--
												-- r.map_virtual("[[", "Go to previous class (start)")
												-- r.map_virtual("[]", "Go to previous class (end)")
											end,
											build = function()
												vim.cmd([[TSUpdate]])
											end,
										}

Download

raw zip tar