Skip to content

Commit

Permalink
feat(plugin): dev.path can now be a function (#1157)
Browse files Browse the repository at this point in the history
In some case, `dev.path .. plugin.name` is not enoguh.

For example, when using `ghq` to manage projects, plugin directories may
vary by onewrs of the plugins.

With this change, users can do something like below

``` lua
require("lazy").setup("plugins", {
  dev = {
    path = function(p)
      -- ghq
      local path, cnt = string.gsub(p.url, "^https://(.*)%.git$", "~/ghq/%1")
      if cnt == 1 then
        return path
      end

      -- fallback to default
      return "~/projects/" .. plugin.name
    end,
  },
})
```
  • Loading branch information
atusy committed Jan 20, 2024
1 parent 42694c4 commit a6f782a
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ return {
filter = true,
},
dev = {
-- directory where you store your local plugin projects
---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects
path = "~/projects",
---@type string[] plugins that match these patterns will use your local versions instead of being fetched from GitHub
patterns = {}, -- For example {"folke"}
Expand Down
6 changes: 4 additions & 2 deletions lua/lazy/core/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ M.defaults = {
filter = true,
},
dev = {
-- directory where you store your local plugin projects
---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects
path = "~/projects",
---@type string[] plugins that match these patterns will use your local versions instead of being fetched from GitHub
patterns = {}, -- For example {"folke"}
Expand Down Expand Up @@ -213,7 +213,9 @@ function M.setup(opts)
table.insert(M.options.install.colorscheme, "habamax")

M.options.root = Util.norm(M.options.root)
M.options.dev.path = Util.norm(M.options.dev.path)
if type(M.options.dev.path) == "string" then
M.options.dev.path = Util.norm(M.options.dev.path)
end
M.options.lockfile = Util.norm(M.options.lockfile)
M.options.readme.root = Util.norm(M.options.readme.root)

Expand Down
15 changes: 10 additions & 5 deletions lua/lazy/core/plugin.lua
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,16 @@ function Spec:add(plugin, results)
end

-- dev plugins
if
plugin.dev
and (not Config.options.dev.fallback or vim.fn.isdirectory(Config.options.dev.path .. "/" .. plugin.name) == 1)
then
dir = Config.options.dev.path .. "/" .. plugin.name
if plugin.dev then
local dir_dev
if type(Config.options.dev.path) == "string" then
dir_dev = Config.options.dev.path .. "/" .. plugin.name
else
dir_dev = Util.norm(Config.options.dev.path(plugin))
end
if not Config.options.dev.fallback or vim.fn.isdirectory(dir_dev) == 1 then
dir = dir_dev
end
elseif plugin.dev == false then
-- explicitely select the default path
dir = Config.options.root .. "/" .. plugin.name
Expand Down

0 comments on commit a6f782a

Please sign in to comment.