mirror of https://github.com/folke/lazy.nvim.git
feat(build): build can now be a list to execute multiple build commands. Fixes #143
This commit is contained in:
parent
593d6e400b
commit
9110371120
46
README.md
46
README.md
|
@ -79,29 +79,29 @@ require("lazy").setup({
|
||||||
|
|
||||||
## 🔌 Plugin Spec
|
## 🔌 Plugin Spec
|
||||||
|
|
||||||
| Property | Type | Description |
|
| Property | Type | Description |
|
||||||
| ---------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ---------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `[1]` | `string?` | Short plugin url. Will be expanded using `config.git.url_format` |
|
| `[1]` | `string?` | Short plugin url. Will be expanded using `config.git.url_format` |
|
||||||
| **dir** | `string?` | A directory pointing to a local plugin |
|
| **dir** | `string?` | A directory pointing to a local plugin |
|
||||||
| **url** | `string?` | A custom git url where the plugin is hosted |
|
| **url** | `string?` | A custom git url where the plugin is hosted |
|
||||||
| **name** | `string?` | A custom name for the plugin used for the local plugin directory and as the display name |
|
| **name** | `string?` | A custom name for the plugin used for the local plugin directory and as the display name |
|
||||||
| **dev** | `boolean?` | When `true`, a local plugin directory will be used instead. See `config.dev` |
|
| **dev** | `boolean?` | When `true`, a local plugin directory will be used instead. See `config.dev` |
|
||||||
| **lazy** | `boolean?` | When `true`, the plugin will only be loaded when needed. Lazy-loaded plugins are automatically loaded when their Lua modules are `required`, or when one of the lazy-loading handlers triggers |
|
| **lazy** | `boolean?` | When `true`, the plugin will only be loaded when needed. Lazy-loaded plugins are automatically loaded when their Lua modules are `required`, or when one of the lazy-loading handlers triggers |
|
||||||
| **enabled** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be used |
|
| **enabled** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be used |
|
||||||
| **dependencies** | `LazySpec[]` | A list of plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise |
|
| **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 |
|
| **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)` |
|
| **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 |
|
| **branch** | `string?` | Branch of the repository |
|
||||||
| **tag** | `string?` | Tag of the repository |
|
| **tag** | `string?` | Tag of the repository |
|
||||||
| **commit** | `string?` | Commit of the repository |
|
| **commit** | `string?` | Commit of the repository |
|
||||||
| **version** | `string?` | Version to use from the repository. Full [Semver](https://devhints.io/semver) ranges are supported |
|
| **version** | `string?` | Version to use from the repository. Full [Semver](https://devhints.io/semver) ranges are supported |
|
||||||
| **pin** | `boolean?` | When `true`, this plugin will not be included in updates |
|
| **pin** | `boolean?` | When `true`, this plugin will not be included in updates |
|
||||||
| **event** | `string?` or `string[]` | Lazy-load on event |
|
| **event** | `string?` or `string[]` | Lazy-load on event |
|
||||||
| **cmd** | `string?` or `string[]` | Lazy-load on command |
|
| **cmd** | `string?` or `string[]` | Lazy-load on command |
|
||||||
| **ft** | `string?` or `string[]` | Lazy-load on filetype |
|
| **ft** | `string?` or `string[]` | Lazy-load on filetype |
|
||||||
| **keys** | `string?` or `string[]` or `LazyKeys[]` | Lazy-load on key mapping |
|
| **keys** | `string?` or `string[]` or `LazyKeys[]` | Lazy-load on key mapping |
|
||||||
| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere |
|
| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere |
|
||||||
|
|
||||||
### Lazy Loading
|
### Lazy Loading
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ local M = {}
|
||||||
---@class LazyPluginHooks
|
---@class LazyPluginHooks
|
||||||
---@field init? fun(LazyPlugin) Will always be run
|
---@field init? fun(LazyPlugin) Will always be run
|
||||||
---@field config? fun(LazyPlugin)|true|table Will be executed when loading the plugin
|
---@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[]>
|
---@class LazyPluginHandlers: table<LazyHandlerTypes, string|string[]>
|
||||||
---@field event? string[]
|
---@field event? string[]
|
||||||
|
|
|
@ -11,25 +11,25 @@ M.build = {
|
||||||
run = function(self)
|
run = function(self)
|
||||||
Loader.load(self.plugin, { task = "build" })
|
Loader.load(self.plugin, { task = "build" })
|
||||||
|
|
||||||
-- we need to source its plugin files before startup,
|
local builders = self.plugin.build
|
||||||
-- to make sure the build command has everything available
|
if builders then
|
||||||
Loader.source_runtime(self.plugin.dir, "plugin")
|
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 })
|
||||||
|
elseif type(build) == "function" then
|
||||||
|
build()
|
||||||
|
else
|
||||||
|
local shell = vim.env.SHELL or vim.o.shell
|
||||||
|
local shell_args = shell:find("cmd.exe", 1, true) and "/c" or "-c"
|
||||||
|
|
||||||
local build = self.plugin.build
|
self:spawn(shell, {
|
||||||
if build then
|
args = { shell_args, build },
|
||||||
if type(build) == "string" and build:sub(1, 1) == ":" then
|
cwd = self.plugin.dir,
|
||||||
local cmd = vim.api.nvim_parse_cmd(build:sub(2), {})
|
})
|
||||||
self.output = vim.api.nvim_cmd(cmd, { output = true })
|
end
|
||||||
elseif type(build) == "function" then
|
|
||||||
build()
|
|
||||||
else
|
|
||||||
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, {
|
|
||||||
args = { shell_args, build },
|
|
||||||
cwd = self.plugin.dir,
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
Loading…
Reference in New Issue