return {
	{
		"nvim-treesitter/nvim-treesitter",
		event = { "BufReadPre", "BufNewFile" },
		build = ":TSUpdate",
		dependencies = {
			{ "nvim-treesitter/nvim-treesitter-textobjects" },
		},
		config = function()
			---@class ParserConfig
			---@field install_info table
			---@field filetype string
			local parser_config = require("nvim-treesitter.parsers").get_parser_configs()

			parser_config.blade = {
				install_info = {
					url = "https://github.com/EmranMR/tree-sitter-blade",
					files = { "src/parser.c" },
					branch = "main",
				},
				filetype = "blade",
			}

            vim.filetype.add({
                extension = { blade = "blade" },
                pattern = {
                    ['.*%.blade%.php'] = 'blade',
                },
            })

            ---
            ---:TSEditQuery highlights blade
            ---
            ---(directive) @function
            ---(directive_start) @function
            ---(directive_end) @function
            ---(comment) @comment
            ---((parameter) @include (#set! "priority" 110))
            ---((php_only) @include (#set! "priority" 110))
            ---((bracket_start) @function (#set! "priority" 120))
            ---((bracket_end) @function (#set! "priority" 120))
            ---(keyword) @function
            ---

            ---
            ---:TSEditQuery injections blade
            ---((text) @injection.content
            ---    (#not-has-ancestor? @injection.content "envoy")
            ---    (#set! injection.combined)
            ---    (#set! injection.language php))
            ---

			-- import nvim-treesitter plugin
			local treesitter = require("nvim-treesitter.configs")

			-- configure treesitter
			treesitter.setup({
				-- ensure these language parsers are installed
				ensure_installed = {
					"json",
					"javascript",
					"typescript",
					"tsx",
					"yaml",
					"html",
					"css",
					"markdown",
					"markdown_inline",
					"bash",
					"lua",
					"vim",
					"dockerfile",
					"gitignore",
					"php",
					"latex",
                    "blade",
				},
				ignore_install = {},
				modules = {},
				sync_install = true,
				auto_install = true,
				highlight = {
					enable = true,
					disable = { "latex" },
				},
				indent = { enable = true },
				autotag = { enable = true },
				textobjects = {
					select = {
						enable = true,
						lookahead = true,
						keymaps = {
							["af"] = "@function.outer",
							["if"] = "@function.inner",
							["ac"] = "@conditional.outer",
							["ic"] = "@conditional.inner",
							["al"] = "@loop.outer",
							["il"] = "@loop.inner",
						},
						selection_modes = {
							["@parameter.outer"] = "v", -- charwise
							["@function.outer"] = "V", -- linewise
							["@class.outer"] = "<c-v>", -- blockwise
						},
						include_surrounding_whitespace = false,
					},
					move = {
						enable = true,
						set_jumps = true,
						goto_next_start = {
							["]f"] = "@function.outer",
							["]c"] = "@conditional.outer",
							["]o"] = "@loop.outer",
						},
						goto_next_end = {
							["]F"] = "@function.outer",
							["]C"] = "@conditional.outer",
							["]O"] = "@loop.outer",
						},
						goto_previous_start = {
							["[f"] = "@function.outer",
							["[c"] = "@conditional.outer",
							["[o"] = "@loop.outer",
						},
						goto_previous_end = {
							["[F"] = "@function.outer",
							["[C"] = "@conditional.outer",
							["[O"] = "@loop.outer",
						},
						goto_next = {
							["]b"] = "@block.outer",
						},
						goto_previous = {
							["[b"] = "@block.outer",
						},
					},
				},
			})
		end,
	},
}