return { -- disable builtin snippet support { "garymjr/nvim-snippets", enabled = false }, -- add luasnip { "L3MON4D3/LuaSnip", lazy = true, build = (not LazyVim.is_win()) and "echo 'NOTE: jsregexp is optional, so not a big deal if it fails to build'; make install_jsregexp" or nil, dependencies = { { "rafamadriz/friendly-snippets", config = function() require("luasnip.loaders.from_vscode").lazy_load() require("luasnip.loaders.from_vscode").lazy_load({ paths = { vim.fn.stdpath("config") .. "/snippets" } }) end, }, }, opts = { history = true, delete_check_events = "TextChanged", }, }, -- add snippet_forward action { "L3MON4D3/LuaSnip", opts = function() LazyVim.cmp.actions.snippet_forward = function() if require("luasnip").jumpable(1) then require("luasnip").jump(1) return true end end end, }, -- nvim-cmp integration { "nvim-cmp", optional = true, dependencies = { "saadparwaiz1/cmp_luasnip" }, opts = function(_, opts) opts.snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, } table.insert(opts.sources, { name = "luasnip" }) end, -- stylua: ignore keys = { { "", function() require("luasnip").jump(1) end, mode = "s" }, { "", function() require("luasnip").jump(-1) end, mode = { "i", "s" } }, }, }, -- blink.cmp integration { "saghen/blink.cmp", optional = true, dependencies = { { "saghen/blink.compat", opts = { impersonate_nvim_cmp = true } }, { "saadparwaiz1/cmp_luasnip" }, }, opts = { sources = { compat = { "luasnip" } }, snippets = { expand = function(snippet) require("luasnip").lsp_expand(snippet) end, active = function(filter) if filter and filter.direction then return require("luasnip").jumpable(filter.direction) end return require("luasnip").in_snippet() end, jump = function(direction) require("luasnip").jump(direction) end, }, }, }, }