return {
  {
    'RRethy/nvim-treesitter-endwise',
  },
  {
    "windwp/nvim-ts-autotag",
    config = function()
      require('nvim-ts-autotag').setup({
        opts = {
          enable_close = true,         -- Auto close tags
          enable_rename = true,        -- Auto rename pairs of tags
          enable_close_on_slash = true -- Auto close on trailing </
        }
      })
    end
  },
  {
    'windwp/nvim-autopairs',
    event = "InsertEnter",
    config = function()
      require('nvim-autopairs').setup()

      local npairs = require("nvim-autopairs")
      local Rule = require('nvim-autopairs.rule')
      local cmp_autopairs = require('nvim-autopairs.completion.cmp')
      local cmp = require('cmp')
      cmp.event:on(
        'confirm_done',
        cmp_autopairs.on_confirm_done()
      )

      npairs.setup({
        check_ts = true,
        ts_config = {
          lua = { 'string' }, -- it will not add a pair on that treesitter node
          javascript = { 'template_string' },
          java = false,       -- don't check treesitter on java
        }
      })

      local ts_conds = require('nvim-autopairs.ts-conds')


      -- press % => %% only while inside a comment or string
      npairs.add_rules({
        Rule("%", "%", "lua")
            :with_pair(ts_conds.is_ts_node({ 'string', 'comment' })),
        Rule("$", "$", "lua")
            :with_pair(ts_conds.is_not_ts_node({ 'function' }))
      })
    end,
    opts = {
      enabled = function(bufnr) return true end,
      disable_filetype = { "TelescopePrompt", "spectre_panel", "snacks_picker_input" },
      enable_check_bracket_line = false,
      map_cr = true,
      map_bs = true, -- map the <BS> key
    },
  }
}
