diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua index 5fe4fe5..a61867c 100644 --- a/nvim/lua/plugins.lua +++ b/nvim/lua/plugins.lua @@ -15,12 +15,12 @@ vim.schedule(function() require('plugins.language_support') -- LSP, treesitter and any other language specific support plugins require('plugins.gitsigns') -- Git gutter notifiers require('plugins.nvim-cmp') -- Autocompletion plugin (TODO: Move to builtin completion?) + require('plugins.luasnip') -- Snippet engine require('plugins.telescope') -- Floating window fuzzy searching different sources require('plugins.telekasten') -- Note taking plugins require('plugins.mason') -- LSP and DAP manager require('plugins.twilight') -- Focus mode, dim lines around the cursor's location require('plugins.render-markdown') -- Render markdown directly in neovim - require('plugins.luasnip') -- Snippet engine vim.pack.add({ 'https://github.com/windwp/nvim-autopairs', -- Autocomplete symbol pairs when typing diff --git a/nvim/lua/plugins/luasnip.lua b/nvim/lua/plugins/luasnip.lua index 761bc00..9be2ef0 100644 --- a/nvim/lua/plugins/luasnip.lua +++ b/nvim/lua/plugins/luasnip.lua @@ -4,17 +4,41 @@ vim.pack.add({ 'https://github.com/L3MON4D3/LuaSnip' }) -local luasnip_lua_path = vim.api.nvim_get_runtime_file('lua/luasnip/init.lua', false)[1] -if not luasnip_lua_path then return end -local luasnip_root = vim.fn.fnamemodify(luasnip_lua_path, ':h:h:h') +local function luasnip_dependency_update() + local luasnip_lua_path = vim.api.nvim_get_runtime_file('lua/luasnip/init.lua', false)[1] + if not luasnip_lua_path then return end -- Short circuit if not found + local luasnip_root = vim.fn.fnamemodify(luasnip_lua_path, ':h:h:h') + local artifact = luasnip_root .. '/deps/jsregexp/jsregexp.so' -vim.api.nvim_create_autocmd('PackChanged', { callback = function(args) - local name, kind = args.data.spec.name, args.data.kind - if name == 'luasnip' and kind == 'update' then - if not args.data.active then vim.cmd.packadd('luasnip') end - vim.system({'make', 'install_jsregexp'}, { cwd = luasnip_root }) + -- Verify the lib exists, (re)run the make install target + if vim.uv.fs_stat(artifact) then + vim.notify('Building LuaSnip jsregexp dependency...', vim.log.levels.INFO) + vim.system({ 'make', 'install_jsregexp' }, { cwd = luasnip_root }, function (out) + vim.schedule(function() + if out.code == 0 then + vim.notify('LuaSnip jsregexp built successfully!', vim.log.levels.INFO) + else + vim.notify('Failed to build LuaSnip jsregexp:\n' .. (out.stderr or out.stdout or ''), vim.log.levels.ERROR) + end + end) + end) end -end}) +end + +vim.api.nvim_create_autocmd('PackChanged', { + callback = function(args) + local name, kind = args.data.spec.name, args.data.kind + if name == 'luasnip' and kind == 'update' then + luasnip_dependency_update() + end + end +}) + +require('luasnip').setup { + enable_autosnippets = true, +} + +-- local types = require('luasnip.util.types') require('luasnip.loaders.from_vscode').lazy_load() require('luasnip.loaders.from_lua').lazy_load({ paths = "./snippets" })