Skip to content

Commit

Permalink
feat(plugin): allow plugin files only without a main plugin module. F…
Browse files Browse the repository at this point in the history
…ixes #53
  • Loading branch information
folke committed Dec 21, 2022
1 parent f5734f5 commit 44f80a7
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 16 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ Example:
require("lazy").setup("plugins")
```

- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua`
- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **_(this file is optional)_**

```lua
return {
Expand Down
8 changes: 2 additions & 6 deletions lua/lazy/core/plugin.lua
Original file line number Diff line number Diff line change
Expand Up @@ -220,19 +220,15 @@ function M.spec()

if type(Config.spec) == "string" then
-- spec is a module
local function _load(name)
local modname = name and (Config.spec .. "." .. name) or Config.spec
local function _load(modname)
-- unload the module so we get a clean slate
---@diagnostic disable-next-line: no-unknown
package.loaded[modname] = nil
Util.try(function()
spec:normalize(Cache.require(modname))
end, "Failed to load **" .. modname .. "**")
end
local path_plugins = vim.fn.stdpath("config") .. "/lua/" .. Config.spec:gsub("%.", "/")

_load()
Util.lsmod(path_plugins, _load)
Util.lsmod(Config.spec --[[@as string]], _load)
else
-- spec is a spec
spec:normalize(vim.deepcopy(Config.spec))
Expand Down
22 changes: 18 additions & 4 deletions lua/lazy/core/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -158,14 +158,28 @@ function M.walk(path, fn)
end)
end

---@param modname string
---@param root string
---@param fn fun(modname:string, modpath:string)
function M.lsmod(root, fn)
---@overload fun(modname:string, fn: fun(modname:string, modpath:string))
function M.lsmod(modname, root, fn)
if type(root) == "function" then
fn = root
root = vim.fn.stdpath("config") .. "/lua"
end
root = root .. "/" .. modname:gsub("%.", "/")
if vim.loop.fs_stat(root .. ".lua") then
fn(modname, root .. ".lua")
end
M.ls(root, function(path, name, type)
if type == "file" and name:sub(-4) == ".lua" and name ~= "init.lua" then
fn(name:sub(1, -5), path)
if type == "file" and name:sub(-4) == ".lua" then
if name == "init.lua" then
fn(modname, path)
else
fn(modname .. "." .. name:sub(1, -5), path)
end
elseif type == "directory" and vim.loop.fs_stat(path .. "/init.lua") then
fn(name, path .. "/init.lua")
fn(modname .. "." .. name, path .. "/init.lua")
end
end)
end
Expand Down
7 changes: 2 additions & 5 deletions lua/lazy/manage/reloader.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ M.files = {}

---@type vim.loop.Timer
M.timer = nil
M.main = nil
M.root = nil

function M.enable()
Expand All @@ -19,8 +18,7 @@ function M.enable()
end
if type(Config.spec) == "string" then
M.timer = vim.loop.new_timer()
M.root = vim.fn.stdpath("config") .. "/lua/" .. Config.spec:gsub("%.", "/")
M.main = vim.loop.fs_stat(M.root .. ".lua") and (M.root .. ".lua") or (M.root .. "/init.lua")
M.root = vim.fn.stdpath("config") .. "/lua/"
M.check(true)
M.timer:start(2000, 2000, M.check)
end
Expand Down Expand Up @@ -56,8 +54,7 @@ function M.check(start)
end
end

check(nil, M.main)
Util.lsmod(M.root, check)
Util.lsmod(Config.spec --[[@as string]], M.root, check)

for file in pairs(M.files) do
if not checked[file] then
Expand Down

0 comments on commit 44f80a7

Please sign in to comment.