return {
	{
		"nvim-treesitter/nvim-treesitter",
		version = false,
		build = ":TSUpdate",
		event = { "BufReadPost", "BufNewFile" },
		dependencies = {
			"nvim-treesitter/nvim-treesitter-textobjects"
		},
		opts = {
			highlight = { enable = true },
			indent = { enable = true },
			context_commentstring = { enable = true, enable_autocmd = false },
			ensure_installed = "all",
			textobjects = {
				select = {
					enable = true,
					lookahead = false,

					keymaps = {
						["af"] = "@function.outer",
						["if"] = "@function.inner",
						["ac"] = "@class.outer",
						["ic"] = "@class.inner",
						["ia"] = "@parameter.inner",
						["aa"] = "@parameter.outer",
					},
				},
			},
		},
		config = function(_, opts)
			require("nvim-treesitter.configs").setup(opts)
		end,
	},

	{
		"numToStr/Comment.nvim",
		event = "VeryLazy",
		dependencies = {
			"JoosepAlviste/nvim-ts-context-commentstring",
		},
		opts = function()
			return {
				pre_hook = require('ts_context_commentstring.integrations.comment_nvim').create_pre_hook(),
				toggler = {
					block = "gC",
				},
			}
		end
	},

	{
		"windwp/nvim-ts-autotag",
		config = true,
		ft = {
			'html', 'javascript', 'typescript', 'javascriptreact', 'typescriptreact', 'svelte', 'vue', 'tsx', 'jsx',
			'rescript', 'xml', 'php', 'markdown', 'glimmer', 'handlebars', 'hbs'
		},
	},

	{
		"echasnovski/mini.pairs",
		version = '*',
		opts = {
			mappings = {
				-- Disable pairs if the next char is not a whitespace
				['('] = { action = 'open', pair = '()', neigh_pattern = '[^\\][%s]' },
				['['] = { action = 'open', pair = '[]', neigh_pattern = '[^\\][%s]' },
				['{'] = { action = 'open', pair = '{}', neigh_pattern = '[^\\][%s]' },
				['"'] = { action = 'closeopen', pair = '""', neigh_pattern = '[^\\][%s]', register = { cr = false } },
				["'"] = { action = 'closeopen', pair = "''", neigh_pattern = '[^%a\\][%s]', register = { cr = false } },
				['`'] = { action = 'closeopen', pair = '``', neigh_pattern = '[^\\][%s]', register = { cr = false } },
			},
		},
		config = function(_, opts) require('mini.pairs').setup(opts) end,
	},
}
