From d9110299475823eff784a6ccf6aa3f63dea9b295 Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Tue, 18 Jun 2024 17:58:40 +0200 Subject: [PATCH] feat: support loading plugin spec lists and imports more than once --- lua/lz/n/init.lua | 30 ++++++++++++++---------------- spec/import_spec.lua | 3 --- spec/lz_n_spec.lua | 1 - 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/lua/lz/n/init.lua b/lua/lz/n/init.lua index 219866c..10548ad 100644 --- a/lua/lz/n/init.lua +++ b/lua/lz/n/init.lua @@ -23,29 +23,27 @@ function M.load(spec) --- @cast spec lz.n.Spec local spec_mod = require("lz.n.spec") local is_single_plugin_spec = spec_mod.is_single_plugin_spec(spec) - if not is_single_plugin_spec then - if vim.g.lz_n_did_load then - return vim.notify( - "lz.n.load() should only be called on a list of plugin specs once.", - vim.log.levels.WARN, - { title = "lz.n" } - ) - end - vim.g.lz_n_did_load = true - end local plugins = spec_mod.parse(spec) require("lz.n.loader").load_startup_plugins(plugins) local state = require("lz.n.state") if is_single_plugin_spec then - state.plugins = vim.tbl_deep_extend("force", state.plugins, plugins) + local ok, updated_plugins = pcall(vim.tbl_deep_extend, "error", state.plugins, plugins) + if not ok then + return vim.schedule(function() + vim.notify("Cannot load the same plugin specs more than once", vim.log.levels.ERROR, { title = "lz.n" }) + end) + end + state.plugins = updated_plugins else if state.plugins[spec[1]] then - return vim.notify( - ("Plugin %s has already been registered for lazy loading"):format(spec[1]), - vim.log.levels.WARN, - { title = "lz.n" } - ) + return vim.schedule(function() + vim.notify( + ("Plugin %s has already been registered for lazy loading"):format(spec[1]), + vim.log.levels.ERROR, + { title = "lz.n" } + ) + end) end state.plugins = plugins end diff --git a/spec/import_spec.lua b/spec/import_spec.lua index e68627d..738e1c7 100644 --- a/spec/import_spec.lua +++ b/spec/import_spec.lua @@ -12,7 +12,6 @@ local spy = require("luassert.spy") describe("lz.n", function() describe("load", function() it("import", function() - vim.g.lz_n_did_load = false local plugin_config_content = [[ return { "telescope.nvim", @@ -31,7 +30,6 @@ return { vim.system({ "rm", spec_file }):wait() end) it("import root file", function() - vim.g.lz_n_did_load = false local plugin_config_content = [[ return { { "sweetie.nvim" }, @@ -51,7 +49,6 @@ return { vim.system({ "rm", spec_file }):wait() end) it("import plugin specs and spec file", function() - vim.g.lz_n_did_load = false local plugin_config_content = [[ return { "telescope.nvim", diff --git a/spec/lz_n_spec.lua b/spec/lz_n_spec.lua index 985f7cc..afcd03b 100644 --- a/spec/lz_n_spec.lua +++ b/spec/lz_n_spec.lua @@ -4,7 +4,6 @@ vim.g.lz_n = { } local loader = require("lz.n.loader") local spy = require("luassert.spy") -vim.g.lz_n_did_load = false describe("lz.n", function() describe("load", function()