---@type LazySpec
return { {
	'windwp/nvim-autopairs', -- automatically inserts closing brackets
	event = { 'BufReadPre', 'BufNewFile' },
	opts = {
		enable_moveright = true, -- moves the cursor over existing pairs instead of inserting duplicates
		check_ts         = true, -- whether to check treesitter for specific nodes
		ts_config        = {}
	},
	config = function(_, opts)
		local autopairs = require 'nvim-autopairs'
		autopairs.setup(opts)

		-- customise the rule for [] brackets so it doesn't close when typing ANSI escape codes
		local rule = autopairs.get_rule '['
		if rule then
			rule:with_pair(function(opt)
				local ei = math.max(1, opt.col - 1) -- get the end-index
				local prev_oct = opt.line:sub(math.max(1, opt.col - 4), ei) -- get the range of an octal escape code
				local prev_hex = opt.line:sub(math.max(1, opt.col - 4), ei) -- get the range of a hexadecimal escape code
				local prev_cha = opt.line:sub(math.max(1, opt.col - 2), ei) -- get the range of a character escape code

				-- check whether we can't match any of the patterns,
				-- if so return true, otherwise return false (whether to insert a pair)
				return (prev_oct ~= [[\033]] and prev_hex ~= [[\x1b]] and prev_cha ~= [[\e]])
			end)
		else
			vim.notify('could not add a rule for not auto-closing [ when typing an ANSI escape code',
				vim.log.levels.WARN)
		end
	end,
} }
