feat(build): build can now be a list to execute multiple build commands. Fixes #143

This commit is contained in:
Folke Lemaitre 2022-12-24 09:17:29 +01:00
parent 593d6e400b
commit 9110371120
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
3 changed files with 42 additions and 42 deletions

View File

@ -80,7 +80,7 @@ require("lazy").setup({
## 🔌 Plugin Spec
| Property | Type | Description |
| ---------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ---------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `[1]` | `string?` | Short plugin url. Will be expanded using `config.git.url_format` |
| **dir** | `string?` | A directory pointing to a local plugin |
| **url** | `string?` | A custom git url where the plugin is hosted |
@ -91,7 +91,7 @@ require("lazy").setup({
| **dependencies** | `LazySpec[]` | A list of plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise |
| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup |
| **config** | `fun(LazyPlugin)` or `true` or `table` | `config` is executed when the plugin loads. You can also set to `true` or pass a `table`, that will be passed to `require("plugin").setup(opts)` |
| **build** | `fun(LazyPlugin)` or `string` | `build` is executed when a plugin is installed or updated. If it's a string it will be ran as a shell command. When prefixed with `:` it is a Neovim command. |
| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. If it's a string it will be ran as a shell command. When prefixed with `:` it is a Neovim command. You can also specify a list to executed multiple build commands |
| **branch** | `string?` | Branch of the repository |
| **tag** | `string?` | Tag of the repository |
| **commit** | `string?` | Commit of the repository |

View File

@ -19,7 +19,7 @@ local M = {}
---@class LazyPluginHooks
---@field init? fun(LazyPlugin) Will always be run
---@field config? fun(LazyPlugin)|true|table Will be executed when loading the plugin
---@field build? string|fun(LazyPlugin)
---@field build? string|fun(LazyPlugin)|(string|fun(LazyPlugin))[]
---@class LazyPluginHandlers: table<LazyHandlerTypes, string|string[]>
---@field event? string[]

View File

@ -11,12 +11,11 @@ M.build = {
run = function(self)
Loader.load(self.plugin, { task = "build" })
-- we need to source its plugin files before startup,
-- to make sure the build command has everything available
Loader.source_runtime(self.plugin.dir, "plugin")
local build = self.plugin.build
if build then
local builders = self.plugin.build
if builders then
builders = type(builders) == "table" and builders or { builders }
---@cast builders (string|fun(LazyPlugin))[]
for _, build in ipairs(builders) do
if type(build) == "string" and build:sub(1, 1) == ":" then
local cmd = vim.api.nvim_parse_cmd(build:sub(2), {})
self.output = vim.api.nvim_cmd(cmd, { output = true })
@ -26,12 +25,13 @@ M.build = {
local shell = vim.env.SHELL or vim.o.shell
local shell_args = shell:find("cmd.exe", 1, true) and "/c" or "-c"
return self:spawn(shell, {
self:spawn(shell, {
args = { shell_args, build },
cwd = self.plugin.dir,
})
end
end
end
end,
}